Andrey Gulin (_foreseer) wrote,
Andrey Gulin
_foreseer

Category:

Unix - система с кооперативной многозадачностью да и ваще *****

На днях ускорил считалку на 5% путем расстановки sched_yield() после окончания каждой подзадачи (подзадача считается порядка 1ms). Дополнительный бонус - исчезли лаги по 50+ms. Т.е. налицо поведение системы с cooperative multitasking.

До этого обломалась борьба с лагами с помощью выставления тредам считалок низкого приоритета, равно как и выставление важному треду высокого. После недолгих изысканий выяснилось, что приоритеты в оперативной системе FreeBSD/Linux отсутствуют. Точнее, они есть в документации. В двух видах. SCHED_OTHER и SCHED_RR/SCHED_FIFO. SCHED_OTHER отпал сразу - его реализация умещалась в одной емкой строчке: return 0; SCHED_RR продержался дольше. Для начала смутило "for obvious reasons only root can set SCHED_RR". Это еще почему мне вот интересно? Ну а во-вторых это просто не работает. Ну т.е. в top и во всех остальных местах вам пишут, что ваш тред имеет мега приоритет. Real Time. Самый главный. Всегда первым возвращается в функции, которая отдает следующий тред для выполнения. Небольшая проблема - функцию никто не зовет :) Поэтому несмотря на приоритет ваш Real Time тред постоит, подождет свои 100 ms.

Говорят есть какие-то real time scheduler-ы для linux. Но т.к. с real time тредами я уже знаком в scheduler-ы веры нет.
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic
  • 40 comments