From 67e0bd04f1dca8d438dce6caf8d5a399e1fc707a Mon Sep 17 00:00:00 2001 From: Laurent Mazet Date: Tue, 14 Oct 2025 22:41:49 +0200 Subject: [PATCH] load support sched other and fifo --- load.c | 45 ++++++++++++++++++++++++++++----------------- 1 file changed, 28 insertions(+), 17 deletions(-) diff --git a/load.c b/load.c index 2c2ec79..e5f6c72 100644 --- a/load.c +++ b/load.c @@ -12,7 +12,6 @@ /* constants */ -#define RT_PRIO 80 //#define N 32 #define N 10 #define BREATH 20 @@ -23,6 +22,7 @@ char *progname = NULL; char *version = "0.1"; int nb_threads = 1; +int sched_rt_prio = 50; /* types */ @@ -40,6 +40,7 @@ int usage (int ret) fprintf (fd, " -h: help message\n"); fprintf (fd, " -n: number of thread (%d)\n", nb_threads); fprintf (fd, " -n: print version\n"); + fprintf (fd, " -r: real-time priority, -1 to desactivate (%d)\n", sched_rt_prio); fprintf (fd, "%s version %s\n", progname, version); return ret; @@ -114,7 +115,7 @@ double determinant (matrix_t *matrix) double val; get_matrix (matrix, 0, l, &val); det += sign * val * determinant (comatrix); - usleep (BREATH); + //usleep (BREATH); } free_matrix (comatrix); @@ -129,7 +130,7 @@ void generate_matrix (matrix_t *matrix) double val = base * (rand () - RAND_MAX / 2) / (double)RAND_MAX; set_matrix (matrix, i, j, val); } - usleep (BREATH); + //usleep (BREATH); } } @@ -177,6 +178,14 @@ int main (int argc, char *argv[]) } nb_threads = atoi (arg); break; + case 'r': + arg = (arg[2]) ? arg + 2 : (--argc > 0) ? *(++argv) : NULL; + if (arg == NULL) { + fprintf (stderr, "%s: real-time scheduler mode not specified\n", progname); + return usage (1); + } + sched_rt_prio = atoi (arg); + break; case 'v': printf ("version: %s\n", version); break; @@ -186,22 +195,24 @@ int main (int argc, char *argv[]) } } -#if 1 - /* real-time process */ + if (sched_rt_prio >= 0) { + + /* real-time process */ + + struct sched_param param = {0}; + if (sched_getparam (0, ¶m) != 0) { + fprintf (stderr, "error: sched_getparam\n"); + return 1; + } + param.sched_priority = sched_rt_prio; + int rc = sched_setscheduler (0, SCHED_FIFO, ¶m); /* non-preemptive */ + // int rc = sched_setscheduler (0, SCHED_RR, ¶m); /* preemptive */ + if (rc != 0) { + fprintf (stderr, "error: sched_setscheduler\n"); + return 1; + } - struct sched_param param = {0}; - if (sched_getparam (0, ¶m) != 0) { - fprintf (stderr, "error: sched_getparam\n"); - return 1; - } - param.sched_priority = RT_PRIO; - int rc = sched_setscheduler (0, SCHED_FIFO, ¶m); /* non-preemptive */ - // int rc = sched_setscheduler (0, SCHED_RR, ¶m); /* preemptive */ - if (rc != 0) { - fprintf (stderr, "error: sched_setscheduler\n"); - return 1; } -#endif /* main process */ -- 2.30.2