Алгоритмы планирования операционной системы

Каков наилучший алгоритм для планирования приложения, которое будет поддерживать одновременные потоки 10K с интенсивным вводом-выводом, но низкой загрузкой ЦП? Ссылки на статьи приветствуются.

5 ответов

Решение

Почему бы вам не использовать SCHED_RR? Вы сами сказали: низкая загрузка процессора. Вы могли бы даже понравится процесс, когда вы ожидаете выполнить тяжелый ввод-вывод, поэтому вы планируете реже, чем другие процессы.

Однако, в общем, почему бы не позволить ОС делать то, что у нее лучше, и просто беспокоиться о написании эффективного кода? ОС будет знать, что вы делаете блокирующий вызов ввода / вывода, и поместит ваш поток / задачу в очередь ожидания и выберет другую задачу для запуска. Вам не нужно беспокоиться об этих деталях.

Вы, вероятно, захотите SCHED_RR для этого. Возможно, вам будет интересно прочитать этот вопрос о разнице между SCHED_FIFO и SCHED_RR.

Ваша проблема больше связана с планированием ввода / вывода, чем с планированием потоков. Ядро linux предлагает различные варианты планировщика ввода / вывода. Вы можете найти хорошую статью на эту тему в этом выпуске LWN.

На самом деле, я считаю, что ни один механизм планирования не справится с таким количеством потоков без ошибок, поскольку таблицы управления в ядре станут достаточно большими.

Если возможно, я бы предложил переписать приложение для использования асинхронного ввода-вывода, select() или чего-то подобного в выбранной вами ОС.

Как сказал Гровер, вы также можете использовать некоторые механизмы объединения потоков, которые требуют меньше ресурсов и решают ваши задачи, по крайней мере, до некоторой разумной степени, если не полностью

Другие вопросы по тегам