По умолчанию программы запускаются с использованием режима «Общий доступ времени» (политика TS) в Linux. Как запустить программу с политикой SCHED_RR в Linux из командной строки?
Спасибо за предоставление информации о команде chrt (1). Я использовал команду для запуска Firefox с политикой RR, но, как вы видите ниже, только основной поток Firefox работает с политикой RR. Не могли бы вы рассказать мне, как запускать все другие потоки Firefox и с политикой RR.
$ 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: Я выполнил следующую простую программу pthreads и протестировал, как указано выше. К сожалению, команда chrt изменяет класс основного потока. См. Ниже.
$ 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
---- Программа ----
#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);
}
Используйте команду chrt с chrt --rr <priority between 1-99> <command>
Пример:
chrt --rr 99 ls
Обратите внимание, что для параметра SCHED_RR требуются права root, поэтому вам либо нужно быть root, либо запустите его с помощью sudo.
Вы также можете использовать chrt, чтобы дать приоритет текущего процесса:
chrt -p --rr <priority between 1-99> <pid>
Те же команды применяются для других классы планирования также, хотя и с другим параметром вместо -rr:
Scheduling policies:
-b | --batch set policy to SCHED_BATCH
-f | --fifo set policy to SCHED_FIFO
-i | --idle set policy to SCHED_IDLE
-o | --other set policy to SCHED_OTHER
-r | --rr set policy to SCHED_RR (default)
Edit:
В случае Firefox это должно быть просто для Firefox. В многопоточном приложении я написал сам, все потоки сохраняют класс RR. Как видно из вашего вывода, два потока имеют класс RR, поэтому он также является не только родительским потоком.
Редактирование 2:
Попробуйте запустить процесс с помощью chrt вместо перенастройки существующий pid. Похоже, что если вы перепланируете, только первый поток получает класс RR. Однако, если вы начинаете его с chrt, каждый поток получает его.
Используйте команду chrt с chrt --rr <priority between 1-99> <command>
Пример:
chrt --rr 99 ls
Обратите внимание, что для параметра SCHED_RR требуются права root, поэтому вам либо нужно быть root, либо запустите его с помощью sudo.
Вы также можете использовать chrt, чтобы дать приоритет текущего процесса:
chrt -p --rr <priority between 1-99> <pid>
Те же команды применяются для других классы планирования также, хотя и с другим параметром вместо -rr:
Scheduling policies:
-b | --batch set policy to SCHED_BATCH
-f | --fifo set policy to SCHED_FIFO
-i | --idle set policy to SCHED_IDLE
-o | --other set policy to SCHED_OTHER
-r | --rr set policy to SCHED_RR (default)
Edit:
В случае Firefox это должно быть просто для Firefox. В многопоточном приложении я написал сам, все потоки сохраняют класс RR. Как видно из вашего вывода, два потока имеют класс RR, поэтому он также является не только родительским потоком.
Редактирование 2:
Попробуйте запустить процесс с помощью chrt вместо перенастройки существующий pid. Похоже, что если вы перепланируете, только первый поток получает класс RR. Однако, если вы начинаете его с chrt, каждый поток получает его.
Используйте команду chrt с chrt --rr <priority between 1-99> <command>
Пример:
chrt --rr 99 ls
Обратите внимание, что для параметра SCHED_RR требуются права root, поэтому вам либо нужно быть root, либо запустите его с помощью sudo.
Вы также можете использовать chrt, чтобы дать приоритет текущего процесса:
chrt -p --rr <priority between 1-99> <pid>
Те же команды применяются для других классы планирования также, хотя и с другим параметром вместо -rr:
Scheduling policies:
-b | --batch set policy to SCHED_BATCH
-f | --fifo set policy to SCHED_FIFO
-i | --idle set policy to SCHED_IDLE
-o | --other set policy to SCHED_OTHER
-r | --rr set policy to SCHED_RR (default)
Edit:
В случае Firefox это должно быть просто для Firefox. В многопоточном приложении я написал сам, все потоки сохраняют класс RR. Как видно из вашего вывода, два потока имеют класс RR, поэтому он также является не только родительским потоком.
Редактирование 2:
Попробуйте запустить процесс с помощью chrt вместо перенастройки существующий pid. Похоже, что если вы перепланируете, только первый поток получает класс RR. Однако, если вы начинаете его с chrt, каждый поток получает его.
Используйте команду chrt с chrt --rr <priority between 1-99> <command>
Пример:
chrt --rr 99 ls
Обратите внимание, что для параметра SCHED_RR требуются права root, поэтому вам либо нужно быть root, либо запустите его с помощью sudo.
Вы также можете использовать chrt, чтобы дать приоритет текущего процесса:
chrt -p --rr <priority between 1-99> <pid>
Те же команды применяются для других классы планирования также, хотя и с другим параметром вместо -rr:
Scheduling policies:
-b | --batch set policy to SCHED_BATCH
-f | --fifo set policy to SCHED_FIFO
-i | --idle set policy to SCHED_IDLE
-o | --other set policy to SCHED_OTHER
-r | --rr set policy to SCHED_RR (default)
Edit:
В случае Firefox это должно быть просто для Firefox. В многопоточном приложении я написал сам, все потоки сохраняют класс RR. Как видно из вашего вывода, два потока имеют класс RR, поэтому он также является не только родительским потоком.
Редактирование 2:
Попробуйте запустить процесс с помощью chrt вместо перенастройки существующий pid. Похоже, что если вы перепланируете, только первый поток получает класс RR. Однако, если вы начинаете его с chrt, каждый поток получает его.
Используйте команду chrt с chrt --rr <priority between 1-99> <command>
Пример:
chrt --rr 99 ls
Обратите внимание, что для параметра SCHED_RR требуются права root, поэтому вам либо нужно быть root, либо запустите его с помощью sudo.
Вы также можете использовать chrt, чтобы дать приоритет текущего процесса:
chrt -p --rr <priority between 1-99> <pid>
Те же команды применяются для других классы планирования также, хотя и с другим параметром вместо -rr:
Scheduling policies:
-b | --batch set policy to SCHED_BATCH
-f | --fifo set policy to SCHED_FIFO
-i | --idle set policy to SCHED_IDLE
-o | --other set policy to SCHED_OTHER
-r | --rr set policy to SCHED_RR (default)
Edit:
В случае Firefox это должно быть просто для Firefox. В многопоточном приложении я написал сам, все потоки сохраняют класс RR. Как видно из вашего вывода, два потока имеют класс RR, поэтому он также является не только родительским потоком.
Редактирование 2:
Попробуйте запустить процесс с помощью chrt вместо перенастройки существующий pid. Похоже, что если вы перепланируете, только первый поток получает класс RR. Однако, если вы начинаете его с chrt, каждый поток получает его.
Используйте команду chrt
с chrt --rr & lt; priority между 1-99 & gt; & lt; command & gt;
Пример:
chrt --rr 99 ls
Обратите внимание, что установка SCHED_RR
требует прав root, поэтому вам нужно либо root, либо запустить его с помощью sudo.
Вы также можете использовать chrt
, чтобы дать приоритет текущего процесса: [ ! d12]
chrt -p --rr & lt; приоритет между 1-99 & gt; & lt; pid & gt;
Те же команды применяются и для других классов планирования, хотя с другим параметром вместо -rr:
Политики планирования: b | - установить политику набора для SCHED_BATCH -f | --fifo установить политику для SCHED_FIFO -i | - задайте политику для SCHED_IDLE -o | - другая политика установки для SCHED_OTHER -r | --rr установить политику для SCHED_RR (по умолчанию)
Изменить:
В случае Firefox это должно быть просто для Firefox. В многопоточном приложении я написал сам, все потоки сохраняют класс RR. Как видно из вашего вывода, два потока имеют класс RR, поэтому это не только родительский поток.
Редактировать 2:
Попробуйте запустить процесс с помощью chrt
вместо перенастройки существующего pid. Похоже, что если вы перепланируете, только первый поток получает класс RR. Однако, если вы начинаете его с chrt
, каждый поток получает его.
Используйте команду chrt
с chrt --rr & lt; priority между 1-99 & gt; & lt; command & gt;
Пример:
chrt --rr 99 ls
Обратите внимание, что установка SCHED_RR
требует прав root, поэтому вам нужно либо root, либо запустить его с помощью sudo.
Вы также можете использовать chrt
, чтобы дать приоритет текущего процесса: [ ! d12]
chrt -p --rr & lt; приоритет между 1-99 & gt; & lt; pid & gt;
Те же команды применяются и для других классов планирования, хотя с другим параметром вместо -rr:
Политики планирования: b | - установить политику набора для SCHED_BATCH -f | --fifo установить политику для SCHED_FIFO -i | - задайте политику для SCHED_IDLE -o | - другая политика установки для SCHED_OTHER -r | --rr установить политику для SCHED_RR (по умолчанию)
Изменить:
В случае Firefox это должно быть просто для Firefox. В многопоточном приложении я написал сам, все потоки сохраняют класс RR. Как видно из вашего вывода, два потока имеют класс RR, поэтому это не только родительский поток.
Редактировать 2:
Попробуйте запустить процесс с помощью chrt
вместо перенастройки существующего pid. Похоже, что если вы перепланируете, только первый поток получает класс RR. Однако, если вы начинаете его с chrt
, каждый поток получает его.
Используйте команду chrt
с chrt --rr & lt; priority между 1-99 & gt; & lt; command & gt;
Пример:
chrt --rr 99 ls
Обратите внимание, что установка SCHED_RR
требует прав root, поэтому вам нужно либо root, либо запустить его с помощью sudo.
Вы также можете использовать chrt
, чтобы дать приоритет текущего процесса: [ ! d12]
chrt -p --rr & lt; приоритет между 1-99 & gt; & lt; pid & gt;
Те же команды применяются и для других классов планирования, хотя с другим параметром вместо -rr:
Политики планирования: b | - установить политику набора для SCHED_BATCH -f | --fifo установить политику для SCHED_FIFO -i | - задайте политику для SCHED_IDLE -o | - другая политика установки для SCHED_OTHER -r | --rr установить политику для SCHED_RR (по умолчанию)
Изменить:
В случае Firefox это должно быть просто для Firefox. В многопоточном приложении я написал сам, все потоки сохраняют класс RR. Как видно из вашего вывода, два потока имеют класс RR, поэтому это не только родительский поток.
Редактировать 2:
Попробуйте запустить процесс с помощью chrt
вместо перенастройки существующего pid. Похоже, что если вы перепланируете, только первый поток получает класс RR. Однако, если вы начинаете его с chrt
, каждый поток получает его.
-r
(используется только дважды), я предлагаю вместо этого использовать -rrrrrrrrr
; -P
– poige
2 September 2017 в 06:23
-a, -all-tasks Устанавливать или извлекать атрибуты планирования всех задач (потоков) для заданного PID.
– Narcolessico
2 February 2018 в 13:34