Я занимаюсь анализом CFS Linux для своего класса ОС и наблюдаю за тем, что не могу объяснить.Linux CFS Волонтерские контекстные коммутаторы SCHED_OTHER SCHED_FIFO
Для двух других идентичных процессов, когда они выполняются с помощью политики SCHED_OTHER, я вижу примерно на 50% больше добровольных переключателей контекста, чем когда я выполняю их с помощью политики SCHED_FIFO или SCHED_RR.
Это не удивило бы меня для непроизвольных выключателей, поскольку SCHED_OTHER имеет гораздо более низкий приоритет, поэтому он должен отказаться от процессора. Но почему это будет так для добровольными переключателями. Почему SCHED_OTHER добровольно отказывается от процессора чаще, чем процессы в реальном времени? Это идентичный процесс, поэтому он только добровольно отказывается от процессора, когда переключается на ввод-вывод, не так ли? И я не думаю, что выбор политики повлияет на частоту попыток ввода-вывода.
У любого человека Linux есть идея? Благодаря!
Спасибо за этот ответ. После прочтения этого и моего ОП снова я понял, что я забыл упомянуть о важном факте, который заключается в том, что процесс, который я тестирую, связан с процессом, связанным с I/O. Таким образом, по своей природе он будет делать много добровольного переключения контекста. Тем не менее, я до сих пор не могу ответить на вопрос о том, почему обычно запланированная задача будет * добровольно переключаться чаще, чем запланированная в режиме реального времени задача. Я понимаю, что такой процесс будет добровольно меняться, но почему я вижу разницу между политиками? Я думал, что добровольный коммутатор ... – Alex
... не имеет ничего общего с политикой, но указал, что процесс перешел на ввод-вывод и не нуждался в CPU в этот момент. Политика здесь неважно, только то, что делает этот процесс в этот момент, не так ли? Правильно ли я считаю, что * непроизвольные * переключатели могут быть объяснены политикой, но * добровольные * переключатели относятся к основной программе? Большое спасибо за ваш ответ. Извините, если я плотный. – Alex
Да, вы правы, что непроизвольные переключатели объясняются политикой, а добровольные ключи вызваны самим процессом. Но я, может быть, ошибаюсь, потому что это то, чему нас учили в однопроцессорных системах. У меня есть сомнения относительно многопроцессорных систем, мне придется посмотреть на исходный код для него. Меня здесь интересует. Могу ли я узнать, что программа запускается (см., Можете ли вы присоединить ее к OP), и как вы узнаете контекстные переключатели, используя getrusage()? Является ли программа многопоточной? Вы работаете в многопроцессорной системе? – Varun