Xenomai и real-time Linux

Вопросы программного кода и архитектуры Linux

Модератор: Olej

Аватара пользователя
Olej
Писатель
Сообщения: 13100
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Xenomai и real-time Linux

Непрочитанное сообщение Olej » 31 мар 2018, 11:08

Только ссылки...

Adeos (Adaptive Domain Environment for Operating Systems)
Adeos (англ. Adaptive Domain Environment for Operating Systems) - наноядерный слой аппаратных абстракций (hardware abstraction layer, HAL) или гипервизор, находящийся между физическим уровнем аппаратного обеспечения и программным обеспечением, запускаемом на этом компьютере. В отличие от других наноядер, Adeos позволяет запускать несколько ядер одновременно, что делает его похожим на средства виртуализации.
Adeos Interrupt Pipe.
Adeos использует очередь прерываний для их распространения через различные домены, запущенные на одном оборудовании. Adeos предоставляет механизм приоритетов для обработки прерываний различными доменами. В результате Adeos размещает обработчик прерывания запрашивающего домена и соответствующие таблицы на первых этапах конвейера обработки прерывания. Домены контролируют приём и завершение прерываний. Каждое из них имеет различный эффект и контролируется по-разному.
Adaptive Domain Environment for Operating Systems

Аватара пользователя
Olej
Писатель
Сообщения: 13100
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Xenomai и real-time

Непрочитанное сообщение Olej » 31 мар 2018, 13:31

How fast is fast enough? Choosing between Xenomai and Linux for real-time applications
Dr. Jeremy H. Brown
Rep Invariant Systems, Inc.
38 Cameron Ave, Suite 100, Cambridge, MA, 02140, USA
jhbrown@repinvariant.com
Brad Martin
Rep Invariant Systems, Inc.
38 Cameron Ave, Suite 100, Cambridge, MA, 02140, USA
bmartin@repinvariant.com
17 стр., с результатами тестирования

Аватара пользователя
Olej
Писатель
Сообщения: 13100
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Xenomai и real-time

Непрочитанное сообщение Olej » 31 мар 2018, 13:39

Установка Xenomai в Debian
На данный момент последними версиями были:
Debian 7.2.0;
Xenomai 2.6.3.
Installation steps for xenomai 3 on Ubuntu 16.04
Notes on Installing the Cobalt core
Installing Xenomai 3.x - оригинальное руководство с сайта Xenomai (вообще то, документация скудная, рваная и не вовремя обновляемая).
Installing the Cobalt core

Аватара пользователя
Olej
Писатель
Сообщения: 13100
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Xenomai и real-time

Непрочитанное сообщение Olej » 31 мар 2018, 13:57

Olej писал(а): (вообще то, документация скудная, рваная и не вовремя обновляемая).
Это, похоже, единственное внятное описание Adeos патча для ядра Linux, которое требует и использует Xenomai:
index : ipipe-noarch.git
author Philippe Gerum <rpm@xenomai.org> 2018-03-27 16:24:56 +0200
committer Philippe Gerum <rpm@xenomai.org> 2018-03-27 18:43:28 +0200
Которое они (Xenomai), похоже, начали писать только 3 дня назад (пока это только черновик).
The Interrupt Pipeline (aka I-pipe)

Аватара пользователя
Olej
Писатель
Сообщения: 13100
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Xenomai и real-time

Непрочитанное сообщение Olej » 08 апр 2018, 12:34

Раз уж здесь затронуты вопросы real time, то здесь же уместно говорить о латентности разных событий + её тестировании :

1. латентность реакции на аппаратное прерывание, IRQ - дёргаем какой-то кнопкой IRQ и тестируем реакцию на каком-то I/O выходе ... например, средствами GPIO в Linux;

2. латентность эхо-ответа сетевого стека Ethernet/IP на поступление запроса;

3. временная равномерность последовательности событий ... например, отправки тех же Ethernet/IP пульсов через равные детерминированные интервалы времени;

Это очень любопытные вещи!
Аппаратчики (разработики устройств) иногда предполагают, что волшебные слова real time, RT, ... "серебряная пуля" ;-) - означают "быстрее": быстрее реакция на прерывание, быстрее доставка сетевого пакета UDP и т.п.
Это категорически не так ... от слова "с точностью до наоборот": real time - это, зачастую медленнее, ... например, микроядерные real time ОС QNX и др. при прочих равных медленнее, но реакции детерминированнее! Разброс, дисперсия времени реакции при большом числе повторений измерений меньше, и реакция обязательно завершается в определённый период времени.

Вот это и предстоит померять.
Но как?

Аватара пользователя
Olej
Писатель
Сообщения: 13100
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Xenomai и real-time

Непрочитанное сообщение Olej » 08 апр 2018, 12:40

