public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* rt-tests: add task isolation activation to cyclictest/oslat
@ 2021-08-24 15:42 Marcelo Tosatti
  0 siblings, 0 replies; only message in thread
From: Marcelo Tosatti @ 2021-08-24 15:42 UTC (permalink / raw)
  To: linux-kernel
  Cc: Nitesh Narayan Lal, Nicolas Saenz Julienne, Juri Lelli,
	Frederic Weisbecker, Peter Zijlstra, Christoph Lameter,
	Thomas Gleixner


Check whether task isolation is configured, right before the latency
sensitive loop, and if so, activate it.

Use chisol util-linux tool to configure task isolation externally.

Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>

Index: rt-tests/src/cyclictest/cyclictest.c
===================================================================
--- rt-tests.orig/src/cyclictest/cyclictest.c
+++ rt-tests/src/cyclictest/cyclictest.c
@@ -509,7 +509,7 @@ static void *timerthread(void *param)
 	struct itimerval itimer;
 	struct itimerspec tspec;
 	struct thread_stat *stat = par->stats;
-	int stopped = 0;
+	int ret, stopped = 0;
 	cpu_set_t mask;
 	pthread_t thread;
 	unsigned long smi_now, smi_old = 0;
@@ -617,11 +617,21 @@ static void *timerthread(void *param)
 
 	stat->threadstarted++;
 
+#ifdef PR_ISOL_GET
+        ret = prctl(PR_ISOL_GET, 0, 0, 0, 0);
+        if (ret != -1) {
+                unsigned long mask = ret;
+
+                ret = prctl(PR_ISOL_CTRL_SET, mask, 0, 0);
+                if (ret == -1)
+                        fatal("prctl PR_ISOL_CTRL_SET");
+        }
+#endif
 	while (!shutdown) {
 
 		uint64_t diff;
 		unsigned long diff_smi = 0;
-		int sigs, ret;
+		int sigs;
 
 		/* Wait for next period */
 		switch (par->mode) {
@@ -769,6 +779,12 @@ static void *timerthread(void *param)
 	}
 
 out:
+#ifdef PR_ISOL_GET
+	ret = prctl(PR_ISOL_CTRL_SET, 0, 0, 0);
+	if (ret == -1)
+		fatal("prctl PR_ISOL_CTRL_SET");
+#endif
+
 	if (refresh_on_max) {
 		pthread_mutex_lock(&refresh_on_max_lock);
 		/* We could reach here with both shutdown and allstopped unset (0).
Index: rt-tests/src/oslat/oslat.c
===================================================================
--- rt-tests.orig/src/oslat/oslat.c
+++ rt-tests/src/oslat/oslat.c
@@ -351,9 +351,21 @@ static void insert_bucket(struct thread
 
 static void doit(struct thread *t)
 {
+#ifdef PR_ISOL_GET
+	int ret;
+#endif
 	stamp_t ts1, ts2;
 	workload_fn workload_fn = g.workload->w_fn;
 
+#ifdef PR_ISOL_GET
+	ret = prctl(PR_ISOL_GET, 0, 0, 0, 0);
+	if (ret != -1) {
+		unsigned long mask = ret;
+
+		TEST0(prctl(PR_ISOL_CTRL_SET, mask, 0, 0, 0));
+	}
+#endif
+
 	frc(&ts2);
 	do {
 		workload_fn(t->dst_buf, t->src_buf, g.workload_mem_size);
@@ -361,6 +373,10 @@ static void doit(struct thread *t)
 		insert_bucket(t, ts1 - ts2);
 		ts2 = ts1;
 	} while (g.cmd == GO);
+
+#ifdef PR_ISOL_GET
+	TEST0(prctl(PR_ISOL_CTRL_SET, 0, 0, 0, 0));
+#endif
 }
 
 static int set_fifo_prio(int prio)


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2021-08-24 15:43 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-08-24 15:42 rt-tests: add task isolation activation to cyclictest/oslat Marcelo Tosatti

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox