Ви можете заблокувати програму до одного ядра, використовуючи, schedutils
як описано в цій статті про Cyberciti :
sudo apt-get install schedutils
sudo taskset -c 3 -p 13545 # Lock PID 13545 to core 3
Хоча інші процеси все ще можуть бути заплановані на тому ж ядрі. Тож друге, що потрібно зробити, - переконатися, що ваша команда працює з найвищим пріоритетом, використовуючи команду nice (це підкаже ядро Linux, що інші процеси слід попередньо виконувати за потреби). Запустіть програму таким чином:
nice -n -20 your-program
Існують деякі інші можливі причини ваших проблем із термінами. З цим не так просто:
- Якщо ви програмуєте в Python, є смітник, який іноді призупиняє вашу програму, щоб звільнити невикористану пам'ять.
- Переривання змушує процесор керувати чимось іншим, ніж ви хочете. Наприклад, мережеві пакети або інший вхід / вихід.
- Якщо ваша програма багато спить, можливі й інші процеси, що заповнюють кеші процесора (кеш L1 / L2). Це змушує вас чекати доступу до оперативної пам’яті.
- Ще гірше, якщо ваша оперативна пам’ять заповнена, так що ваш процес заміниться на диск, тому що SD-карти є непростіми.
Існують способи зробити ваш процес у режимі реального часу , а це означає, що він буде працювати з певними гарантіями часу. Проблема в цьому полягає в тому, що все інше може бути повільніше, і це складна тема. Якщо ви хочете спуститися з цієї кролячої нори, я пропоную вам почати читати про процеси в режимі реального часу в Linux .