- Realtime
- Содержание
- kernel-image-xenomai [ править ]
- kernel-image-rt [ править ]
- Тестирование ядра [ править ]
- cyclictest [ править ]
- hwlatdetect [ править ]
- rtcheck [ править ]
- jitterdebugger [ править ]
- Linux в режиме реального времени
- Планировщик ЦП в реальном времени
- Планировщик с учетом приоритетности процессов
- Установка и использование RHEL Real Time
- Настройка и тестирование
- Использованные материалы
- Программы для тестирования Linux
- Программы для тестирования Linux
- 1. Phoronix Test Suite
- 2. Sysbench
- 3. GeekBench
- 4. Hardinfo
- 5. Passmark PerformanceTest
- 6. UnixBench
- 7. Unigine (Heaven, Valley, Superposition)
- 8. GFXBench 4.0
- 9. hyperfine
- 10. IOzone
- 11. Bonnie++
- 12. KDiskMark
- 13. Linpack Xtreme
- Выводы
Realtime
Операционная система реального времени (в отличии от системы общего назначения) оптимизирована на уменьшение задержек реакции (latency) и детерминизм (maximum latency) при обработке событий. Применяется для построения систем в сферах телекоммуникаций, управления машинами, высокочастотной торговли, обработки звука и т.п. [1]
На данный момент в репозиторий Сизиф под архитектуру 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 + прочие мелкие оптимизации).
Для тестирования этого ядра можно использовать пакет linux-rt-tests .
Тестирование ядра [ править ]
Очень важно первоначально определить пригодность вашей системы для задач реального времени.
cyclictest [ править ]
Базовый способ тестирования ядра реального времени (POSIX API), это запуск утилиты cyclictest параллельно с созданием нагрузки на систему (генерацию нагрузки вы должны организовать сами, например, запуском unixbench , stress-ng , hackbench , gltestperf в цикле) в течении длительного времени (не менее 24 часов). Пример запуска:
Пример вывода на обычном ядре (std_def):
Для оценки результата следует смотреть на значения Max показывающие время реакции на прерывания в микросекундах. (Есть примеры, на обычной системе, где Max доходит до 5-значных чисел.) Пример вывода на -rt ядре (SMI прерываний не было):
(Есть сообщения, что в некоторых системах Max остается в пределах 1-значного числа.) Пример вывода на -rt ядре при наличии SMI прерываний, cyclictest запущен с дополнительной опцией —smi :
Опция —smi добавляет колонку SMI , которая показывает сколько было System Management Interrupts за время теста (счетчик прерываний считывается из MSR, если в вашем процессоре нет такого счетчика, то для их обнаружения можно использовать утилиту hwlatdetect ). SMI прерывания могут значительно ухудшить показатели системы. В худшем случае, SMI прерывания способны давать задержки на многие миллисекунды. В системе пригодной для реального времени можно снизить число SMI через настройки или перепрошивку BIOS/firmware [2] . Впрочем, полностью отключать эти прерывания не рекомендуется, так как они выполняют полезные функции для здоровья системы (контроль температуры и прочее). Часто полезно прочитать HPC Tuning Guide [3] для вашего железа. Если задержки в системе превышает требуемый максимум, то она не пригодна для использования в реальном времени. Ещё один источник высоких задержек — не оптимизированные для реального времени драйвера оборудования (запрещающие прерывания на долгое время) или само железо (блокирующее процессор на долгое время).
hwlatdetect [ править ]
Тест (с помощью hwlat tracer’а ядра) обнаруживает задержки создаваемые железом или firmware не зависимые от ядра, такие как SMI. (Не используйте его на продакшен системах или во время работы других тестов так как принцип его работы — нагружать процессоры на продолжительное время при запрещенных прерываниях, постоянно замеряя время (TSC) и определяя таким образом интервалы с пропусками.) Пример на системе с большими задержками:
rtcheck [ править ]
Небольшая утилита (от IBM) проверяющая, что запущенное ядро имеет свойства -rt ядра. Запускать с опцией -v для просмотра отчета.
jitterdebugger [ править ]
Более легкий в использовании аналог cyclictest (от Siemens и SUSE) с уклоном в воспроизводимый статистический анализ. (Домашняя страница. Видео презентация. англ.) Пример запуска:
Источник
Linux в режиме реального времени
Операционная система реального времени необходима, когда к работе процессора или потоку данных предъявляются жесткие временные требования. Таким образом она часто выполняет роль блока управления в специальных устройствах. Проведение научных экспериментов, приложения визуализации в медицине, промышленные устройства управления являются системами реального времени. Механизмы впрыска топлива автомобильных двигателей, контроллеры бытовой и военной техники также являются системами реального времени.
При этом разные события имеют различные временные требования. Например, требование к задержке для антиблокировочной тормозной системы может составлять от 3-5 миллисекунд. То есть с момента, когда колесо впервые обнаруживает, что оно скользит, у системы, управляющей антиблокировочными тормозами, есть от 3-5 миллисекунд, чтобы отреагировать и исправить ситуацию.
Возможности ядра в реальном времени существует уже более десяти лет в экосистеме программ с открытым исходным кодом. Столько же времени доступна поддержка Red Hat Enterprise Linux (RHEL) для ядра реального времени. Тем не менее многие системные администраторы неверно истолковывают его основные концепции и фактическое рабочее поведение. В этой статье я опишу некоторые из его основных функций, отличия от стандартного ядра и шаги по установке.
Планировщик ЦП в реальном времени
Для разных классов задач можно обозначить системы мягкого реального времени и системы жесткого реального времени. Первые не гарантируют точное время, когда критический процесс будет запланирован в реальном времени. Они гарантируют только то, что процессу будет отдано предпочтение перед некритическими процессами. Вторые имеют более строгие требования и задание либо выполняется в заданных временных рамках, либо считается не выполненным.
Мы называем задержкой события время, которое проходит с момента возникновения события до момента его обслуживания. Есть два типа задержек, оказывающих влияние на производительность ОС реального времени.
- Задержка прерывания относится к периоду времени от поступления прерывания в CPU до запуска процедуры обработки. Когда происходит событие, ОС должна сначала завершить выполняемую инструкцию и определить тип возникшего прерывания. Затем она должна сохранить состояние текущего процесса до обработки прерывания с помощью специальной процедуры, interrupt service routine (ISR).
Рис. 1 Задержка прерывания.
Время, необходимое диспетчеру планирования для остановки одного процесса и запуска другого, называется задержкой диспетчеризации. Предоставление задач реального времени с немедленным доступом к процессору требует, чтобы ОС реального времени минимизировали также и эту задержку. Наиболее эффективным методом поддержания низкой задержки отправки является предоставление ядер с приоритетным прерыванием.
Рис. 2 Задержка диспетчеризации.
Планировщик с учетом приоритетности процессов
Наиболее важной особенностью ОС реального времени — немедленно реагировать на критический процесс, требующий доступ к ресурсам CPU. В результате планировщик для операционной системы реального времени должен поддерживать алгоритм приоритетного прерывания. Такие алгоритмы назначают каждому процессу приоритет в зависимости от его степени важности. Если планировщик также поддерживает приоритетное прерывание, текущий процесс на CPU по запросу будет вытеснен в пользу более приоритетного процесса.
Рис. 3 Классификация планировщиков.
Существует несколько алгоритмов для планировщика в реальном времени.
- Rate-Monotonic Scheduling — алгоритм со статическим приоритетом класса планирования. Статические приоритеты назначаются в соответствии с продолжительностью цикла задачи, вследствие чего более короткие циклы имеют более высокий приоритет исполнения. В худшем случае КПД загрузки центрального процессора ограничен следующей величиной.
При числе процессов n, стремящемся к бесконечности ряд будет сходиться к ln2 ≈ 0.693147.
Earliest-deadline-first (EDF) Scheduling динамически назначает приоритеты в соответствии с крайним сроком. Чем раньше крайний срок, тем выше приоритет и чем позже крайний срок, тем ниже приоритет. В отличие от RMS, планировщик EDF не требует, чтобы процессы были периодическими и постоянно запрашивали одно и то же количество процессорного времени на пакет. Единственное требование состоит в том, чтобы процесс объявлял свой крайний срок планировщику, когда он готов к запуску.
Рис. 4 Планировщик EDF.
На рисунке видим общий принцип работы планировщика. На точке 4 был замещён T1 и его место занял T2 так как его крайний срок наступал раньше, чем у T2. После отработки T3 планировщик вернулся к T1, который завершился на отметке 23.
POSIX real-time-scheduling. Стандарт POSIX.4 определяет три политики планирования. Каждый процесс имеет атрибут планирования, который может быть выставлен в одну из трех вариантов политики.
- SCHED_FIFO — политика упреждающего планирования с постоянным приоритетом, при которой процессы с одинаковым приоритетом обрабатываются в порядке «первым пришел — первым обслужен» (FIFO). Данная политика может иметь не менее 32 уровней приоритета.
- SCHED_RR — политика аналогична SCHED_FIFO, но использует метод временного среза (циклический перебор) для планирования процессов с одинаковыми приоритетами. Он также имеет 32 уровня приоритета.
- SCHED_OTHER — политика не определена и зависит от системы; может вести себя по-разному в разных реализациях.
Установка и использование RHEL Real Time
Для начала следует подключить репозиторий Red Hat Enterprise Linux для Real Time, и установить группу пакетов RT.
В составе RT идут эти компоненты:
- kernel-rt — ядро с функционалом реального времени;
- rt-setup — установка окружения Red Hat Enterprise Linux Real Time;
- rt-tests — утилиты тестирования функций RT;
- rt-eval — для оценки возможности применять RT на данной системе;
После установки RT и перезагрузки нужно убедиться, что загружено ядро kernel-rt.
Посмотрим на некоторые отличия kernel-rt от стандартного ядра.
- При высокой нагрузке происходит проверка приоритета задачи (1-99).
- Высокоприоритетным (99) задачам отдается предпочтение при доступе к ресурсам центрального процессора.
- Не задействует политику Completely Fair Scheduling (CFS).
- Использует политику SCHED_FIFO, либо же SCHED_RR.
Рис. 5 Сравнение kernet_rt со стандартным ядром.
На графике показан замер времени отклика из миллиона повторений для систем, использующих ядра RHEL Linux 7 и RHEL Real Time соответственно. Синие точки на этом графике представляют время отклика (в микросекундах) систем со стандартным ядром RHEL 7, а зеленые — RHEL 7 Real Time. Из графика видно, что особенность kernel-rt в гораздо меньшей дисперсии и, соответственно, в большей предсказуемости времени отклика системы.
Настройка и тестирование
После установки RT может потребоваться дополнительная настройка и доводка для достижения наиболее стабильных показателей времени отклика системы. Такие требования могут предъявить компании финансового, или телекоммуникационного сектора. Сама настройка — итеративный процесс и нужно запастись терпением в начале процесса. Вряд ли получится подкрутить пару переменных и понять, что достигнут наилучший результат из возможных.
Утилита hwlatdetect из пакета rt-tests покажет задержки, вызванные аппаратным и микропрограммным обеспечением, путем опроса источника тактовых импульсов и поиска непонятных пропусков.
В данном примере parameters указывает на задержку и способ обнаружения. Порог задержки по умолчанию был выставлен на 10 микросекунд (10 μs).
RT имеет также утилиту rteval для тестирования производительности системы в реальном времени под нагрузкой. Программа создаёт большую нагрузку на систему, используя планировщик SCHED_OTHER, а затем измеряет отклик в реальном времени на каждом из активных CPU. Цель в том, чтобы постоянно выполнялись различные задачи, такие как выделение / освобождение памяти, дисковый I/O, вычисления, копирование памяти и другие.
Каждый поток измерений берет временную метку, бездействует в течение некоторого интервала, а затем принимает другую временную метку после пробуждения. Задержка по результатам измерения равна t1 — (t0 + i) , где
- t1 — фактическое время измерения;
- t0 — теоретическое время пробуждения первой временной метки;
- i — интервал ожидания.
Отчет утилиты rteval выглядит так.
Использованные материалы
- Abraham Silberschatz, Peter Baer Galvin, Greg Gagne Operating System Concepts 9-th edition.
- What are the benefits of running the Red Hat Enterprise Linux for Real Time?
- Working with the real-time kernel for Red Hat Enterprise Linux
- Advanced tuning procedures to optimize latency in RHEL for Real Time
Источник
Программы для тестирования Linux
Тестирование компьютера позволяет определить его производительность и сравнить результаты с другими системами. Для Linux существует немало программ для оценки производительности процессора, оперативной памяти, накопителя и графической подсистемы.
Мы рассмотрим наиболее интересные программы для тестирования Linux. Особое внимание уделим тем программам, которые имеют онлайн-базы с результатами актуальных систем, ведь без этого крайне сложно интерпретировать полученные данные.
Программы для тестирования Linux
1. Phoronix Test Suite
Phoronix Test Suite – это один из самых популярных инструментов, позволяющих выполнить тест производительности Linux. В его состав входят не только собственные тесты, но и скрипты для запуска сотен сторонних тестов. Иными словами, для тестирования вам достаточно только этого пакета. С помощью этой программы можно выполнить тест производительности Linux для любого компонента системы, будь то память, диск или процессор.
К сожалению, утилита сильно перегружена и пользоваться ей довольно сложно. Работать с несколькими сотнями строк текста в терминале неудобно, а графический интерфейс для последней версии пакета так и не был написан. Частично поможет веб-интерфейс, с его помощью можно ознакомиться с тестами, но для их запуска придётся вернуться к терминалу.
В любом случае, этот пакет нельзя обходить стороной. Выбрав интерактивный режим, вы можете вывести список доступных тестов и запустить необходимые. Имеются тесты для всех узлов системы: процессора, памяти, графики, накопителя, сети и самой операционной системы. Установочный пакет можно скачать с официального сайта. А для получения более подробной информации о работе с Phoronix Test Suite можете обратиться к нашей статье.
2. Sysbench
Sysbench, как и предыдущий пакет тестов, позволяет оценить производительность Linux при использовании различных компонентов системы. Однако, основным тестом можно считать проверку работы в качестве базы данных. Обширной базы с результатами вы не найдёте, но на Openbenchmarking вы хотя бы примерно можете оценить производительность вашего сервера.
Для установки Sysbench воспользуйтесь командой:
sudo apt install sysbench
3. GeekBench
GeekBench – это один из самых популярных тестов производительности в мире компьютеров. Он был портирован не только на Linux и macOS, но ещё и на Android с iOS, так что имеется возможность сравнить производительность разных платформ. В состав приложения входит множество тестов. Надо понимать, что некоторые из них задействуют аппаратные блоки процессора, вроде того же AES-шифрования. В связи с этим уместно сравнивать результаты процессоров в одном поколении.
Что примечательно, хоть приложение и не имеет графической оболочки для Linux, результаты, как и на других платформах, отображаются на сайте. Там же вы можете сравнить результаты вашей системы со множеством других, в том числе на основе мобильных процессоров ARM. Имеется возможность сравнить системы напрямую, добавив их в список сравнения.
Скачать GeekBench можно с официального сайта.
4. Hardinfo
Hardinfo – это не только набор тестов, но ещё и утилита для сбора информации о системе. К сожалению, её база данных на текущий момент уже устарела. Комплектующие последних лет могут отображаться некорректно или же вовсе пройти незамеченными.
Если говорить о тестах, то они предназначены для оценки различных блоков процессорных ядер, будь то целочисленные вычисления или с плавающей запятой. Для оценки производительности имеется небольшая база результатов, которая, как было сказано ранее, устарела. Вы можете сравнить свой процессор с Core i7 первого поколения и более ранними процессорами.
Для установки Hardinfo используйте команду:
sudo apt install hardinfo
5. Passmark PerformanceTest
Passmark PerformanceTest – это ещё один популярный тест производительности Linux. Он позволяет оценить производительность как процессора, так и оперативной памяти. Что примечательно, на сайте программы имеется рейтинг процессоров. С его помощью вы можете узнать на каком месте расположился ваш процессор, а также найти именно вашу модель и узнать, насколько близкий результат получила ваша система. Это особенно актуально для мобильных процессоров, ведь на конечный результат влияет множество факторов, а не только используемый процессор. Скачать Passmark PerformanceTest можно с официального сайта. Перед установкой не забудьте решить зависимости:
sudo apt install libncurses5 libncurses5:i386
6. UnixBench
UnixBench – это неплохой комплексный пакет позволяющий оценить производительность Linux. Проверку проходит не только процессор, но ещё и оперативная память, а также сама операционная система. К сожалению, разработчики не стали собирать результаты в единую базу, поэтому сравнить производительность с другими компьютерами у вас едва ли получится. Также стоит предупредить о том, что по умолчанию тесты проводятся многократно, а полное тестирование занимает более получаса.
Для установки UnixBench используйте команду:
sudo snap install unixbench
7. Unigine (Heaven, Valley, Superposition)
Перейдём к программам для тестирования графической подсистемы. Тесты Unigine, на основе OpenGL и Vulkan, давно зарекомендовали себя не только на Windows, но и на Linux. Heaven и Valley подойдут для тестирования старых видеокарт и интегрированной графики, в основном ввиду своего почтенного возраста. Относительно свежий Superposition предъявляет серьёзные требования к системе. Этот тест можно использовать не только для оценки производительности, но ещё и в качестве продолжительной нагрузки для стресс-теста, но эта опция станет доступна после приобретения продвинутой версии теста.
Скачать тесты Unigine можно с официального сайта.
8. GFXBench 4.0
GFXBench 4.0 – это кроссплатформенный тест на основе OpenGL, позволяющий выполнить тестирование Linux. Он рассчитан на запуск на относительно слабых смартфонах, поэтому на компьютере с ним справится даже самая простая видеокарта. По этой же причине тест не способен продемонстрировать все возможности графической системы. В пакет входит несколько тестовых сцен, а также тесты для проверки скорости текстурирования, вычислений и так далее.
Не так давно вышла 5 версия GFXBench, но в этот раз разработчики не стали выпускать версию для Linux. Но это не помешает вам сравнить свою систему с сотнями других, протестированных в 4 версии теста. Результаты можно найти в обширной базе на сайте. Скачать GFXBench 4.0 можно с официального сайта.
9. hyperfine
Небольшой benchmark для Linux — hyperfine интересен тем, что тестирует не что-то абстрактное, а замеряет скорость выполнения различных команд, которые вы ему и задаёте. Таким образом вы можете сравнить непосредственно два дистрибутива и выяснить, какой из них более отзывчивый. Во избежание погрешности, тест позволяет провести «холостые» запуски, чтобы система прогрузила все необходимые файлы для выполнения команды. Скачать hyperfine можно со страницы GitHub.
10. IOzone
IOzone – это тест дисковой подсистемы. Он проверяет скорость записи и чтения накопителя с разным размером блоков. Результат можно сохранить в виде таблицы, но на его анализ потребуется время. На сайте разработчика всё выглядит красиво, нам демонстрируют красивые графики. На деле же вы получите только кучу чисел, с которыми вам ещё предстоит что-то сделать.
Для установки IOzone используйте команду:
sudo apt install iozone3
11. Bonnie++
Bonnie++ – это ещё один тест дисковой системы Linux. В этот раз результаты выводятся в более понятном виде. Но и тут не обошлось без проблем. Он категорически не подходит для тестирования накопителей SSD. Если один из тестов прошёл слишком быстро, то вместо результата вы увидите +++. С жёсткими дисками эта особенность тоже прослеживается, но не так явно.
Иными словами, Bonnie++ подходит для тестирования старых систем с медленными жёсткими дисками. Помимо скоростных показателей, вы получите значения задержек и загрузки процессора. Для установки Bonnie++ используйте команду:
sudo apt install bonnie++
12. KDiskMark
Многие пользователи Windows привыкли использовать CrystalDiskMark для определения скоростных показателей накопителя. К счастью, для Linux есть аналогичная программа под названием KDiskMark. Она практически полностью повторяет функциональность именитого собрата.
Вы можете настраивать очередь и количество потоков у каждого из четырёх тестов. Также имеется возможность выбрать объём задачи. Результаты отображаются аналогичным с CrystalDiskMark образом. При желании вы можете навести курсор на значение и увидеть подробную информацию, количество операций в секунду (IOPS) и задержку в микросекундах.
Программа доступна в виде Snap-пакета:
sudo snap install kdiskmark
Но лучше перейти на страницу GitHub, чтобы получить последнюю версию KDiskMark. Разработчиком выступает наш соотечественник, так что решить возникшие проблемы будет совсем несложно.
13. Linpack Xtreme
Закончим нашу подборку популярным тестом. Linpack Xtreme способен создать серьёзную нагрузку на центральный процессор, при этом оперативная память также не будет простаивать. С помощью этого теста вы можете выполнить стресс тест Linux и проверить стабильность системы после комплексного разгона процессора и оперативной памяти. Результаты отображаются в привычных единицах измерения – Gflops, используемых для оценки производительности суперкомпьютеров.
Скачать программу можно с сайта TechPowerUp. Обратите внимание на то, что доступно несколько версий программы, если вы являетесь владельцем процессора Ryzen 3000 и выше, то для него есть оптимизированный тест.
Выводы
В общем случае вам достаточно установить Phoronix Test Suite, через него доступен запуск практически любого теста на Linux. Но, помимо этого, мы рассмотрели ещё и наиболее интересные программы для тестирования в среде Linux.
К сожалению, как вы могли заметить, большая часть тестов не имеет графического интерфейса, так что в этом плане Linux проигрывает Windows. Но оценить производительность компьютера всё-таки получится. Советуем выбрать GeekBench, Passmark PerfomanceTest, Unigine и GFXBench. Все эти программы позволяют сравнить производительность вашего компьютера с другими, так как на их сайтах вы можете найти обширные базы с результатами.
Также стоит отметить тот факт, что мы не стали рассматривать узкоспециализированные тесты для решения определённой задачи: архивация, декодирование, компиляция и так далее. А какими программами для тестирования компьютера пользуетесь вы? Делитесь своим мнением в комментариях.
Источник