Запустити процес Linux з дуже низьким пріоритетом?


12

У мене регулярний процес, який не так важливий, але буде споживати стільки енергії процесора, і у мене є ще один процес, який дійсно важливий, але він витрачає більшу частину часу в режимі очікування, але коли він влаштувався на роботу, йому дійсно потрібні високі обчислювальні потужності

Я спробував запустити з nice -20 ./low_priority_processі , nice --20 ./high_priority_processале ще більш низьким пріоритетом споживає значну кількість ресурсів процесора при високому пріоритеті процес потребує, як я можу запустити процес , який буде дійсно поступатися або навіть автоматично призупинити , коли інший процес з використанням потужності процесора


Як Ви визначаєте, що процес з високим пріоритетом насправді потребує?
muru

це породжує багато ниток, інакше процес з'їсть процесор більше 50% ємності процесора
uray

Використовуйте RRпланування для процесу з високим пріоритетом.
Рамеш

@Ramesh Яка можлива різниця це призведе?
Кен Шарп

Відповіді:


10

Подивіться на контрольних груп , він повинен надати саме те , що вам потрібно - резервування CPU (і більше). Я б запропонував прочитати контроль пріоритетності програм, використовуючи групи .

З цього приводу, перекладайте важливі, але часто непрацюючі процеси в групу з виділеним 95% процесора, а інші ваші додатки - в інший з виділеними 5% - ви отримаєте (майже) всю потужність для своїх робочих місць при необхідності, при цьому постійно Процес, який голодує за владу, отримає лише 5% у той час. Коли обчислювальні сплески зникнуть, всі продуктивність процесора буде кинута на решту процесів. Як користь, якщо ви створите спеціальну групу (з мінімальними вимогами до продуктивності) для таких процесів sshd, ви зможете ввійти в систему, незалежно від того, що намагається отримати весь процесор, який він може - деякий час процесора буде зарезервовано sshd.


1
чи є така команда, як cpulimitабо niceзмінити групу процесу? тому що я, якщо cgroup - це виклик API, я можу не можу перекомпілювати жодне з цих додатків для використання cgroup
uray

Ні, ви просто десь змонтуєте ієрархію групи, створіть каталоги для кожної групи та запишіть PID-процеси процесів у деякі файли. Все це потрібно робити як root (або, точніше, з відповідними привілеями). Деякі системи init (а саме systemd, принаймні, в деяких випадках) "крадуть" інтерфейс cgroups у користувачів, яким доводиться використовувати системний інтерфейс init (зазвичай це спеціальна команда). Прочитайте пов'язану статтю відповіді та вікіпедії. Дійсно. :)
петерф

О, також є libcgroupпакет, який постачається з утилітами для роботи з групами, включаючи демона ( cgrulesengd), який може насправді сортувати процеси в групи залежно від деяких умов.
петерф

7

Якщо пріоритет процесу (хороше значення) низький, він не буде переривати процес з більш високим пріоритетом. Причина ви бачите процес низького пріоритету по- , як і раніше споживають значну кількість ресурсів ЦП, вище пріоритет процес працює тому , що чим вище пріоритет процес не що зайнятий. Можливо, чекаю на IO. Використовуйте chrt -p -i 0 $PIDдля запуску процесу з ще нижчим пріоритетом, ніж nice 19 -p $PID(якщо ми тут говоримо про Linux).

chrt -p -i 0 $PID додає процес у "справжній" планувальник простою.

http://linux.die.net/man/1/chrt


2
chrt -p -i 0 $ PID
Роберт Фосс

chrt все ще недостатньо. Те, що я намагаюся зробити, - це переглядати відео, переробляючи інші відео у фоновому режимі. Використання chrt допомогло у відео YouTube, але дуже якісні mkvs все ще пропускаються. Що я хотів - це нормально відтворювати своє відео, але використовувати кожен біт потужності процесора, що залишився для перекодування, тому що у мене є величезна партія.
soger

0

Спробуйте в цьому прикладі запустити процес як низький.

Якщо ти працюєш, то приємно tar xvf asets.zip

Використовуйте

nice tar xvf tools.zip

Після цього видайте

вгорі, щоб стежити за процесом розпакування

ps aux | grep "дьоготь"

Спробуйте щось конкретно з cpulimit

wget -O cpulimit.zip https://github.com/opsengine/cpulimit/archive/master.zip
unzip cpulimit.zip
cd cpulimit-master
make
sudo cp src/cpulimit /usr/bin

cpulimit -l 50 python 0 9999999999> / dev / null &


так -20, "низький пріоритет" і --20"високий пріоритет", дивіться на подвійний тире для niceкоманди. і так, я повністю розумію хорошу цінність, але моє запитання полягає в тому, чи є спосіб сказати планувальнику, окрім використання приємного значення
uray

2
@ user77710 Ви впевнені? Ні вхідна сторінка Ubuntu, ні сторінка POSIX не визначають цей синтаксис. Обидва використовують -n -20і -n 20т. Д.
muru

так, що б там не було, синтаксис не важливий, мій пункт - це відстояння приємного значення дуже низького і дуже високого для обох процесів, не дає результату того, що я хотів
uray

2
@ user77710 ЩО? "синтаксис не важливий"? Як ви можете бути впевнені, що тоді ви встановлюєте значення приємності?
муру

тому що я можу побачити значення хорошого процесу на htopабо topабо psабо будь-
Урай

-1

Для майбутніх прибульців, ось повний приклад niceз стресом .

  1. Тестова машина має 2 процесора
$ lscpu
Architecture:        x86_64
CPU op-mode(s):      32-bit, 64-bit
Byte Order:          Little Endian
CPU(s):              2 
On-line CPU(s) list: 0,1
Thread(s) per core:  2
...
  1. Встановити stress:apt-get install stress
  2. Зробіть 2 процесора зайнятими дзвінками з низьким пріоритетом для стресу: nice -20 stress --cpu 2
  3. Перевірте використання процесора за допомогою top:
                                                 v
                                                 v
                                                 v
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                   
15894 ubuntu    39  19    8240     96      0 R  99.7  0.0   0:06.43 stress                                                                                    
15895 ubuntu    39  19    8240     96      0 R  99.7  0.0   0:06.42 stress                                                                                    

Це показує, що обидва процесора повністю зайняті.

  1. Запустіть стрес-процес на єдиному процесорі з високим пріоритетом: nice --20 stress --cpu 1
  2. Ще раз перевірте використання процесора за допомогою top
                                                 v
                                                 v
                                                 v
                                                 v
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                   
15928 ubuntu    20   0    8240    100      0 R  99.7  0.0   0:24.02 stress                                                                                    
15894 ubuntu    39  19    8240     96      0 R  51.2  0.0   1:12.46 stress                                                                                    
15895 ubuntu    39  19    8240     96      0 R  48.8  0.0   1:12.35 stress                                                                                    

Це свідчить про те, що одноядерний стрес-процес отримує свій повний процесор, тоді як процеси з нижчим пріоритетом обидва ділять решту 1 процесора

  1. З іншого боку, вбивство всіх вищезазначених stressвикликів та просто запуск одного 3-процесу stress --cpu 3призведе до 66% процесора для кожного
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.