Посмотрим-посмотрим

Да нету там никаких 40 процентов

Исходные условия:
- STM32F103RG
- тактовая частота ядра 72МГц
- тактовая частота шины периферии 36МГц
- исполнение из флеша с 2 тактами ожидания
- печатная плата - стартеркит от Терраэлектроники
- компилятор IAR 6.30
- максимальные оптимизации по скорости
Тестовый алгоритм такой:
- имеется две задачи - 1 и 2
- приоритет задачи 1 выше (более приоритетная) чем у задачи 2
- задача 1 в бесконечном цикле
{
ждет синхрообъект (семафор для TNKernel и ef для scmRTOS)
после срабатывания синхрообъекта сбрасывает тестовый пин GPIO
}
- задача 2 в бесконечном цикле
{
спит 10 мс
устанавливает тестовый пин GPIO
сигналит синхрообъектом задаче 2
}
В итоге осциллографом наблюдаем импульсы положительной полярности длительностью несколько микросекунд с частотой следования 100 Герц.
Примечание:
Для SCM выполнена дополнительная оптимизация кода (отличие от релизной версии) предложенная AHTOXA - внесена инструкция
"bl os_context_switch_hook" в файле OS_Target_asm.s
Для SCM за основу взял проект 1-EventFlag для порта на STM32F1xx. Tрадиционно помучался со средой (а почему это у вас там есть конфигурация Release которая нихрена не компилируется?), в итоге пришлось проходить все опции ручками - выбирать тагет, включать оптмизации, и прочее. Вкрутил свой код настройки тактовой частоты и флеша. Итоговый результат - длительность тестового импульса 2.72мкс.
Потом взял свой проект на TNKernel, тот же самый код инициализации тактового генератора, тот же самый тестовый алгоритм.
Отключил отладку и всякие плюшки типа профайлера времени исполнения задачи - оп-па, импульс 4.04 мкс. Не, такого не бывает, я же железобетонно уверен. Ага - забыли оптимизацию по скорости включить - 3.56 мкс. Ну не может быть. Полез ковыряться, в итоге нарыл у себя глюк в порту - запрос PendSV избыточно вызывался дважды (это я давно перестраховался при разработке порта и потом забыл убрать, так что уже сегодняшний вечер провел с пользой


Итоговый результат длительностей наблюдаемых импульсов:
scmRTOS - 2.72 мкс
TNKernel - 2.76 мкс
Ессно, никаких 40 процентов тут и близко нету, так что "Пастернака надо-таки читать", ага

Я не берусь утверждать что тут эта разница именно из-за более сложного диспетчера - уж очень разные ОС и много факторов влияет.
Но то что двухуровневый диспетчер с round-robin-ом вещь совсем не аццки сложная и медленная - это экспериментально доказанный факт.
Update: поигрался с конфигурацией scmRTOS, отключил отладку - добился еще снижения до 2.69 мкс. Почему оно так повлияло - явного места в коде ОС не нашел, видимо опять смещения начала функций и циклов отыграли. В-общем, общая картина понятна, на этом завязываю - дальше наносекунды ловить смысла большого нет.