1. Что такое задержка (latency)?
Задержка — это время, которое требуется ПК, чтобы остановить то, что он делает, и ответить на внешний запрос, например, запустить один из периодических потоков реального времени LinuxCNC. Чем меньше задержка, тем быстрее вы можете запустить потоки реального времени, и тем более плавным будет движение (и потенциально более быстрым в случае программного шагового перемещения).
Задержка гораздо важнее скорости ЦП. Скромный Pentium II, который реагирует на прерывания в течение 10 микросекунд каждый раз, может дать лучшие результаты, чем новейший и самый быстрый монстр P4 Hyperthreading.
Процессор — не единственный фактор, определяющий задержку. Материнские платы, видеокарты, порты USB и ряд других вещей могут повлиять на задержку. Лучший способ узнать, с чем вы имеете дело, — запустить тест на задержку.
Генерация шаговых импульсов в программном обеспечении имеет одно очень большое преимущество - это бесплатно. Почти каждый ПК имеет параллельный порт, который способен выводить шаговые импульсы, генерируемые программным обеспечением. Однако программные шаговые импульсы также имеют некоторые недостатки:
-
ограниченная максимальная скорость шага
-
джиттер в генерируемых импульсах
-
нагружает процессор
2. Latency Tests
LinuxCNC включает несколько тестов на задержку. Все они выдают эквивалентную информацию. Запуск этих тестов поможет определить, подходит ли компьютер для управления станком с ЧПУ.
Note
|
Не запускайте LinuxCNC или StepConf во время выполнения теста задержки. |
2.1. Latency Test
Чтобы запустить тест, откройте окно терминала (в Ubuntu — Applications → Accessories → Terminal) и выполните следующую команду:
latency-test
This will start the latency test with a base-thread period of 25 µs and a servo-thread period of 1 ms. The period times may be specified on the command line:
latency-test 50000 1000000
This will start the latency test with a base-thread period of 50 µs and a servo-thread period of 1 ms.
Для получения доступных параметров введите в командной строке:
latency-test -h
После запуска теста задержки вы должны увидеть что-то вроде этого:

Во время выполнения теста вам следует издеваться над компьютером. Перемещать окна по экрану. Полазить по веб-страницам. Скопировать несколько больших файлов на диск. Воспроизвести музыку. Запустить программу OpenGL, например glxgears. Идея состоит в том, чтобы подвергнуть ПК испытаниям, пока тест на задержку проверяет, каковы наихудшие показатели.
Важным числом для программного степпинга является максимальный джиттер базового потока. В приведенном выше примере это 6693 наносекунды (нс) или 6,693 микросекунды (мкс). Запишите это число и введите его в StepConf, когда оно будет запрошено.
In the example above, latency-test only ran for a few seconds. You should run the test for at least several minutes; sometimes the worst case latency doesn’t happen very often, or only happens when you do some particular action. For instance, one Intel motherboard worked pretty well most of the time, but every 64 seconds it had a very bad 300 µs latency. Fortunately that was fixable, see https://wiki.linuxcnc.org/cgi-bin/wiki.pl?FixingSMIIssues .
Итак, что означают результаты? Если значение Max Jitter меньше 15–20 микросекунд (15 000–20 000 наносекунд), компьютер должен показывать очень хорошие результаты с программным шаговым управлением. Если максимальная задержка составляет около 30–50 микросекунд, вы всё равно можете получить хорошие результаты, но максимальная скорость шага может немного разочаровать, особенно если вы используете микрошаг или ходовые винты с очень малым шагом. Если значения составляют 100 мкс или более, то есть >= 100 000 наносекунд (нс), то ПК не подходит для программного пошагового управления. Значения более 1 миллисекунды (1 000 000 нс) означают, что ПК не подходит для LinuxCNC, независимо от того, используете ли вы программное пошаговое управление или нет.
Note
|
Если вы получили высокие цифры, возможно, есть способы их улучшить. У другого ПК была очень плохая задержка (несколько миллисекунд) при использовании встроенного видео. Но видеокарта за 5 долларов решила проблему. LinuxCNC не требует новейшего оборудования. |
Для получения дополнительной информации о настройке шагового двигателя см. главу Stepper Tuning.
Tip
|
Доступны дополнительные инструменты командной строки для проверки задержки, когда LinuxCNC не запущен. |
2.2. График задержки
latency-plot создает ленточную диаграмму для базового и сервопотока. Может быть полезно увидеть пики задержки при запуске или использовании других приложений. Использование:
latency-plot --help
Usage:
latency-plot --help | -?
latency-plot --hal [Options]
Options:
--base ns (base thread interval in nanoseconds, default: 25000)
--servo ns (servo thread interval in nanoseconds, default: 1000000)
--time ms (report interval in milliseconds, default: 1000)
--relative (relative clock time (default))
--actual (actual clock time)

latency-plot
Window2.3. Гистограмма задержки
Гистограмма задержки приложения отображает гистограмму задержки (jitter) для базового и сервопотока.
Usage:
latency-histogram --help | -?
latency-histogram [Options]
Options:
--base ns (base thread interval in nanoseconds, default: 25000, min: 5000)
--servo ns (servo thread interval in nanoseconds, default: 1000000, min: 25000)
--bbinsize ns (base bin size in nanoseconds, default: 100
--sbinsize ns (servo bin size in nanoseconds, default: 100
--bbins n (base bins, default: 200
--sbins n (servo bins, default: 200
--logscale 0|1 (y axis log scale, default: 1)
--text note (additional note, default: "" )
--show (show count of undisplayed bins)
--nobase (servo thread only)
--verbose (progress and debug)
--nox (no gui, display elapsed,min,max,sdev for each thread)
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 realtime, не приходилось выполнять эту задачу. -
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, чтобы снять ограничение на время, которое могут использовать задачи реального времени.
-