diff options
author | Pau Espin Pedrol <pespin@sysmocom.de> | 2020-07-29 18:05:25 +0200 |
---|---|---|
committer | Pau Espin Pedrol <pespin@sysmocom.de> | 2020-07-31 13:54:35 +0200 |
commit | 553a25033e920320027d1e8a7920c0ae1af922eb (patch) | |
tree | 61d9ec9796b380d77f0562796155df3eb7454d0c /Transceiver52M | |
parent | 1d165a043e956c6a86a3d36f089fb940234b33b6 (diff) |
Use new libosmovty cpu sched config features
Using the new libosmovty features allow for:
* Setting different cpu-affinity masks for each thread in the process,
both at startup through .cfg file as well as changing it at runtime.
* Unified VTY interface to change the scheduling policy of the process
inherited by all osmocom processes enabling the feature.
Depends: libosmocore.git Change-Id If76a4bd2cc7b3c7adf5d84790a944d78be70e10a
Depends: osmo-gsm-masnuals.git Change-Id Icd75769ef630c3fa985fc5e2154d5521689cdd3c
Related: SYS#4986
Change-Id: I3798603779b88ea37da03033cf7737a6e4751d6e
Diffstat (limited to 'Transceiver52M')
-rw-r--r-- | Transceiver52M/Transceiver.cpp | 5 | ||||
-rw-r--r-- | Transceiver52M/device/uhd/UHDDevice.cpp | 3 | ||||
-rw-r--r-- | Transceiver52M/osmo-trx.cpp | 6 | ||||
-rw-r--r-- | Transceiver52M/radioInterface.cpp | 4 |
4 files changed, 17 insertions, 1 deletions
diff --git a/Transceiver52M/Transceiver.cpp b/Transceiver52M/Transceiver.cpp index c3ef377..32e0226 100644 --- a/Transceiver52M/Transceiver.cpp +++ b/Transceiver52M/Transceiver.cpp @@ -37,6 +37,7 @@ extern "C" { #include <osmocom/core/utils.h> #include <osmocom/core/socket.h> #include <osmocom/core/bits.h> +#include <osmocom/vty/cpu_sched_vty.h> } #ifdef HAVE_CONFIG_H @@ -1273,6 +1274,7 @@ void *RxUpperLoopAdapter(TrxChanThParams *params) snprintf(thread_name, 16, "RxUpper%zu", num); set_selfthread_name(thread_name); + OSMO_ASSERT(osmo_cpu_sched_vty_apply_localthread() == 0); while (1) { if (!trx->driveReceiveFIFO(num)) { @@ -1288,6 +1290,7 @@ void *RxUpperLoopAdapter(TrxChanThParams *params) void *RxLowerLoopAdapter(Transceiver *transceiver) { set_selfthread_name("RxLower"); + OSMO_ASSERT(osmo_cpu_sched_vty_apply_localthread() == 0); while (1) { if (!transceiver->driveReceiveRadio()) { @@ -1303,6 +1306,7 @@ void *RxLowerLoopAdapter(Transceiver *transceiver) void *TxLowerLoopAdapter(Transceiver *transceiver) { set_selfthread_name("TxLower"); + OSMO_ASSERT(osmo_cpu_sched_vty_apply_localthread() == 0); while (1) { transceiver->driveTxFIFO(); @@ -1321,6 +1325,7 @@ void *TxUpperLoopAdapter(TrxChanThParams *params) snprintf(thread_name, 16, "TxUpper%zu", num); set_selfthread_name(thread_name); + OSMO_ASSERT(osmo_cpu_sched_vty_apply_localthread() == 0); while (1) { if (!trx->driveTxPriorityQueue(num)) { diff --git a/Transceiver52M/device/uhd/UHDDevice.cpp b/Transceiver52M/device/uhd/UHDDevice.cpp index 854ed2e..b5dda28 100644 --- a/Transceiver52M/device/uhd/UHDDevice.cpp +++ b/Transceiver52M/device/uhd/UHDDevice.cpp @@ -34,7 +34,9 @@ #endif extern "C" { +#include <osmocom/core/utils.h> #include <osmocom/gsm/gsm_utils.h> +#include <osmocom/vty/cpu_sched_vty.h> } #ifdef USE_UHD_3_11 @@ -150,6 +152,7 @@ static const std::map<dev_band_key, dev_band_desc> dev_band_nom_power_param_map void *async_event_loop(uhd_device *dev) { set_selfthread_name("UHDAsyncEvent"); + OSMO_ASSERT(osmo_cpu_sched_vty_apply_localthread() == 0); while (1) { dev->recv_async_msg(); diff --git a/Transceiver52M/osmo-trx.cpp b/Transceiver52M/osmo-trx.cpp index 9fcbda5..4a92447 100644 --- a/Transceiver52M/osmo-trx.cpp +++ b/Transceiver52M/osmo-trx.cpp @@ -55,6 +55,7 @@ extern "C" { #include <osmocom/ctrl/control_if.h> #include <osmocom/vty/stats.h> #include <osmocom/vty/command.h> +#include <osmocom/vty/cpu_sched_vty.h> #include "convolve.h" #include "convert.h" @@ -435,7 +436,9 @@ static int set_sched_rr(unsigned int prio) int rc; memset(¶m, 0, sizeof(param)); param.sched_priority = prio; - LOG(INFO) << "Setting SCHED_RR priority " << param.sched_priority; + LOG(INFO) << "Setting SCHED_RR priority " << param.sched_priority + << ". This setting is DEPRECATED, please use 'policy rr " << param.sched_priority + << "' under the 'sched' VTY node instead."; rc = sched_setscheduler(getpid(), SCHED_RR, ¶m); if (rc != 0) { LOG(ERROR) << "Config: Setting SCHED_RR failed"; @@ -589,6 +592,7 @@ int main(int argc, char *argv[]) vty_init(&g_vty_info); logging_vty_add_cmds(); ctrl_vty_init(tall_trx_ctx); + osmo_cpu_sched_vty_init(tall_trx_ctx); trx_vty_init(g_trx_ctx); osmo_talloc_vty_add_cmds(); diff --git a/Transceiver52M/radioInterface.cpp b/Transceiver52M/radioInterface.cpp index adc2ee7..64a6f21 100644 --- a/Transceiver52M/radioInterface.cpp +++ b/Transceiver52M/radioInterface.cpp @@ -27,6 +27,9 @@ #include <Threads.h> extern "C" { +#include <osmocom/core/utils.h> +#include <osmocom/vty/cpu_sched_vty.h> + #include "convert.h" } @@ -171,6 +174,7 @@ bool RadioInterface::tuneRx(double freq, size_t chan) void *AlignRadioServiceLoopAdapter(RadioInterface *radioInterface) { set_selfthread_name("AlignRadio"); + OSMO_ASSERT(osmo_cpu_sched_vty_apply_localthread() == 0); while (1) { sleep(60); radioInterface->alignRadio(); |