Страница 9 из 9

Re: Xenomai + LinuxCNC из исходников -> x86, x86_64, arm, ar

СообщениеДобавлено: 03 апр 2019, 17:46
going

Re: Xenomai + LinuxCNC из исходников -> x86, x86_64, arm, ar

СообщениеДобавлено: 03 апр 2019, 19:27
MX_Master
Ты, главное там сильно не настраивайся на хороший результат (: чтобы сильно не расстраиваться

Re: Xenomai + LinuxCNC из исходников -> x86, x86_64, arm, ar

СообщениеДобавлено: 03 апр 2019, 23:52
UAVpilot
MX_Master писал(а):Сергей, как вы считаете, а в ARM чипах, где есть два и более процессоров (rk3399 например). Будут ли они мешать друг другу, если один из них используется только для работы с GPIO и юзает только встроенную SRAM?

SRAM и шина к ней у него общая для всех ядер... Разве что попробовать запустить RT-задачи на одном кластере, чтоб они полностью помещались в L2... Но всё равно остаётся общий доступ к периферии...

going писал(а):Но в новом подходе Philippe Gerum вроде как пытается решить эту проблему.
И ведёт речь о десятых долях микросекунды. На днях попробую это проверить.

Увы, но все подобные потуги в конечном итоге являются попытками "обмануть природу". Я не агитирую за "всё бросить и смириться", я о том, что нужно понимать теоретические пределы этих потуг.
Оно может показывать замечательные результаты, пока вдруг не наткнётся на какой-нибудь цикл DMA, которые длинее RT-периода (сервоцикла в нашем случае) - даже если этот цикл DMA прерывать ради RT, он (цикл) просто никогда не завершится...

Если помечтать, то для "архитектуры" LinuxCNC мне видится такое решение:
1. отдельный процессор со своей памятью и т.п., на котором работает Linux и часть LinuxCNC, которой не требуется RT. Т.е. подойдет то, что ставят на все эти платки, только желательно от 2GB и от 1.5GHz.
2. МК класа stm32f4 или выше со своей Flash и RAM для RT задач - планировщик траектории, кинематика, интерполяция и т.п., или Motion controller другими словами. Возможно и логика nonRT периферии (шпиндель, СОЖ, светофор, и т.п.), если ресурсов хватит.
3. FPGA для HAL-компонентов и прочей логики, тут-же и сами "физические пины" - Эти задачи прям так и просятся в FPGA...
В идеале 2 и 3 на одном чипе (SoC).
В принципе всё это вполне реально в ближайшем будущем. п.1 вы тут активно реализуете в соседней теме, п.2 я уже пробовал - работает. п.3 в принципе реализуемо и будет работать, но мне интересно попробовать сделать что-то вроде компилятора HAL-файлов в "прошивку" для FPGA...
Мне эта тема интересна, останавливает лишь нехватка времени. Вот выгонят на пенсию - займусь. :)

Re: Xenomai + LinuxCNC из исходников -> x86, x86_64, arm, ar

СообщениеДобавлено: 04 апр 2019, 08:02
MX_Master
UAVpilot писал(а):В идеале 2 и 3 на одном чипе (SoC).

Вот железо для 1и3, 1и2 в одном чипе я видел, а чтобы 2и3 - не встречал. Возможно, плохо искал.

Re: Xenomai + LinuxCNC из исходников -> x86, x86_64, arm, ar

СообщениеДобавлено: 04 апр 2019, 14:35
UAVpilot
А чем тебе "1и3" вместо "2и3" плох? :)
В чистом виде чипы в виде MK класа stm32f4..7 + eFPGA вряд ли будут - нет особого смысла и не те скорости, а вот образцы "1и2и3" уже давно есть, правда пока о коммерческих не слышал.

Re: Xenomai + LinuxCNC из исходников -> x86, x86_64, arm, ar

СообщениеДобавлено: 04 апр 2019, 14:44
MX_Master
UAVpilot писал(а):А чем тебе "1и3" вместо "2и3" плох?

