Realtime: различия между версиями

Материал из ALT Linux Wiki
Нет описания правки
Строка 22: Строка 22:
Базовый способ тестирования ядра реального времени это запуск утилиты <code>cyclictest</code> параллельно с созданием нагрузки на систему (например, запуск <code>unixbench</code> в цикле) в течении ''длительного времени'' (не менее 24 часов). Пример запуска:
Базовый способ тестирования ядра реального времени это запуск утилиты <code>cyclictest</code> параллельно с созданием нагрузки на систему (например, запуск <code>unixbench</code> в цикле) в течении ''длительного времени'' (не менее 24 часов). Пример запуска:


     # cyclictest -a -m -Sp99 --smi
     # cyclictest -a -m -Sp99


Для оценки результата следует смотреть на столбец <code>Max</code> показывающий время задержки реакции на прерывания в микросекундах. Опция <code>--smi</code> добавляет столбец <code>SMI</code>, который показывает сколько было ''System Management Interrupts'' за время теста -- эти прерывания могут ''значительно'' ухудшить результаты системы. В системе ''пригодной'' для реального времени можно снизить их число через настройки BIOS. (Может быть полезно почитать ''HPC Tuning Guide'' для вашего железа). Если система ''превышает'' требуемый максимум, то она ''не пригодна'' для использования в реальном времени. Ещё один источник высоких задержек - не оптимизированные для реального времени драйвера оборудования (запрещающие прерывания на долгое время) или само железо (блокирующее процессор на долгое время).
Пример вывода на обычном ядре:
 
T: 0 ( 1931) P:99 I:1000 C:2018975 Min:      1 Act:    1 Avg:    2 Max:    2151
T: 1 ( 1932) P:99 I:1500 C:1345983 Min:      1 Act:    2 Avg:    3 Max:    2187
T: 2 ( 1933) P:99 I:2000 C:1009488 Min:      1 Act:    1 Avg:    3 Max:    2266
T: 3 ( 1934) P:99 I:2500 C: 807593 Min:      1 Act:    2 Avg:    3 Max:    1886
 
Пример вывода на RT ядре (SMI прерываний не было):
 
T: 0 ( 4041) P:99 I:1000 C:4719726 Min:      1 Act:    2 Avg:    2 Max:      17
T: 1 ( 4042) P:99 I:1500 C:3146481 Min:      1 Act:    2 Avg:    2 Max:      26
T: 2 ( 4043) P:99 I:2000 C:2359859 Min:      2 Act:    2 Avg:    2 Max:      14
T: 3 ( 4044) P:99 I:2500 C:1887886 Min:      1 Act:    2 Avg:    2 Max:      14
 
Пример вывода на RT ядре при наличии SMI прерываний (на ноутбуке), <code>cyclictest</code> запущен с дополнительной опцией <code>--smi</code>:
 
T: 0 (12166) P:99 I:1000 C:16611118 Min:    2 Act:    2 Avg:    2 Max:    262 SMI:      64
T: 1 (12167) P:99 I:1500 C:11074077 Min:    2 Act:    2 Avg:    2 Max:      50 SMI:      64
T: 2 (12168) P:99 I:2000 C:8305556 Min:      2 Act:    2 Avg:    2 Max:    248 SMI:      64
T: 3 (12169) P:99 I:2500 C:6644444 Min:      2 Act:    2 Avg:    2 Max:    250 SMI:      64
 
Для оценки результата следует смотреть на колонку <code>Max</code> показывающую время реакции на прерывания в ''микросекундах''. Опция <code>--smi</code> добавляет колонку <code>SMI</code>, которая показывает сколько было ''System Management Interrupts'' за время теста (счетчик прерываний считывается из MSR, если в вашем процессоре нет такого счетчика можно использовать hwlat tracer). SMI прерывания могут ''значительно'' ухудшить показатели системы. В системе ''пригодной'' для реального времени можно снизить число SMI через настройки или перепрошивку BIOS/firmware. Часто полезно прочитать ''HPC Tuning Guide'' для вашего железа. Если система ''превышает'' требуемый максимум, то она ''не пригодна'' для использования в реальном времени. Ещё один источник высоких задержек - не оптимизированные для реального времени драйвера оборудования (запрещающие прерывания на долгое время) или само железо (блокирующее процессор на долгое время).




{{Category navigation|title=Kernel|category=Kernel|sortkey={{SUBPAGENAME}}}}
{{Category navigation|title=Kernel|category=Kernel|sortkey={{SUBPAGENAME}}}}

Версия от 22:22, 12 сентября 2019

