Якщо ваше завдання є єдиним процесом, який вимагає часу на певний процесор, між завданнями не буде контекстних переключень :-). Але процесор все одно може бути перерваний, викликаючи переключення контексту в ядро і назад. І однією з можливих причин є таймер попереднього виходу, перевірка, чи є інше завдання для запуску цього процесора ...
Linux може уникнути генерації будь-якого переривання таймера на процесорі, коли для цього не буде ніяких причин. Див CONFIG_NO_HZ_FULL
. Щоб скористатися цією функцією, її потрібно ввімкнути під час побудови ядра, і його потрібно активувати за допомогою параметра завантаження.
За замовчуванням жоден процесор не буде процесором адаптивного тикання. Параметр завантаження "nohz_full =" вказує процесори адаптивних тиків. Наприклад, "nohz_full = 1,6-8" говорить, що процесори 1, 6, 7 і 8 повинні бути процесорами з адаптивним тиком. Зауважте, що вам заборонено позначати всі процесори як адаптивно-галочкові процесори [...]
LWN.net стверджує, що "за даними Інго Молнар, 1% часу процесора буде заощаджено" для процесорів адаптивних кліщів. У документі на ядро сказано, що це має шість різних витрат, а також є список "ЗНАНИХ ПРОБЛЕМ".
Цей коефіцієнт порівняно невеликий, особливо порівняно з потенційним збільшенням пропускної здатності зменшення частоти переключення контексту між декількома завданнями, на яке посилається у цій відповіді: Як змінити тривалість часових відрізків, які використовує планувальник процесорів Linux?
Дрібний шрифт: ці вимірювання попередньо підтримують Spectre, Meltdown, KPTI та x86 ASID :-(. І я думаю, вони також стосуються дещо старшого обладнання. Запитайте експерта з ядра або проведіть свої власні вимірювання того, як коштує переключення контексту змінився у вашій конкретній версії ядра та апаратному забезпеченні ... PTI в основному повинен був бути пом'якшений ASID, за винятком програмного забезпечення, яке дзвонить в ядро дуже часто, головним прикладом є бази даних. Але я не дуже добре розумію цифри .
Надія Моллара в оригінальному патчі RFC полягала в тому, що з часом його ", ймовірно, ввімкнуть більшість дистрибутивів Linux". Я помічаю, що Fedora 28 пропонує ядро за замовчуванням, побудоване з NO_HZ_FULL
підтримкою. Debian 9, однак, не має.
Зовсім недавно Linux v4.17 видаляє залишковийnohz_full
галочок таймера 1 Гц із процесорів . Я думаю, що вплив на пропускну здатність досить малий :-), але я намагався стежити за станом NO_HZ_FULL
переваг, коли на процесорі є кілька процесів, які можна виконати -
як тільки ми досягнемо 0 Гц, ми можемо [тоді] видалити припущення періодичної галочки з nr_running> = 2, по суті перериваючи зайняті завдання лише так часто, як вимагає від нас обмежень sched_latency - раз на 4-40 мсек, залежно від nr_running .
Це трохи заплутано, оскільки попереднє вимкнення вже почали використовувати окремий, більш точний галочку ще в v2.6.25-rc1, фіксувати 8f4d37ec073c, "sched: галочка передбачення з високою роздільною здатністю" . Знайдено через цей коментар до тієї ж статті LWN.net: https://lwn.net/Articles/549754/ ).