Я люблю микроконтроллеры (: и не работал с fpga

Re: Xenomai + LinuxCNC из исходников -> x86, x86_64, arm, ar

СообщениеДобавлено: 05 апр 2019, 00:08
going
UAVpilot писал(а):Оно может показывать замечательные результаты, пока вдруг не наткнётся на какой-нибудь
....
Да, обязательно наткнётся.
Тут дело принципа. Хочется разобраться, как внутри ядра linux реалтайм организован.
Анекдот по случаю вспомнил. Старый. Бородатый.

Женщина приходит в ателье. Выкладывает на прилавок рулон красивого ситца и говорит:
- Сшейте мне пожалуйста ночную сорочку 7 метров длиной.
Над ней посмеялись сначала, а потом спрашивают:
- Хорошо сделаем, только скажите почему такая длина? Это неудобно носить.
- Всё просто. У меня муж физик-исследователь. Ему не важен результат. Его интересует путь исследования.
:lolh:

Re: Xenomai + LinuxCNC из исходников -> x86, x86_64, arm, ar

СообщениеДобавлено: 05 апр 2019, 07:10
MX_Master
В качестве исследования. Более наглядный результат работы железа даст запуск крохотной bare metal прошивки на, скрытом от Linux ядре проца. Прошивка должна в бесконечном цикле теребить 1 gpio пин.

Подключаешь лог. анализатор к этому пину, начинаешь запись вывода и по всякому нагружаешь linux. Неважно с каким ядром.

Если в выводе пина не будет никаких пауз (просто ~2.5МГц меандр), то чип подходит для дальнейших экспериментов (:

Re: Xenomai + LinuxCNC из исходников -> x86, x86_64, arm, ar

СообщениеДобавлено: 05 апр 2019, 20:58
going
MX_Master писал(а):Если в выводе пина не будет никаких пауз (просто ~2.5МГц меандр), то чип подходит для дальнейших экспериментов (:

А почему 2,5 МГц? Из каких соображений цифра?

Re: Xenomai + LinuxCNC из исходников -> x86, x86_64, arm, ar

СообщениеДобавлено: 05 апр 2019, 21:23
MX_Master
going писал(а):А почему 2,5 МГц? Из каких соображений цифра?

Опытным путём получена на проце H3. Простой программный ногодрыг без DMA. Причём, это значение одно и то же, и для основного проца (1,2 ГГц), и для сопроцессора (450 МГц). Значение плавает от 2,5 МГц до 2,7 МГц. На основном чипе на 3-ядрах при этом работал linux, а на изолированном только ногодрыг (+ системные процессы linux).

viewtopic.php?f=41&t=16788&p=383768#p383768

Чтобы получить что-то быстрее, нужны уже аппаратные средства.

Re: Xenomai + LinuxCNC из исходников -> x86, x86_64, arm, ar

СообщениеДобавлено: 13 апр 2019, 13:18
going
MX_Master писал(а):Причём, это значение одно и то же, и для основного проца (1,2 ГГц), и для сопроцессора (450 МГц). Значение плавает от 2,5 МГц до 2,7 МГц.

Михаил, а ты не задавался вопросом, почему значения очень близкие и там и там? Основной проц явно может быстее.
И сопроцессор с 450 МГц может выдать явно больше?

Re: Xenomai + LinuxCNC из исходников -> x86, x86_64, arm, ar

СообщениеДобавлено: 13 апр 2019, 13:51
MX_Master
Канеш, могут. Но это будет уже неконтролируемый ногодрыг без подсчёта. А нам тут в ЧПУ просто позарез нужно знать, сколько надёргано (:

Re: Xenomai + LinuxCNC из исходников -> x86, x86_64, arm, ar

СообщениеДобавлено: 13 апр 2019, 14:07
going
Научил linuxcnc собираться в пакеты *.deb для ОС bionic (Ubuntu 18.04.x). Нативная сборка в chroot.
И первое, что заметил, это нестыковка версий компиляторов.
В armbian ядро собирается кросскомпиляцией (gcc 7.2) - в системе (gcc 7.3) и т.д..
Придётся учить ядро собираться в chroot окружении в стиле Ubuntu, как и все последующие пакеты.
Но это уже будет отличаться от armbian.

Видится два варианта.
1) Отдать необходимые изменения непосредственно команде armbian.
Они вроде бы начали принимать мои исправления.
2) Поступить, как давно предлагал Михаил (MX_Master), переделать форк armbian, и продвигать его самостоятельно.

Re: Xenomai + LinuxCNC из исходников -> x86, x86_64, arm, ar

СообщениеДобавлено: 13 апр 2019, 14:17
going
MX_Master писал(а):Канеш, могут.

Тогда покажи исходник этого ногодрыга. Я думал, там простой цикл записи в порт по очереди высокого - низкого уровней.
Честно говоря, меня больше интересует запись в порт по таймеру.
Дёргать пином в нужный момент времени, который мы вычислили.

Re: Xenomai + LinuxCNC из исходников -> x86, x86_64, arm, ar

СообщениеДобавлено: 13 апр 2019, 14:51
MX_Master
Чё там показывать (: обычный цикл, в котором одна переменная увеличивается на 1 и пишется константа 32 бита в порт, всё

В прошивке сопроцессора (H3) я юзаю системный таймер и дёргаю пины только, когда надо. Но при таком подходе все накладные расходы сводят макс. скорость ногодрыга к 200-300 КГц.

Re: Xenomai + LinuxCNC из исходников -> x86, x86_64, arm, ar

СообщениеДобавлено: 13 апр 2019, 15:47
going
Значи, я всё правильно понял.

Re: Xenomai + LinuxCNC из исходников -> x86, x86_64, arm, ar

СообщениеДобавлено: 21 июл 2019, 19:36
going
Выделил немного времени. Собрал с небольшими исправлениями linux-v5.2.1 Dovetail
https://evlproject.org/dovetail/
и вот новые тесты:
В консоли (без Х сервера) на выделенном ЦПУ тест задержки для IRQ
(для просмотра содержимого нажмите на ссылку)
Код: Выделить всёРазвернуть
RTT|  00:00:01  (irq, 1000 us period, priority 90, CPU2)
RTH|----lat min|----lat avg|----lat max|-overrun|---msw|---lat best|--lat worst
RTD|      0.726|      0.817|      1.089|       0|     0|      0.726|      1.089
RTD|      0.759|      0.819|      2.378|       0|     0|      0.726|      2.378
RTD|      0.759|      0.819|      1.632|       0|     0|      0.726|      2.378
RTD|      0.759|      0.818|      1.334|       0|     0|      0.726|      2.378
RTD|      0.759|      0.818|      1.275|       0|     0|      0.726|      2.378
RTD|      0.634|      0.818|      1.499|       0|     0|      0.634|      2.378
RTD|      0.758|      0.818|      1.464|       0|     0|      0.634|      2.378
RTD|      0.754|      0.817|      1.419|       0|     0|      0.634|      2.378
RTD|      0.760|      0.817|      1.365|       0|     0|      0.634|      2.378
RTD|      0.759|      0.817|      1.300|       0|     0|      0.634|      2.378
RTD|      0.759|      0.818|      1.268|       0|     0|      0.634|      2.378
RTD|      0.758|      0.818|      1.352|       0|     0|      0.634|      2.378
RTD|      0.758|      0.818|      1.262|       0|     0|      0.634|      2.378
RTD|      0.758|      0.818|      1.331|       0|     0|      0.634|      2.378
RTD|      0.758|      0.817|      1.310|       0|     0|      0.634|      2.378
RTD|      0.759|      0.816|      1.321|       0|     0|      0.634|      2.378
RTD|      0.709|      0.818|      1.282|       0|     0|      0.634|      2.378
RTD|      0.758|      0.817|      1.278|       0|     0|      0.634|      2.378
RTD|      0.758|      0.817|      1.141|       0|     0|      0.634|      2.378
RTD|      0.759|      0.816|      1.414|       0|     0|      0.634|      2.378
RTD|      0.757|      0.818|      1.347|       0|     0|      0.634|      2.378
RTT|  00:00:22  (irq, 1000 us period, priority 90, CPU2)
RTH|----lat min|----lat avg|----lat max|-overrun|---msw|---lat best|--lat worst
RTD|      0.758|      0.816|      1.439|       0|     0|      0.634|      2.378
RTD|      0.667|      0.817|      1.358|       0|     0|      0.634|      2.378
RTD|      0.757|      0.816|      1.272|       0|     0|      0.634|      2.378
RTD|      0.758|      0.816|      1.222|       0|     0|      0.634|      2.378
RTD|      0.757|      0.817|      1.456|       0|     0|      0.634|      2.378
RTD|      0.639|      0.816|      1.269|       0|     0|      0.634|      2.378
RTD|      0.758|      0.816|      1.243|       0|     0|      0.634|      2.378
RTD|      0.757|      0.816|      1.336|       0|     0|      0.634|      2.378
RTD|      0.757|      0.817|      1.300|       0|     0|      0.634|      2.378
RTD|      0.716|      0.817|      1.382|       0|     0|      0.634|      2.378
RTD|      0.757|      0.817|      1.376|       0|     0|      0.634|      2.378
RTD|      0.758|      0.817|      1.324|       0|     0|      0.634|      2.378
RTD|      0.659|      0.816|      1.227|       0|     0|      0.634|      2.378
RTD|      0.757|      0.817|      1.251|       0|     0|      0.634|      2.378
RTD|      0.757|      0.816|      1.146|       0|     0|      0.634|      2.378
RTD|      0.757|      0.816|      1.243|       0|     0|      0.634|      2.378
RTD|      0.743|      0.815|      1.297|       0|     0|      0.634|      2.378
RTD|      0.757|      0.816|      1.306|       0|     0|      0.634|      2.378
RTD|      0.729|      0.815|      1.309|       0|     0|      0.634|      2.378
RTD|      0.756|      0.816|      1.227|       0|     0|      0.634|      2.378
RTD|      0.757|      0.816|      1.308|       0|     0|      0.634|      2.378
RTT|  00:00:43  (irq, 1000 us period, priority 90, CPU2)
RTH|----lat min|----lat avg|----lat max|-overrun|---msw|---lat best|--lat worst
RTD|      0.757|      0.816|      1.178|       0|     0|      0.634|      2.378
RTD|      0.757|      0.816|      1.421|       0|     0|      0.634|      2.378
RTD|      0.757|      0.815|      1.285|       0|     0|      0.634|      2.378
RTD|      0.758|      0.815|      1.274|       0|     0|      0.634|      2.378
RTD|      0.757|      0.814|      1.260|       0|     0|      0.634|      2.378
RTD|      0.692|      0.816|      1.326|       0|     0|      0.634|      2.378
RTD|      0.757|      0.816|      1.225|       0|     0|      0.634|      2.378
RTD|      0.756|      0.815|      1.289|       0|     0|      0.634|      2.378
RTD|      0.756|      0.815|      1.267|       0|     0|      0.634|      2.378
RTD|      0.649|      0.816|      1.285|       0|     0|      0.634|      2.378
RTD|      0.757|      0.816|      1.344|       0|     0|      0.634|      2.378
RTD|      0.734|      0.816|      1.194|       0|     0|      0.634|      2.378
RTD|      0.757|      0.816|      1.378|       0|     0|      0.634|      2.378
RTD|      0.756|      0.816|      1.267|       0|     0|      0.634|      2.378
RTD|      0.757|      0.815|      1.491|       0|     0|      0.634|      2.378
RTD|      0.710|      0.815|      1.298|       0|     0|      0.634|      2.378
RTD|      0.756|      0.816|      1.394|       0|     0|      0.634|      2.378
RTD|      0.685|      0.815|      1.284|       0|     0|      0.634|      2.378
RTD|      0.756|      0.816|      1.256|       0|     0|      0.634|      2.378
RTD|      0.756|      0.815|      1.437|       0|     0|      0.634|      2.378
RTD|      0.756|      0.815|      1.326|       0|     0|      0.634|      2.378


В консоли (без Х сервера) на выделенном ЦПУ тест задержки в пространстве ядра
(для просмотра содержимого нажмите на ссылку)
Код: Выделить всёРазвернуть
RTT|  00:01:04  (kernel, 1000 us period, priority 90, CPU2)
RTH|----lat min|----lat avg|----lat max|-overrun|---msw|---lat best|--lat worst
RTD|      0.136|      0.371|      2.083|       0|     0|      0.136|      6.367
RTD|      0.141|      0.372|      2.083|       0|     0|      0.136|      6.367
RTD|      0.215|      0.372|      2.054|       0|     0|      0.136|      6.367
RTD|      0.224|      0.372|      2.247|       0|     0|      0.136|      6.367
RTD|      0.240|      0.372|      2.997|       0|     0|      0.136|      6.367
RTD|      0.218|      0.377|      1.885|       0|     0|      0.136|      6.367
RTD|      0.230|      0.373|      1.953|       0|     0|      0.136|      6.367
RTD|      0.217|      0.379|      1.827|       0|     0|      0.136|      6.367
RTD|      0.256|      0.380|      1.758|       0|     0|      0.136|      6.367
RTD|      0.216|      0.381|      1.661|       0|     0|      0.136|      6.367
RTD|      0.225|      0.380|      3.369|       0|     0|      0.136|      6.367
RTD|      0.253|      0.384|      2.053|       0|     0|      0.136|      6.367
RTD|      0.246|      0.377|      2.041|       0|     0|      0.136|      6.367
RTD|      0.252|      0.378|      2.377|       0|     0|      0.136|      6.367
RTD|      0.216|      0.379|      2.020|       0|     0|      0.136|      6.367
RTD|      0.226|      0.374|      1.970|       0|     0|      0.136|      6.367
RTD|      0.226|      0.374|      2.935|       0|     0|      0.136|      6.367
RTD|      0.250|      0.382|      1.914|       0|     0|      0.136|      6.367
RTD|      0.256|      0.381|      1.909|       0|     0|      0.136|      6.367
RTD|      0.208|      0.376|      1.795|       0|     0|      0.136|      6.367
RTD|      0.254|      0.375|      1.612|       0|     0|      0.136|      6.367
RTT|  00:01:25  (kernel, 1000 us period, priority 90, CPU2)
RTH|----lat min|----lat avg|----lat max|-overrun|---msw|---lat best|--lat worst
RTD|      0.256|      0.375|      1.572|       0|     0|      0.136|      6.367
RTD|      0.185|      0.395|      3.529|       0|     0|      0.136|      6.367
RTD|      0.225|      0.410|      6.076|       0|     0|      0.136|      6.367
RTD|      0.255|      0.375|      5.748|       0|     0|      0.136|      6.367
RTD|      0.241|      0.369|      2.102|       0|     0|      0.136|      6.367
RTD|      0.252|      0.374|      1.974|       0|     0|      0.136|      6.367
RTD|      0.254|      0.371|      1.735|       0|     0|      0.136|      6.367
RTD|      0.254|      0.378|      2.721|       0|     0|      0.136|      6.367
RTD|      0.256|      0.376|      1.849|       0|     0|      0.136|      6.367
RTD|      0.257|      0.372|      2.119|       0|     0|      0.136|      6.367
RTD|      0.238|      0.376|      1.697|       0|     0|      0.136|      6.367
RTD|      0.255|      0.374|      1.707|       0|     0|      0.136|      6.367
RTD|      0.244|      0.372|      1.860|       0|     0|      0.136|      6.367
RTD|      0.237|      0.378|      3.321|       0|     0|      0.136|      6.367
RTD|      0.254|      0.379|      3.139|       0|     0|      0.136|      6.367
RTD|      0.216|      0.393|      5.544|       0|     0|      0.136|      6.367
RTD|      0.262|      0.380|      5.849|       0|     0|      0.136|      6.367
RTD|      0.232|      0.375|      3.004|       0|     0|      0.136|      6.367
RTD|      0.254|      0.384|      2.009|       0|     0|      0.136|      6.367
RTD|      0.255|      0.379|      2.366|       0|     0|      0.136|      6.367
RTD|      0.212|      0.370|      2.032|       0|     0|      0.136|      6.367
RTT|  00:01:46  (kernel, 1000 us period, priority 90, CPU2)


В консоли (без Х сервера) на выделенном ЦПУ тест задержки в пространстве пользователя
(для просмотра содержимого нажмите на ссылку)
Код: Выделить всёРазвернуть
RTT|  00:01:04  (user, 1000 us period, priority 90, CPU2)
RTH|----lat min|----lat avg|----lat max|-overrun|---msw|---lat best|--lat worst
RTD|      5.140|      6.621|      9.326|       0| 65000|      5.140|     41.985
RTD|      5.400|      6.618|      9.841|       0| 66000|      5.140|     41.985
RTD|      5.088|      6.634|      9.632|       0| 67000|      5.088|     41.985
RTD|      5.446|      6.629|      9.323|       0| 68000|      5.088|     41.985
RTD|      5.377|      6.614|      9.914|       0| 69000|      5.088|     41.985
RTD|      5.442|      6.619|      9.488|       0| 70000|      5.088|     41.985
RTD|      5.396|      6.604|      9.545|       0| 71000|      5.088|     41.985
RTD|      5.436|      6.618|      9.203|       0| 72000|      5.088|     41.985
RTD|      5.302|      6.631|      9.779|       0| 73000|      5.088|     41.985
RTD|      5.310|      6.876|     42.973|       0| 74000|      5.088|     42.973
RTD|      5.419|      6.614|      9.823|       0| 75000|      5.088|     42.973
RTD|      5.250|      6.633|      9.509|       0| 76000|      5.088|     42.973
RTD|      5.441|      6.643|     10.012|       0| 77000|      5.088|     42.973
RTD|      5.366|      6.605|      9.749|       0| 78000|      5.088|     42.973
RTD|      5.409|      6.633|      9.721|       0| 79000|      5.088|     42.973
RTD|      5.424|      6.632|      9.510|       0| 80000|      5.088|     42.973
RTD|      5.363|      6.646|      9.910|       0| 81000|      5.088|     42.973
RTD|      5.465|      6.627|      9.751|       0| 82000|      5.088|     42.973
RTD|      5.393|      6.590|     11.057|       0| 83000|      5.088|     42.973
RTD|      5.378|      6.619|     10.511|       0| 84000|      5.088|     42.973
RTD|      5.243|      6.611|      9.930|       0| 85000|      5.088|     42.973
RTT|  00:01:25  (user, 1000 us period, priority 90, CPU2)
RTH|----lat min|----lat avg|----lat max|-overrun|---msw|---lat best|--lat worst
RTD|      5.318|      6.604|      9.875|       0| 86000|      5.088|     42.973
RTD|      5.410|      6.609|      9.680|       0| 87000|      5.088|     42.973
RTD|      5.370|      6.620|      9.845|       0| 88000|      5.088|     42.973
RTD|      5.450|      6.629|      9.536|       0| 89000|      5.088|     42.973
RTD|      5.492|      6.634|      9.212|       0| 90000|      5.088|     42.973
RTD|      5.340|      6.617|      9.498|       0| 91000|      5.088|     42.973
RTD|      5.342|      6.627|      9.436|       0| 92000|      5.088|     42.973
RTD|      5.324|      6.880|     37.208|       0| 93000|      5.088|     42.973
RTD|      5.363|      6.600|     10.182|       0| 94000|      5.088|     42.973


В графическом режиме на выделенном ЦПУ при нагрузке glxgears тест задержки:
для IRQ -12
в пространстве ядра 28
в пространстве пользователя 180

Тест проводился на плате Bananapi-M64 с процессором А64 и корневым разделом на медленной флешке