|
"Тормозные" RTOS и запрещение прерываний |
|
|
|
May 19 2011, 05:00
|
Частый гость
 
Группа: Свой
Сообщений: 163
Регистрация: 24-08-05
Пользователь №: 7 937

|
В последнее время прочитал несколько сообщений в русскоязычных конференциях по электронике (Electronix, Caxapa) о том, что есть замечательные варианты повышения быстродействия RTOS - "без блокировки прерываний вообще, без spin-lockов, без циклов"(цитата) .
На эту тему замечу:
1) Системы с запрещением прерываний на время изменения системных данных надежно работают в любых проектах и с любыми CPU.
2) Системы без запрещения прерываний на время изменения системных данных можно разделить на две категории
- системы, которые работают только в проекте автора (как правило, единственном) - здесь без комментариев
- Segmented Interrupt Architecture - системы, в которых прерывания не запрещаются, а просто останавливается переключатель контекста. Если во время прерывания появляется условия, требующие переключения контекста, то эти условия помещаются в специальную очередь и обрабатываются вне прерываний. Такой подход кажется привлекательным на первый взгляд, но на практике имеет столь серьезные недостатки, что мне известно только 2 коммерческих RTOS (CMX, Velocity) использующих такой подход. Для тех, кому интересны детали, рекомендую статью W.Lamie (автор ThreadX RTOS) "Pardon the Interruption: Two Approaches to RTOS Interrupt Architectures"
В общем, если вы не хотите получить случайные, совершенно непонятные баги и проклинать тот день, когда решили связаться с операционной системой - используйте RTOS с запрещением прерываний (VxWorks, pSOS, ThreadX/Nucleous, TNKernel, FreeRTOS, scmRTOS и т.п. ).
|
|
|
|
|
 |
Ответов
|
May 20 2011, 07:26
|

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

|
Цитата(yuri_t @ May 19 2011, 08:00)  что мне известно только 2 коммерческих RTOS (CMX, Velocity) использующих такой подход. Для тех, кому интересны детали, рекомендую статью W.Lamie (автор ThreadX RTOS) "Pardon the Interruption: Two Approaches to RTOS Interrupt Architectures" ИМХО, статья несколько лукавая - "смотрите как хорошо в UIA и как не очень хорошо SIA", при этом приводится ряд спорных аргументов против SIA. Но, как ни странно, в целом выводы правильные  . UAI имеет тот большой плюс что очень прост в реализации, и просто писать обработчики прерываний в приложениях. И этот подход хорошо подходит для простых OS, где системные структуры (данные с которыми ОС работает при обработке вызова - очереди задач, системные объекты и прочее) достаточно маленькие и простые. Поэтому секции кода с запрещенными прерываниями небольшие и RT страдает несильно. А теперь рассмотрим ситуацию более сложной системы. У меня, например, есть реальная ситуация когда TNKernel выполняется на CortexM3 в непривилегированном режиме под отдельным специальным супервизором. При этом издержки на tn_interrupt_lock/unlock становяться достаточно заметными (вызываются привилегированные сервисы супервизора через swi), и уже не столь малыми по сравнению с вариантом на SIA. Второй пример (тоже скоро может перестать гипотетическим) - многоядерность. В таком варианте тоже простым interrupt_lock/unlock не обойдешься. Если брать совсем уж сложные системы - типа Windows/Linux, то они все исповедуют очень развитую модель SIA - DPC/BottomHalf. И делали это они не красоты ради, а потому что выхода просто не было - системные структуры настолько сложны и секции кода их обрабатывающие могут занимать настолько долгое время, что RT был бы совсем уж плох. Ну а "возвращаясь к нашим баранам" - UIA почти идеален для простых ОС, тут почти без вариантов. Рассматривать вариант SIA, ИМХО, стоит только в том случае если нужен совсем-совсем жестокий RT. Могу сказать в цифрах - я измерял interrupt latency на TNKernel (модель UIA) на lpc1768@100mhz - так максимальное время задержки было примерно 4uS. Оно конечно зависит от того что исполняется в данный момент, при тесте у меня шел активный обмен по UDP echo и сервисы ОС использовались достаточно активно и сторонних прерываний было достаточно. Если кому-то нужен RT более жесткий чем 4uS - то тут явно не процессор и RTOS надо использовать, SIA тут почти не поможет, поэтому все разговоры про SIA в простых ОС - это обычно просто популизм. Да, возможно улучшится незначительно RT - при соблюдении массы условий, но в целом системные вызовы будут работать медленее - так как код будет сложнее, и общее быстродейтсивие вообще может упасть.
|
|
|
|
|
May 20 2011, 09:45
|

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

