Кража работы и поток на уровне ядра

Воровство работы - распространенная стратегия для пользовательского потока. Каждый процесс имеет рабочую очередь для приема на работу и будет воровать из очереди других, когда у них нет работы.

Есть ли ядро, которое реализует такую ​​стратегию для потока уровня ядра? Если нет, то в чем причина?

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

Спасибо

1 ответ

Планировщик кражи работ - это планировщик параллельных вычислений. Обычно это библиотеки уровня пользователя (например, Intel tbb: https://www.threadingbuildingblocks.org/) или даже такие языки, как Cilk ( https://software.intel.com/en-us/intel-cilk-plus).

Потоки на уровне ядра планируются операционной системой, и поэтому методы планирования совершенно иные. Например, в планировщике кражи работ одна из целей состоит в том, чтобы ограничить использование памяти (как доказано в оригинальном документе: http://supertech.csail.mit.edu/papers/steal.pdf) и добиться того, чтобы потоки хранятся в деке. Тем не менее, в планировщиках операционной системы главная цель - быть честными между пользователями, дать каждому процессу / ядру достаточно времени для запуска (как утверждает max-min: http://en.wikipedia.org/wiki/Max-min_fairness) и т. Д. Планировщики операционной системы даже используют разные приоритеты для потоков / процессов ядра (см. http://en.wikipedia.org/wiki/Completely_Fair_Scheduler или http://en.wikipedia.org/wiki/Multilevel_feedback_queue), По этой причине реализации кражи работы выполняются на уровне пользователя, поскольку их цель состоит в планировании потоков уровня пользователя внутри процесса, а не потоков ядра.

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