Линус Торвальдс опроверг проблемы с планировщиком задач, всплывшие в тесте производительности

Разработчик игр Malte Skarupke опубликовал сравнение производительности блокировок на основе Mutex и Spinlock при использовании различных планировщиков задач. Тесты показали аномально большие задержки при использовании Spinlock с по умолчанию используемым в Linux планировщиком задач. Автор тестов сделал вывод, что планировщик задач Linux имеет проблемы, которые негативно сказываются на работе игр, создаваемых для сервиса Google Stadia, в котором игры выполняются на GPU в облачном окружении, а клиенту в потоковом режиме лишь транслируется содержимое экрана с частотой до 60 кадров в секунду. При подобных условиях необходимо обеспечить своевременный вывод кадров на экран и задержки, превышающие миллисекунду, становятся заметны.

К обсуждению тестов подключился Линус Торвальдс, который назвал их мусором («pure garbage») и примером того, как можно, полностью не разобравшись в теме, получить показатели, не отражающие реальную действительность. Spinlock является низкоуровневым примитивом, который в пространстве пользователя нужно использовать с большой осторожностью и полностью разбираясь в деталях, иначе можно получить то, что было продемонстрировано автором теста. Разработчикам игр Линус посоветовал не применять spinlock и не пытаться городить собственные системы блокировки на его основе, а использовать существующие проверенные механизмы, информирующие систему об ожидании освобождения блокировки для исключения влияния планировщика.

Надстройки на базе Spinlock же можно использовать только при полной уверенности, что планировщик не прервёт их выполнение. Применяемые в тестах блокировки на основе spinlock реализованы через самодельную обвязку, работающую в пространстве пользователя. Планировщик задач может в любой случайный момент забрать управление во время выполнения этой обвязки и переключиться на выполнение другой задачи. Так как измерение производительности выполняется на основании абсолютных значений таймера, определённые в тестах задержки охватывают не только задержки в обработчике блокировки, но и код, который был выполнен в другом контексте, т.е. измеряют не только то, что пытался измерить автор теста, но и «шум» от других вычислений в системе.

Автор теста попытался возразить Линусу, указав на то, что применение собственных систем блокировки на базе spinlock часто используется на практике в играх, так как при использовании более простых планировщиков, чем в Linux, тесты показывают более высокую производительность. Линус возразил, что планировщик Linux является универсальным, оттачивался десятилетия и оптимизирован не только для рабочего стола и игр, но и для других видов нагрузки, например, для серверных систем, поэтому учитывает множество нюансов при планировании выполнения задач.

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

Источник: http://www.opennet.ru/opennews/art.shtml? num=52140

©  OpenNet