|
Цитата(VslavX @ May 20 2011, 10:26)  ИМХО, статья несколько лукавая - "смотрите как хорошо в UIA и как не очень хорошо SIA", при этом приводится ряд спорных аргументов против SIA. Но, как ни странно, в целом выводы правильные  . Эти пацаны из Express Logic толкают эту свою статью уже лет 6 , если не дольше. С тех пор наука давно ушла вперед. И между двумя ихними крайностями есть куча промежуточных решений. Например та же RL ARM библиотека которая пожалуй покомпактней будет TNKernel может вызывать некоторые сервисы RTOS в незапрещаемых прерываниях. Т.е. случай напоминающий сегментированную модель прерываний (SIA) Но строится это на привязке к архитектуре Cortex-M3.
|
|
|
|
Сообщений в этой теме
yuri_t "Тормозные" RTOS и запрещение прерываний May 19 2011, 05:00 AlexandrY Цитата(yuri_t @ May 19 2011, 08:00) В пос... May 19 2011, 05:48 kikos 1) Что такое "RTOS" ? Слишком общее на... May 19 2011, 09:47 AlexandrY Цитата(kikos @ May 19 2011, 12:47) 1) Что... May 19 2011, 10:35  kikos Цитата(AlexandrY @ May 19 2011, 14:35) Ну... May 19 2011, 12:01 yuri_t Применение Segmented Interrupt Architecture в мал... May 20 2011, 13:01 AlexandrY Цитата(yuri_t @ May 20 2011, 16:01) Приме... May 20 2011, 13:28  VslavX Цитата(AlexandrY @ May 20 2011, 16:28) Но... May 20 2011, 15:42   AlexandrY Цитата(VslavX @ May 20 2011, 18:42) А обя... May 20 2011, 17:16    Terminator Цитата(AlexandrY @ May 21 2011, 00:16) Ну... May 22 2011, 08:13 kikos Цитата(yuri_t @ May 20 2011, 17:01) Приме... May 23 2011, 11:04 yuri_t Статьи Ralph Moore и David Kliedermacher я читал (... May 23 2011, 15:34 sasamy Цитата(yuri_t @ May 23 2011, 19:34) А тут... May 24 2011, 09:28  kikos Цитата(sasamy @ May 24 2011, 13:28) И вед... May 25 2011, 07:14   sasamy Цитата(kikos @ May 25 2011, 11:14) не так... May 25 2011, 09:56    evg123 Несколько замечаний из собственного опытов:
1) На ... May 26 2011, 11:15     VslavX Цитата(evg123 @ May 26 2011, 14:15) Неско... May 26 2011, 12:34      evg123 Цитата(VslavX @ May 26 2011, 16:34) Может... May 27 2011, 08:59       AlexandrY Цитата(evg123 @ May 27 2011, 11:59) Я так... May 27 2011, 11:01        evg123 Я понимаю, что я немного не в тему, но всё равно, ... May 30 2011, 08:48         sasamy Цитата(evg123 @ May 30 2011, 12:48) А что... May 31 2011, 05:29         AlexandrY Цитата(evg123 @ May 30 2011, 11:48) Я не ... May 31 2011, 05:59          evg123 Цитата(AlexandrY @ May 31 2011, 08:59) Эт... May 31 2011, 15:11           AlexandrY Цитата(evg123 @ May 31 2011, 18:11) Верно... May 31 2011, 17:25            evg123 Цитата(AlexandrY @ May 31 2011, 20:25) Эт... Jun 1 2011, 21:04             sasamy Цитата(evg123 @ Jun 2 2011, 01:04) 20 тыс... Jun 2 2011, 05:27             LightElf QUOTE (evg123 @ Jun 2 2011, 01:04) Вы что... Jun 2 2011, 08:18              kikos Цитата(LightElf @ Jun 2 2011, 12:18) Испо... Jun 2 2011, 11:00             AlexandrY Цитата(evg123 @ Jun 2 2011, 00:04) Одни д... Jun 2 2011, 10:00              evg123 Цитата(AlexandrY @ Jun 2 2011, 14:00) Зач... Jun 2 2011, 15:43               AlexandrY Цитата(evg123 @ Jun 2 2011, 18:43) ... и ... Jun 3 2011, 05:14                aaarrr Цитата(AlexandrY @ Jun 3 2011, 09:14) Вот... Jun 3 2011, 08:01               sasamy Цитата(evg123 @ Jun 2 2011, 19:43) Поясня... Jun 3 2011, 07:37                evg123 Цитата(sasamy @ Jun 3 2011, 11:37) ...Вы ... Jun 7 2011, 09:28              neiver Цитата(AlexandrY @ Jun 2 2011, 14:00) Для... Jun 3 2011, 10:29           sasamy Цитата(evg123 @ May 31 2011, 19:11) А поп... May 31 2011, 22:50            AlexandrY Цитата(sasamy @ Jun 1 2011, 01:50) ОС без... Jun 1 2011, 05:27       VslavX Цитата(evg123 @ May 27 2011, 11:59) Я реж... May 27 2011, 11:46        kikos Цитата(VslavX @ May 27 2011, 15:46) Более... May 27 2011, 13:47         AlexandrY Цитата(kikos @ May 27 2011, 16:47) Покажи... May 27 2011, 20:46 kikos Согласен.
Хотел обратить внимание на то, что ... May 24 2011, 07:59 yuri_t Цитата(kikos @ May 27 2011, 16:47) Покажи... May 27 2011, 13:56 kikos Цитата(yuri_t @ May 27 2011, 17:56) http:... May 30 2011, 08:27
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|