[PATCH] osmo-trx[master]: Add '-t' command line option to enable SCHED_RR

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

Harald Welte gerrit-no-reply at lists.osmocom.org
Thu Jun 29 13:37:34 UTC 2017


Review at  https://gerrit.osmocom.org/3080

Add '-t' command line option to enable SCHED_RR

SCHED_RR allows us to operate osmo-trx reliable even under exceptionally
high system load, as the realtime scheduler priority will have higher
priority than the other "regular" tasks on the system.

Change-Id: Ia2452b9763960b2be37fbeee9d832554da68a53f
Closes: OS#2344
---
M Transceiver52M/osmo-trx.cpp
1 file changed, 29 insertions(+), 2 deletions(-)


  git pull ssh://gerrit.osmocom.org:29418/osmo-trx refs/changes/80/3080/1

diff --git a/Transceiver52M/osmo-trx.cpp b/Transceiver52M/osmo-trx.cpp
index 31a99cf..61b3098 100644
--- a/Transceiver52M/osmo-trx.cpp
+++ b/Transceiver52M/osmo-trx.cpp
@@ -27,6 +27,7 @@
 #include <signal.h>
 #include <stdlib.h>
 #include <unistd.h>
+#include <sched.h>
 
 #include <GSMCommon.h>
 #include <Logger.h>
@@ -77,6 +78,7 @@
 	double rssi_offset;
 	bool swap_channels;
 	bool edge;
+	int sched_rr;
 };
 
 ConfigurationTable gConfig;
@@ -259,7 +261,8 @@
 		"  -r    Random Normal Burst test mode with TSC\n"
 		"  -A    Random Access Burst test mode with delay\n"
 		"  -R    RSSI to dBm offset in dB (default=0)\n"
-		"  -S    Swap channels (UmTRX only)\n",
+		"  -S    Swap channels (UmTRX only)\n"
+		"  -t    SCHED_RR real-time priority (1..32)\n",
 		"EMERG, ALERT, CRT, ERR, WARNING, NOTICE, INFO, DEBUG");
 }
 
@@ -283,8 +286,9 @@
 	config->rssi_offset = 0.0;
 	config->swap_channels = false;
 	config->edge = false;
+	config->sched_rr = -1;
 
-	while ((option = getopt(argc, argv, "ha:l:i:p:c:dmxgfo:s:b:r:A:R:Se")) != -1) {
+	while ((option = getopt(argc, argv, "ha:l:i:p:c:dmxgfo:s:b:r:A:R:Set:")) != -1) {
 		switch (option) {
 		case 'h':
 			print_help();
@@ -343,6 +347,9 @@
 		case 'e':
 			config->edge = true;
 			break;
+		case 't':
+			config->sched_rr = atoi(optarg);
+			break;
 		default:
 			print_help();
 			exit(0);
@@ -386,6 +393,21 @@
 	exit(0);
 }
 
+static int set_sched_rr(int prio)
+{
+	struct sched_param param;
+	int rc;
+	memset(&param, 0, sizeof(param));
+	param.sched_priority = prio;
+	printf("Setting SCHED_RR priority(%d)\n", param.sched_priority);
+	rc = sched_setscheduler(getpid(), SCHED_RR, &param);
+	if (rc != 0) {
+		std::cerr << "Config: Setting SCHED_RR failed" << std::endl;
+		return -1;
+	}
+	return 0;
+}
+
 int main(int argc, char *argv[])
 {
 	int type, chans, ref;
@@ -424,6 +446,11 @@
 
 	handle_options(argc, argv, &config);
 
+	if (config.sched_rr != -1) {
+		if (set_sched_rr(config.sched_rr) < 0)
+			return EXIT_FAILURE;
+	}
+
 	setup_signal_handlers();
 
 	/* Check database sanity */

-- 
To view, visit https://gerrit.osmocom.org/3080
To unsubscribe, visit https://gerrit.osmocom.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ia2452b9763960b2be37fbeee9d832554da68a53f
Gerrit-PatchSet: 1
Gerrit-Project: osmo-trx
Gerrit-Branch: master
Gerrit-Owner: Harald Welte <laforge at gnumonks.org>



More information about the gerrit-log mailing list