Olej писал(а): Это очень любопытные вещи!
Аппаратчики (разработики устройств) иногда предполагают, что волшебные слова real time, RT, ... "серебряная пуля" ;-) - означают "быстрее": быстрее реакция на прерывание, быстрее доставка сетевого пакета UDP и т.п.
Это категорически не так ... от слова "с точностью до наоборот": real time - это, зачастую медленнее, ... например, микроядерные real time ОС QNX и др. при прочих равных медленнее, но реакции детерминированнее! Разброс, дисперсия времени реакции при большом числе повторений измерений меньше, и реакция обязательно завершается в определённый период времени.
Об этом всём как нельзя лучше рассказывают картинки (графики) в большенькой такой публикации How fast is fast enough? Choosing between Xenomai and Linux for real-time applications (Кембриджский университет).
(даже приложу файл, чтобы не потерялся)
Вложения
1dbe38fb23034e80b8664d8281996d2a5ef6.pdf
(1.2 МБ) 68 скачиваний

Аватара пользователя
Olej
Писатель
Сообщения: 13100
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Xenomai и real-time

Непрочитанное сообщение Olej » 08 апр 2018, 13:03

Olej писал(а): 2. латентность эхо-ответа сетевого стека Ethernet/IP на поступление запроса;
Это можно, в простейшем случае, посмотреть как клиент-серверную UDP пару, где:
- сервер только тупо но быстро ретранслирует пакет обратно клиенту;
- клиент шлёт серию с большой интенсивностью UDP-пакетов, содержащих значение своего аппаратного счётчика частоты процессора RDTSC ...
- получив обратно ретранслированный пакет, измеряет разницу из текущего RDTSC и извлечённого из тела пакета;
- это позволит вычислять задержки с наносекундной точностью;

Это грубо, но в 1-м приближении...
Вот как это выглядит при а). по localhost, б). исполнении клиента и сервера на разных процессорах/ядрах, в). при запуске процессов с приоритетами реал-тайм диспетчирования:

Код: Выделить всё

[olej@dell udptest]$ sudo chrt -f 70 taskset -c 0 ./udpserv -v
[sudo] пароль для olej:
прослушивается UDP порт 55555

[olej@dell udptest]$ sudo chrt -f 70 taskset -c 2 ./udpcli -v -t 100 -s 127.0.0.1
[sudo] пароль для olej:
server: 127.0.0.1, interval=100 мкс.
для нормального завершения: Ctrl+C!
результат счёта:
число пульсов = 368947
средняя задержка: 159485 тактов | 99.93 мкс.
с СКО отклонением = 37754.81 (23.7%)

[olej@dell udptest]$ sudo chrt -f 70 taskset -c 2 ./udpcli -v -t 20 -s 127.0.0.1
server: 127.0.0.1, interval=20 мкс.
для нормального завершения: Ctrl+C!
результат счёта:
число пульсов = 1984322
средняя задержка: 61578 тактов | 38.58 мкс.
с СКО отклонением = 12782.63 (20.8%)
Вложения
udptest.2.tgz
(9.75 КБ) 62 скачивания

Аватара пользователя
Olej
Писатель
Сообщения: 13100
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Xenomai и real-time

Непрочитанное сообщение Olej » 08 апр 2018, 13:17

Olej писал(а): 3. временная равномерность последовательности событий ... например, отправки тех же Ethernet/IP пульсов через равные детерминированные интервалы времени;
Периодическую последовательность событий (например, отправки тех же Ethernet/IP пульсов) можно создать (синхронизировать), как вариант, от аппаратного таймера RTC.
Который можно запрограммировать на частоту периодических прерываний до 8192 hz:

Код: Выделить всё

[olej@dell udptest]$ sudo ./rtcser -r2000  
период RTC заказан 122.07 us [122070 ns]
допустимые пределы: 61035...244140 ns
накопление...   
число выбросов: вниз = 17 | вверх = 735 
n=1248 : 38.41/99.33/152.92 us [+/-21.8%]

[olej@dell udptest]$ sudo ./rtcser -r2000 -f4096
период RTC заказан 244.14 us [244140 ns]
допустимые пределы: 122070...488280 ns
накопление...   
число выбросов: вниз = 2 | вверх = 46 
n=1952 : 78.75/242.41/305.76 us [+/-8.4%]

[olej@dell udptest]$ sudo ./rtcser -r2000 -f6000
период RTC заказан 166.67 us [166666 ns]
допустимые пределы: 83333...333332 ns
накопление...   
число выбросов: вниз = 41 | вверх = 887 
n=1072 : 55.97/102.20/208.77 us [+/-37.0%]

[olej@dell udptest]$ sudo ./rtcser -r2000 -f2048
период RTC заказан 488.28 us [488281 ns]
допустимые пределы: 244140...976562 ns
накопление...   
n=2000 : 370.34/488.06/610.34 us [+/-3.9%]

[olej@dell udptest]$ sudo ./rtcser -r2000 -f1024
период RTC заказан 976.56 us [976562 ns]
допустимые пределы: 488281...1953124 ns
накопление...   
n=2000 : 843.55/976.37/1110.87 us [+/-4.0%]
[olej@dell udptest]$ sudo ./rtcser -r2000 -f512
период RTC заказан 1953.12 us [1953125 ns]
допустимые пределы: 976562...3906250 ns
накопление...   
n=2000 : 1476.41/1952.87/2375.98 us [+/-1.6%]

