1. Що таке латентність?
Затримка — це час, який потрібен ПК, щоб зупинити поточну роботу і відповісти на зовнішній запит, наприклад, запустити один із періодичних потоків LinuxCNC у режимі реального часу. Чим менша затримка, тим швидше можна запускати потоки у режимі реального часу і тим плавнішим буде рух (а у випадку програмного крокування — ймовірно, швидшим).
Затримка набагато важливіша за швидкість процесора. Непомітний Pentium II, який реагує на переривання протягом 10 мікросекунд кожного разу, може дати кращі результати, ніж найновіший і найшвидший P4 Hyperthreading.
Процесор не є єдиним фактором, що впливає на затримку. Материнські плати, відеокарти, USB-порти та ряд інших факторів також можуть впливати на затримку. Найкращий спосіб з’ясувати, з чим ви маєте справу, — це провести тест на затримку.
Генерація імпульсів кроку в програмному забезпеченні має одну дуже велику перевагу - це безкоштовно. Практично кожен ПК має паралельний порт, здатний виводити імпульси кроку, що генеруються програмним забезпеченням. Однак програмні імпульси кроку також мають деякі недоліки:
-
обмежена максимальна швидкість кроку
-
тремтіння у згенерованих імпульсах
-
завантажує процесор
2. Тести на затримку
LinuxCNC містить кілька тестів затримки. Усі вони надають еквівалентну інформацію. Виконання цих тестів допоможе визначити, чи підходить комп’ютер для керування верстатом з CNC.
|
Note
|
Не запускайте LinuxCNC або StepConf під час виконання тесту затримки. |
2.1. Тест на затримку
Щоб запустити тест, відкрийте вікно терміналу (в Ubuntu, з Програми → Аксесуари → Термінал) та виконайте таку команду:
latency-test
Це розпочне тест затримки з періодом базового потоку 25 мкс та періодом сервопотоку 1 мс. Періоди можна вказати в командному рядку:
latency-test 50000 1000000
Це розпочне тест затримки з періодом базового потоку 50 мкс та періодом сервопотоку 1 мс.
Щоб переглянути доступні опції, у командному рядку введіть:
latency-test -h
Після запуску тесту затримки ви повинні побачити щось подібне:
Під час виконання тесту слід «зловживати» комп’ютером. Переміщайте вікна по екрану. Переглядайте веб-сторінки. Копіюйте великі файли на диск. Відтворюйте музику. Запустіть програму OpenGL, наприклад glxgears. Ідея полягає в тому, щоб випробувати ПК на міцність, поки тест на затримку перевіряє, які показники є найгіршими.
Важливим числом для крокування програмного забезпечення є «максимальний джиттер» базового потоку. У наведеному вище прикладі це 6693 наносекунди (нс) або 6,693 мікросекунди (мкс). Запишіть це число і введіть його в StepConf, коли буде запропоновано.
У наведеному вище прикладі тест на затримку тривав лише кілька секунд. Ви повинні проводити тест принаймні кілька хвилин; іноді найгірший випадок затримки трапляється не дуже часто або трапляється лише тоді, коли ви виконуєте певну дію. Наприклад, одна материнська плата Intel працювала досить добре більшу частину часу, але кожні 64 секунди мала дуже погану затримку в 300 мкс. На щастя, це можна було виправити, див. https://wiki.linuxcnc.org/cgi-bin/wiki.pl?FixingSMIIssues .
То що означають ці результати? Якщо ваше значення Max Jitter менше ніж 15-20 мікросекунд (15000-20000 наносекунд), комп’ютер повинен дати дуже хороші результати з програмним крокуванням. Якщо максимальна затримка становить близько 30-50 мікросекунд, ви все одно можете отримати хороші результати, але максимальна швидкість кроку може бути трохи розчаровуючою, особливо якщо ви використовуєте мікрокрокування або маєте гвинти з дуже дрібним кроком. Якщо цифри становлять 100 мкс або більше, тобто >= 100,000 наносекунд (нс), то ПК не підходить для програмного крокування. Числа понад 1 мілісекунду (1,000,000 нс) означають, що ПК не підходить для LinuxCNC, незалежно від того, чи використовуєте ви програмне крокування, чи ні.
|
Note
|
Якщо ви отримали високі показники, можливо, є способи їх поліпшити. Інший ПК мав дуже погану затримку (кілька мілісекунд) при використанні вбудованої відеокарти. Але відеокарта за 5 доларів вирішила цю проблему. LinuxCNC не вимагає найсучаснішого обладнання. |
Для отримання додаткової інформації про налаштування крокового двигуна див. розділ Налаштування крокового двигуна.
|
Tip
|
Додаткові інструменти командного рядка доступні для перевірки затримки, коли LinuxCNC не запущено. |
2.2. Графік затримки
latency-plot створює стрічкову діаграму для базового та серво-потокового потоків. Може бути корисним побачити піки затримки під час запуску або використання інших програм. Використання:
latency-plot --help
Використання:
latency-plot --help | -?
latency-plot --hal [Options]
Параметри:
--base ns (базовий інтервал потоку в наносекундах, за замовчуванням: 25000)
--servo ns (інтервал сервопотоку в наносекундах, за замовчуванням: 1000000)
--time ms (інтервал звітування в мілісекундах, за замовчуванням: 1000)
--relative (відносний час за годинником (за замовчуванням))
--actual (фактичний час за годинником)
latency-plot Вікно2.3. Гістограма затримки
Гістограма затримки застосунку відображає гістограму затримки (тремтіння) для базового та серво-потоків.
Використання:
latency-histogram --help | -?
latency-histogram [Options]
Опції:
--base ns (базовий інтервал потоку в наносекундах, за замовчуванням: 25000, мінімум: 5000)
--servo ns (інтервал сервопотоку в наносекундах, за замовчуванням: 1000000, мінімум: 25000)
--bbinsize ns (базовий розмір біна в наносекундах, за замовчуванням: 100
--sbinsize ns (розмір сервобіна в наносекундах, за замовчуванням: 100
--bbins n (базові біни, за замовчуванням: 200
--sbins n (сервобіни, за замовчуванням: 200
--logscale 0|1 (логарифмічна шкала осі Y, за замовчуванням: 1)
--text note (додаткова примітка, за замовчуванням: "" )
--show (показати кількість не відображених бінів)
--nobase (тільки серво-потік)
--verbose (прогрес і налагодження)
--nox (без графічного інтерфейсу, відображення elapsed,min,max,sdev для кожного потоку)
|
Note
|
При визначенні затримки LinuxCNC і HAL не повинні працювати, зупиніть їх за допомогою halrun -U. Велика кількість бінів і/або малий розмір бінів сповільнять оновлення. Для одного потоку вкажіть --nobase (та опції для сервопотоку). Виміряні затримки поза діапазоном +/- біна повідомляються за допомогою спеціальних кінцевих смуг. Використовуйте --show, щоб показати кількість для біна поза діапазоном [pos|neg]. |
latency-histogram Вікно3. Налаштування затримки
LinuxCNC може працювати на багатьох різних апаратних платформах та з багатьма різними ядрами реального часу, і всі вони можуть отримати користь від налаштування для оптимальної затримки.
Основною метою налаштування системи для LinuxCNC є резервування процесора для виключного використання завданнями LinuxCNC в режимі реального часу, щоб інші завдання (як програми користувачів, так і потоки ядра) не перешкоджали доступу LinuxCNC до цього процесора.
Якщо певні параметри налаштування вважаються загальнокорисними, LinuxCNC виконує це налаштування автоматично під час запуску, але багато параметрів налаштування є специфічними для конкретної машини і не можуть бути виконані автоматично. Особа, яка встановлює LinuxCNC, повинна експериментальним шляхом визначити оптимальні параметри налаштування для своєї системи.
3.1. Налаштування BIOS для зменшення затримки
BIOS ПК дуже різняться за своєю затримкою.
Налаштування BIOS є досить трудомістким процесом, оскільки вам доведеться перезавантажувати комп’ютер, вносити невеликі зміни в BIOS, завантажувати Linux і виконувати тест затримки (що може зайняти багато часу), щоб побачити, як зміни в BIOS вплинули на роботу системи. Потім повторіть ці дії для всіх інших налаштувань BIOS, які ви хочете випробувати.
Оскільки всі BIOS різні та нестандартні, надання детального посібника з налаштування BIOS не є практичним. Загалом, деякі речі, які можна спробувати налаштувати в BIOS:
-
Вимкніть ACPI, APM та будь-які інші функції енергозбереження. Це включає все, що пов’язано з енергозбереженням, призупиненням, станами сну процесора, масштабуванням частоти процесора тощо.
-
Вимкніть режим "турбо" процесора.
-
Вимкнути гіперпоточність процесора.
-
Вимкнути (або іншим чином керувати) перериваннями системного керування (SMI).
-
Вимкніть будь-яке обладнання, яке ви не збираєтеся використовувати.
3.2. Налаштування Preempt-RT на затримку
Ядро Preempt-RT може отримати користь від налаштування, щоб забезпечити найкращу затримку для LinuxCNC. Налаштування можна виконати через командний рядок ядра, sysctl, та через файли в /proc та /sys.
Деякі параметри налаштування, на які варто звернути увагу:
- Командний рядок ядра
-
Деталі тут: https://www.kernel.org/doc/Documentation/admin-guide/kernel-parameters.txt
-
isolcpus: Запобігти використанню цих процесорів більшістю процесів, що не належать до LinuxCNC, залишаючи більше процесорного часу доступним для LinuxCNC. -
irqaffinity: Виберіть, які процесори обслуговують переривання, щоб процесори, зарезервовані для роботи в реальному часі LinuxCNC, не виконували це завдання. -
rcu_nocbs: Запобігти виконанню зворотних викликів RCU на цих процесорах. -
rcu_nocb_poll: Опитувати зворотні виклики RCU замість використання режиму сну/пробудження. -
nohz_full: Вимкніть тактування на цих процесорах.
-
- Sysctl
-
Деталі тут: https://www.kernel.org/doc/html/latest/scheduler/sched-rt-group.html
-
sysctl.kernel.sched_rt_runtime_us: Встановіть значення -1, щоб зняти обмеження на час, який можуть використовувати завдання в реальному часі.
-