By default programs run with Time Sharing (TS policy) on Linux. How to run a program with SCHED_RR policy on Linux from command line?
Thanks for giving information about chrt(1) command. I have used the command to run Firefox with RR policy, but as you see below, only main thread of Firefox runs with RR policy. Could you tell me how to run all other threads of Firefox also with RR policy.
$ ps -Lo pid,tid,class 2051 PID TID CLS 2051 2051 RR 2051 2055 TS 2051 2056 TS 2051 2057 TS 2051 2058 TS 2051 2059 TS 2051 2060 TS 2051 2061 TS 2051 2063 TS 2051 2067 TS 2051 2068 TS 2051 2069 TS 2051 2070 TS 2051 2072 TS 2051 2073 TS 2051 2074 TS 2051 2075 TS 2051 2077 TS 2051 2078 TS 2051 2080 TS 2051 2356 RR 2051 2386 TS 2051 2387 TS Edit: I ran the following simple pthreads program and tested like the above. Unfortunately chrt command only changes the class of the main thread. Please see below.
$ ps -Lo pid,tid,class 3552 PID TID CLS 3552 3552 TS 3552 3553 TS 3552 3554 TS 3552 3555 TS 3552 3556 TS 3552 3557 TS $ sudo chrt --rr -p 30 3552 ... $ ps -Lo pid,tid,class 3552 PID TID CLS 3552 3552 RR 3552 3553 TS 3552 3554 TS 3552 3555 TS 3552 3556 TS 3552 3557 TS ---- Program----
#include <pthread.h> #include <stdio.h> #define NUM_THREADS 5 void *PrintHello(void *threadid) { long tid; tid = (long)threadid; printf("Hello World! It's me, thread #%ld!\n", tid); long k = 1; long a[10000]; int i = 1; long b[10000]; for (k = 0; k < 400000000; k++) { if (i == 9999) { i = 1; } a[i] = ((k + i) * (k - i))/2; a[i] = k/2; b[i] = i * 20; b[i] = a[i] - b[i]; i++; int j = 0; for (j = 0; j < i; j++) { k = j - i; } } pthread_exit(NULL); } int main (int argc, char *argv[]) { pthread_t threads[NUM_THREADS]; int rc; long t; for(t=0; t<NUM_THREADS; t++){ printf("In main: creating thread %ld\n", t); rc = pthread_create(&threads[t], NULL, PrintHello, (void *)t); if (rc){ printf("ERROR; return code from pthread_create() is %d\n", rc); exit(-1); } } pthread_exit(NULL); }
set_scheduler()in my sleep_nanosleep_minimum_time_interval.c test file.