[olej@dell udptest]$ sudo ./rtcser -r2000 -f256
период RTC заказан 3906.25 us [3906250 ns]
допустимые пределы: 1953125...7812500 ns
накопление...   
n=2000 : 3489.39/3906.00/4321.75 us [+/-0.9%]
Вложения
rtcser.tgz
(25.58 КБ) 71 скачивание

Аватара пользователя
Olej
Писатель
Сообщения: 13100
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Xenomai и real-time

Непрочитанное сообщение Olej » 08 май 2018, 15:12

В итоге (опуская сделанные за это время опыты) ... будет вам realtime (с действительно очень хорошим детерминизмом), для этого:

1. пересобираем ядро Linux с патчем;
2. скачиваем, собираем и устанавливаем дистрибутив Xenomai (библиотеки, include и т.д.);
3. можем писать свои пользовательские приложения в нативном API Xenomai (это ранние наработки Xenomai);
4. можем писать realtime приложения в стандартном API POSIX, когда Xenomai маскирует многие системные вызовы Linux;
5. но если вам нужна обработка своих IRQ, драйвер собственных устройств (или не из числа немногих, реализуемых Xenomai) - то вам нужно писать собственные драйверы (kernel space), реализующие модель RTDM (RealTime Drivers Model);
4. точно так так же, для реализации realtime для Ethernet, TCP/IP, поскольку они сидят на IRQ от Ethernet адаптера, нужно использовать RTDM драйверы сетевых карт (которых совсем немного, около 10 моделей, в составе Xenomai);
5. и для обеспечения realtime для UDP/TCP они используют ещё один open-проект - RTnet, заменяющий способ доступа Ethernet к физ. среде на TDMA (каждый хост использует свой временной слот и не конкурирует за канал);

Всё это вместе очень непросто (в подготовке и использовании), но стоит того (по результатам тестирования).

Аватара пользователя
Olej
Писатель
Сообщения: 13100
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Xenomai и real-time

Непрочитанное сообщение Olej » 08 май 2018, 15:39

Olej писал(а): 1. пересобираем ядро Linux с патчем;
2. скачиваем, собираем и устанавливаем дистрибутив Xenomai (библиотеки, include и т.д.);
Документация про это здесь: Installing Xenomai 3.x.

Сначала имеет скачать инсталляцию последней версии Xenomai.
Хотя начинать нужно со сборки ядра с патчем. Но для патченья используется скрипт из дистрибутива Xenomai (ещё до какой-то бы ни было установки Xenomai).
Выбираем версию Xenomai (последнюю?) с GIT здесь: index : xenomai-3.git.

Код: Выделить всё

olej@Cobalt ~/2018_WORKS/Triol $ git clone https://git.xenomai.org/xenomai-3.git
Клонирование в «xenomai-3»…
remote: Counting objects: 145000, done.
remote: Compressing objects: 100% (22853/22853), done.
remote: Total 145000 (delta 117817), reused 144843 (delta 117678)
Получение объектов: 100% (145000/145000), 339.91 MiB | 2.27 MiB/s, готово.
Определение изменений: 100% (117817/117817), готово.
Проверка соединения… готово.
Разархивирование:

Код: Выделить всё

olej@Cobalt ~/2018_WORKS/Triol $ tar -jxf xenomai-3-3.0.6.tar.bz2

olej@Cobalt ~/2018_WORKS/Triol $ du -hs xenomai-3-3.0.6
14M     xenomai-3-3.0.6
Конфигурирование:

Код: Выделить всё

$ cd xenomai-3
$ scripts/bootstrap
libtoolize: putting auxiliary files in AC_CONFIG_AUX_DIR, 'config'.
libtoolize: copying file 'config/ltmain.sh'
libtoolize: putting macros in AC_CONFIG_MACRO_DIRS, 'config'.
libtoolize: copying file 'config/libtool.m4'
libtoolize: copying file 'config/ltoptions.m4'
libtoolize: copying file 'config/ltsugar.m4'
libtoolize: copying file 'config/ltversion.m4'
libtoolize: copying file 'config/lt~obsolete.m4'
configure.ac:81: installing 'config/compile'
configure.ac:67: installing 'config/config.guess'
configure.ac:67: installing 'config/config.sub'
configure.ac:69: installing 'config/install-sh'
configure.ac:106: installing 'config/missing'
demo/alchemy/Makefile.am: installing 'config/depcomp'

Если к этому месту всё произошло без ошибок, то вам повезло, если нет - то нужно установить из пакетной системы все требуемое для инструментария Autoconf:

Код: Выделить всё

$ sudo apt install git
...

Код: Выделить всё

$ sudo apt install autoconf
...

Код: Выделить всё

$ sudo apt install libtool-bin
...

Код: Выделить всё

$ sudo apt install automake
...

Код: Выделить всё

$ sudo apt install libltdl-dev
...

Ответить

Вернуться в «Linux изнутри»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя