Realtime: различия между версиями
Vt (обсуждение | вклад) |
Vt (обсуждение | вклад) (→Тестирование ядра: результаты за 2-е суток) |
||
Строка 45: | Строка 45: | ||
Есть сообщения, что в некоторых системах Max остается в пределах 1-значного числа. Пример вывода '''на RT ядре при наличии SMI прерываний''', <code>cyclictest</code> запущен с дополнительной опцией <code>--smi</code>: | Есть сообщения, что в некоторых системах Max остается в пределах 1-значного числа. Пример вывода '''на RT ядре при наличии SMI прерываний''', <code>cyclictest</code> запущен с дополнительной опцией <code>--smi</code>: | ||
T: 0 ( | T: 0 (20422) P:99 I:1000 C:305390555 Min: 2 Act: 2 Avg: 3 Max: 297 SMI: 176 | ||
T: 1 ( | T: 1 (20423) P:99 I:1500 C:203593701 Min: 2 Act: 2 Avg: 3 Max: 318 SMI: 176 | ||
T: 2 ( | T: 2 (20424) P:99 I:2000 C:152695274 Min: 2 Act: 2 Avg: 2 Max: 274 SMI: 176 | ||
T: 3 ( | T: 3 (20425) P:99 I:2500 C:122156218 Min: 2 Act: 2 Avg: 3 Max: 340 SMI: 176 | ||
Опция <code>--smi</code> добавляет колонку <code>SMI</code>, которая показывает сколько было ''System Management Interrupts'' за время теста (счетчик прерываний считывается из MSR, если в вашем процессоре нет такого счастливого счетчика, то можно использовать утилиту hwlatdetect). SMI прерывания могут ''значительно'' ухудшить показатели системы. В худшем случае, SMI прерывания могут давать задержки на миллисекунды. В системе ''пригодной'' для реального времени можно снизить число SMI через настройки или перепрошивку BIOS/firmware<ref>[https://www.coreboot.org/ coreboot]</ref>. Часто полезно прочитать ''HPC Tuning Guide''<ref>[https://developer.amd.com/resources/epyc-resources/epyc-tuning-guides/ Пример Performance Tuning Guides для AMD]</ref> для вашего железа. Если задержки в системе ''превышает'' требуемый максимум, то она ''не пригодна'' для использования в реальном времени. Ещё один источник высоких задержек - не оптимизированные для реального времени драйвера оборудования (запрещающие прерывания на долгое время) или само железо (блокирующее процессор на долгое время). | Опция <code>--smi</code> добавляет колонку <code>SMI</code>, которая показывает сколько было ''System Management Interrupts'' за время теста (счетчик прерываний считывается из MSR, если в вашем процессоре нет такого счастливого счетчика, то можно использовать утилиту hwlatdetect). SMI прерывания могут ''значительно'' ухудшить показатели системы. В худшем случае, SMI прерывания могут давать задержки на миллисекунды. В системе ''пригодной'' для реального времени можно снизить число SMI через настройки или перепрошивку BIOS/firmware<ref>[https://www.coreboot.org/ coreboot]</ref>. Часто полезно прочитать ''HPC Tuning Guide''<ref>[https://developer.amd.com/resources/epyc-resources/epyc-tuning-guides/ Пример Performance Tuning Guides для AMD]</ref> для вашего железа. Если задержки в системе ''превышает'' требуемый максимум, то она ''не пригодна'' для использования в реальном времени. Ещё один источник высоких задержек - не оптимизированные для реального времени драйвера оборудования (запрещающие прерывания на долгое время) или само железо (блокирующее процессор на долгое время). |
Версия от 03:31, 17 сентября 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. Иногда называемое -rt
ядро.
Считается, что ядра данного типа наиболее оптимально работают с vanilla конфигом. Поэтому была использована следующая методология создания конфига: defconfig + все опциональные модули из std_def ядра + тюнинг RT (отключено NO_HZ
, отключены многие опции _DEBUG
+ прочие мелкие оптимизации).
- Для облегчения тестирования это ядро содержит два дополнительных патча от консорциума OSADL:
- https://www.osadl.org/Latency-histograms.latencyhist.0.html
- https://www.osadl.org/Precise-load-measurement.precise-system-load.0.html
Для тестирования этого ядра можно использовать пакет linux-rt-tests
.
Тестирование ядра
Первоначально нужно определить пригодность вашей системы для реального времени.
Базовый способ тестирования ядра реального времени это запуск утилиты cyclictest
параллельно с созданием нагрузки на систему (например, запуск unixbench
, сборку linux, hackbench
, gltestperf
в цикле) в течении длительного времени (не менее 24 часов). Пример запуска:
# cyclictest -a -m -Sp99
Пример вывода на обычном ядре (std_def):
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
Для оценки результата следует смотреть на колонку Max
показывающую время реакции на прерывания в микросекундах. Есть примеры, на обычной системе, где Max доходит до 5-значных чисел. Пример вывода на 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
Есть сообщения, что в некоторых системах Max остается в пределах 1-значного числа. Пример вывода на RT ядре при наличии SMI прерываний, cyclictest
запущен с дополнительной опцией --smi
:
T: 0 (20422) P:99 I:1000 C:305390555 Min: 2 Act: 2 Avg: 3 Max: 297 SMI: 176 T: 1 (20423) P:99 I:1500 C:203593701 Min: 2 Act: 2 Avg: 3 Max: 318 SMI: 176 T: 2 (20424) P:99 I:2000 C:152695274 Min: 2 Act: 2 Avg: 2 Max: 274 SMI: 176 T: 3 (20425) P:99 I:2500 C:122156218 Min: 2 Act: 2 Avg: 3 Max: 340 SMI: 176
Опция --smi
добавляет колонку SMI
, которая показывает сколько было System Management Interrupts за время теста (счетчик прерываний считывается из MSR, если в вашем процессоре нет такого счастливого счетчика, то можно использовать утилиту hwlatdetect). SMI прерывания могут значительно ухудшить показатели системы. В худшем случае, SMI прерывания могут давать задержки на миллисекунды. В системе пригодной для реального времени можно снизить число SMI через настройки или перепрошивку BIOS/firmware[1]. Часто полезно прочитать HPC Tuning Guide[2] для вашего железа. Если задержки в системе превышает требуемый максимум, то она не пригодна для использования в реальном времени. Ещё один источник высоких задержек - не оптимизированные для реального времени драйвера оборудования (запрещающие прерывания на долгое время) или само железо (блокирующее процессор на долгое время).