|
|
  |
Сравнение RTOS для STM32 по времени реакции |
|
|
|
Nov 9 2014, 11:00
|
Знающий
   
Группа: Свой
Сообщений: 875
Регистрация: 28-10-05
Пользователь №: 10 245

|
Цитата(ArtDenis @ Nov 9 2014, 09:08)  время переключения контекста и время реакции - это разные вещи. Точнее сказать, во время реакции на событие входит время переключения контекста. Время же переключения контекста декларируется на сайте freertos в 84 цикла ЦПУ для кортексов: http://www.freertos.org/FAQMem.html#ContextSwitchTimeЯ это знаю, что это разные вещи, я давал ссылку там где приводились моменты от которых зависит время переключения контекста, и если вы хотите настроить систему на быстродействие то придется настраивать не только МК и ОСРВ, но еще указать правильные опции компилятору, как и написано в FAQ FreeRTOS, так что дерзайте. А вот тут http://electronix.ru/forum/index.php?showt...t&p=1290397 вам дали ссылку на независимую методику где приводят различные варианты и с мутексами и сообщениями и т.д. и т.д. для ChibiOS. Так что можете хоть что то с чем то сравнить.
|
|
|
|
|
Nov 9 2014, 12:25
|
Частый гость
 
Группа: Участник
Сообщений: 142
Регистрация: 10-11-12
Пользователь №: 74 318

|
Цитата(Lagman @ Nov 9 2014, 16:00)  придется настраивать не только МК и ОСРВ, но еще указать правильные опции компилятору, как и написано в FAQ FreeRTOS, так что дерзайте. К тому моменту, когда я написал свои результаты, я уже успел попробовать разные опции оптимизации (-O2, -O3, -Os), а также включал/отключал оптимизацию LTO. Самый быстрый результат был -O3 + LTO. Так что я сомневаюсь, что можно выжать больше. К тому-же мои результаты очень похожи на результаты для FreeRTOS, найденные в интернете.
--------------------
|
|
|
|
|
Nov 9 2014, 18:14
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Цитата(ArtDenis @ Nov 9 2014, 14:25)  К тому моменту, когда я написал свои результаты, я уже успел попробовать разные опции оптимизации (-O2, -O3, -Os), а также включал/отключал оптимизацию LTO. Самый быстрый результат был -O3 + LTO. Так что я сомневаюсь, что можно выжать больше. К тому-же мои результаты очень похожи на результаты для FreeRTOS, найденные в интернете. И что интересует только бинарный семафор? Другие сервисы оси не интересуют? Например как быстро происходит вход в критическую секцию и какие способы предоставляются. Я бы на вашем месте заинтересовался именно этим, поскольку это чаще всего используемый сервис в том числе и самой осью.
|
|
|
|
|
Nov 12 2014, 13:13
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Цитата(ArtDenis @ Nov 10 2014, 18:03)  С горем пополам запустил scmRTOS и померил время реакции на том же камне - 5.52 мкс Спасибо AHTOX-е за его консультации при запуске ) На Kinetis MK60 120 МГц RTOS MQX при переключении контекста через сервис флагов получается время 3 мкс (369 тактов) При этом: -флаги могут быть с автоматическим сбросом или без, -время не зависит от маски флагов, -не запрещаются прерывания ядра, -у задач разрешен планировщик time slice, -на ожидании флага может стоять очередь задач. Т.е. сервис остается еще довольно навороченным.
|
|
|
|
|
Nov 12 2014, 15:14
|
Частый гость
 
Группа: Участник
Сообщений: 180
Регистрация: 5-04-09
Пользователь №: 47 205

|
QUOTE (ArtDenis @ Nov 9 2014, 16:25)  К тому моменту, когда я написал свои результаты, я уже успел попробовать разные опции оптимизации (-O2, -O3, -Os), а также включал/отключал оптимизацию LTO. Самый быстрый результат был -O3 + LTO. Так что я сомневаюсь, что можно выжать больше. К тому-же мои результаты очень похожи на результаты для FreeRTOS, найденные в интернете. Еще хорошо бы померить время реакции для худшего случая, а не для сферического коня. Не удивлюсь, если FreeRTOS всех порвет на тряпки. Ну и там всякие мелочи, типа длительность входа в прерывание в худшем случае.
|
|
|
|
|
Nov 12 2014, 16:10
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Цитата(LightElf @ Nov 12 2014, 17:14)  Еще хорошо бы померить время реакции для худшего случая, а не для сферического коня. Не удивлюсь, если FreeRTOS всех порвет на тряпки. Ну и там всякие мелочи, типа длительность входа в прерывание в худшем случае. Так худший случай можно затянуть до бесконечности, нет никаких проблем. Один только вклад прерываний ядра чего стоит. Чтобы результаты имели смысл надо четко специфицировать условия. Да и то мало смысла сравнивать оси с разной функциональностью. Скажем смешно сравнивать scmRTOS с MQX.
|
|
|
|
|
Nov 13 2014, 12:49
|
Частый гость
 