Операционная система реального времени (в отличии от системы общего назначения) оптимизирована на уменьшение задержек реакции (latency) и детерминизм (maximum latency) при обработке событий. Применяется для построения систем в сферах телекоммуникаций, управления машинами, высокочастотной торговли и других (в отличии от работы с приложениями и конечным пользователем.)

На данный момент в репозиторий Сизиф под архитектуру x86_64 экспериментально собраны два ядра реального времени:

kernel-image-xenomai

"Двойное ядро" состоящее из высокоприоритетного ко-ядра Cobalt реализующего различные (skins) RTOS API Xenomai 3 и ядра линукс с I-Pipe (Adeos) патчем реализующим систему жёсткого реального времени. (Обратите внимание, что ядро Mercury не поддерживается.) Xenomai 3 может эмулировать RTOS API: pSOS+, uITRON, VxWorks, RTAI, VRTX, а так же содержит нативное API Alchemy и поддерживает Real-Time Driver Model (RTDM). Документация на англ.

Юзерспейс и специализированные тесты для этого ядра находятся в пакете xenomai.

kernel-image-rt

Real Time Linux с PREEMPT_RT патчем (Ingo Molnar, Thomas Gleixner) реализующим POSIX real-time API.

Считается, что ядра данного типа наиболее оптимально работают с vanilla конфигом. Поэтому была использована следующая методология создания конфига: defconfig + все опциональные модули из std_def ядра + тюнинг RT (отключено NO_HZ, отключены многие опции _DEBUG + прочие мелкие оптимизации).

  • Для облегчения тестирования это ядро содержит два дополнительных патча от консорциума OSADL:
  1. https://www.osadl.org/Latency-histograms.latencyhist.0.html
  2. https://www.osadl.org/Precise-load-measurement.precise-system-load.0.html

Для тестирования этого ядра можно использовать пакет linux-rt-tests.

Тестирование ядра

Базовый способ тестирования ядра реального времени это запуск утилиты cyclictest параллельно с созданием нагрузки на систему (например, запуск unixbench в цикле) в течении длительного времени (не менее 24 часов). Пример запуска:

   # cyclictest -a -m -Sp99

Пример вывода на обычном ядре:

T: 0 ( 1931) P:99 I:1000 C:2018975 Min:      1 Act:    1 Avg:    2 Max:    2151
T: 1 ( 1932) P:99 I:1500 C:1345983 Min:      1 Act:    2 Avg:    3 Max:    2187
T: 2 ( 1933) P:99 I:2000 C:1009488 Min:      1 Act:    1 Avg:    3 Max:    2266
T: 3 ( 1934) P:99 I:2500 C: 807593 Min:      1 Act:    2 Avg:    3 Max:    1886

Пример вывода на RT ядре (SMI прерываний не было):

T: 0 ( 4041) P:99 I:1000 C:4719726 Min:      1 Act:    2 Avg:    2 Max:      17
T: 1 ( 4042) P:99 I:1500 C:3146481 Min:      1 Act:    2 Avg:    2 Max:      26
T: 2 ( 4043) P:99 I:2000 C:2359859 Min:      2 Act:    2 Avg:    2 Max:      14
T: 3 ( 4044) P:99 I:2500 C:1887886 Min:      1 Act:    2 Avg:    2 Max:      14

Пример вывода на RT ядре при наличии SMI прерываний (на ноутбуке), cyclictest запущен с дополнительной опцией --smi:

T: 0 (12166) P:99 I:1000 C:16611118 Min:     2 Act:    2 Avg:    2 Max:     262 SMI:      64
T: 1 (12167) P:99 I:1500 C:11074077 Min:     2 Act:    2 Avg:    2 Max:      50 SMI:      64
T: 2 (12168) P:99 I:2000 C:8305556 Min:      2 Act:    2 Avg:    2 Max:     248 SMI:      64
T: 3 (12169) P:99 I:2500 C:6644444 Min:      2 Act:    2 Avg:    2 Max:     250 SMI:      64

Для оценки результата следует смотреть на колонку Max показывающую время реакции на прерывания в микросекундах. Опция --smi добавляет колонку SMI, которая показывает сколько было System Management Interrupts за время теста (счетчик прерываний считывается из MSR, если в вашем процессоре нет такого счетчика можно использовать hwlat tracer). SMI прерывания могут значительно ухудшить показатели системы. В системе пригодной для реального времени можно снизить число SMI через настройки или перепрошивку BIOS/firmware. Часто полезно прочитать HPC Tuning Guide для вашего железа. Если система превышает требуемый максимум, то она не пригодна для использования в реальном времени. Ещё один источник высоких задержек - не оптимизированные для реального времени драйвера оборудования (запрещающие прерывания на долгое время) или само железо (блокирующее процессор на долгое время).