Группа: Участник
Сообщений: 180
Регистрация: 5-04-09
Пользователь №: 47 205

|
QUOTE (AlexandrY @ Nov 12 2014, 20:10)  Так худший случай можно затянуть до бесконечности, нет никаких проблем. Один только вклад прерываний ядра чего стоит. Чтобы результаты имели смысл надо четко специфицировать условия. Ну взять такой пример: 1) высокоприоритетная задача помещена в состояние спячки 2) две задачи с одинаковым приоритетом непрерывно шлют друг другу сообщения размером 8 байт через очередь длиной 16 сообщений (одна задача шлет, другая принимает) 3) на вход внешнего высокоприоритетного прерывания подается импульс 3) обработчик прерывания пробуждает задачу из пункта 1) 4) проснувшаяся задача изменяет состояние ножки Измеряем время от импульса прерывания до изменения состояния на ноге QUOTE (AlexandrY @ Nov 12 2014, 20:10)  Да и то мало смысла сравнивать оси с разной функциональностью. Скажем смешно сравнивать scmRTOS с MQX. Ходить - так по большому!
|
|
|
|
|
Nov 13 2014, 14:54
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Цитата(LightElf @ Nov 13 2014, 14:49)  Ну взять такой пример: 1) высокоприоритетная задача помещена в состояние спячки 2) две задачи с одинаковым приоритетом непрерывно шлют друг другу сообщения размером 8 байт через очередь длиной 16 сообщений (одна задача шлет, другая принимает) 3) на вход внешнего высокоприоритетного прерывания подается импульс 3) обработчик прерывания пробуждает задачу из пункта 1) 4) проснувшаяся задача изменяет состояние ножки Измеряем время от импульса прерывания до изменения состояния на ноге В MQX такой сценарий для лучшего случая дает 1 мкс (без оптимизации кода, со всеми проверками стека и проч.) А худший случай по осциллографу увы не смотрят. Нужно делать нормальный лог статистики. И ради чего? Для realtime задач такие исследования делаются индивидуально. Никакая заявленная скорость RTOS здесь в учет не принимается.
|
|
|
|
|
Nov 13 2014, 20:48
|

embarrassed systems engineer
    
Группа: Свой
Сообщений: 1 083
Регистрация: 24-10-05
Из: Осокорки
Пользователь №: 10 038

|
Цитата(AlexandrY @ Nov 12 2014, 15:13)  На Kinetis MK60 120 МГц RTOS MQX при переключении контекста через сервис флагов получается время 3 мкс (369 тактов) Интересно, я смотрел MQX несколько лет назад, операционка хороша развитым middleware, но само ядро там слишком громоздкое и не может быть быстрым, имхо. Как бы цифра вызывает сомнения, но я смотрел давно, еще версию 3.7, надо будет собрать и погонять на STM32. Ну или К60 сам по себе фантастически быстрый, что тоже маловероятно. Или цифра 3 мкс никак не коррелирует с теми тестами по переключению контекста что мы с AHTOXA когда-то проводили. В-общем, у меня не сходится  Цитата(AlexandrY @ Nov 12 2014, 15:13)  -не запрещаются прерывания ядра, А что такое прерывания ядра? Сейчас специально скачал свежую версию 4.1.0 для K60. Посмотрел функцию sem_post(), там все те же макросы _INT_ENABLE, _INT_DISABLE которые выливаются для CortexM3 в инструкции cpsie и cpsid. Да еще оно считает уровень вложенности запрета прерываний, что тоже скорости не добавляет. Так что все там банально в MQX, запрещает она прерывания как миленькая. Или я куда-то не туда посмотрел? Цитата(AlexandrY @ Nov 12 2014, 15:13)  -у задач разрешен планировщик time slice, -на ожидании флага может стоять очередь задач.
Т.е. сервис остается еще довольно навороченным. Ну этим уже тыщу лет никого не удивишь, это многие старенькие RTOS типа TNKernel/FreeRTOS давно умеют.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|