Линус Торвальдс опроверг проблемы с планировщиком задач, всплывшие в тесте производительности
6 января 2020 года
Разработчик игр Malte Skarupke опубликовал сравнение производительности блокировок на основе Mutex и Spinlock при использовании различных планировщиков задач. Тесты показали аномально большие задержки при использовании Spinlock с планировщиком задач, используемым в Linux по умолчанию. Автор тестов сделал вывод, что планировщик задач Linux имеет проблемы, которые негативно сказываются на работе игр, создаваемых для сервиса Google Stadia, в котором игры выполняются на GPU в облачном окружении, а клиенту в потоковом режиме лишь транслируется содержимое экрана с частотой до 60 кадров в секунду. При подобных условиях необходимо обеспечить своевременный вывод кадров на экран и задержки, превышающие миллисекунду, становятся заметны.
К обсуждению тестов подключился Линус Торвальдс, который назвал их мусором ("pure garbage") и примером того, как можно, полностью не разобравшись в теме, получить показатели, не отражающие реальную действительность. Spinlock является низкоуровневым примитивом, который в пространстве пользователя нужно использовать с большой осторожностью и полностью разбираясь в деталях, иначе можно получить то, что было продемонстрировано автором теста. Разработчикам игр Линус посоветовал не применять spinlock и не пытаться городить собственные системы блокировки на его основе, а использовать существующие проверенные механизмы, информирующие систему об ожидании освобождения блокировки для исключения влияния планировщика.
Надстройки на базе Spinlock же можно использовать только при полной уверенности, что планировщик не прервёт их выполнение. Применяемые в тестах блокировки на основе spinlock реализованы через самодельную обвязку, работающую в пространстве пользователя. Планировщик задач может в любой случайный момент забрать управление во время выполнения этой обвязки и переключиться на выполнение другой задачи. Так как измерение производительности выполняется на основании абсолютных значений таймера, определённые в тестах задержки охватывают не только задержки в обработчике блокировки, но и код, который был выполнен в другом контексте, т.е. измеряют не только то, что пытался измерить автор теста, но и "шум" от других вычислений в системе.
Автор теста попытался возразить Линусу, указав на то, что применение собственных систем блокировки на базе spinlock часто используется на практике в играх, так как при использовании более простых планировщиков, чем в Linux, тесты показывают более высокую производительность. Линус возразил, что планировщик Linux является универсальным, оттачивался десятилетиями и оптимизирован не только для рабочего стола и игр, но и для других видов нагрузки, например, для серверных систем, поэтому учитывает множество нюансов при планировании выполнения задач.
Добавление специфичных оптимизаций, которые позволят снизить задержки в играх Google Stadia, могут повысить отзывчивость в конкретном случае, но скорее всего приведут к снижению эффективности планировщика в целом. Например, планировщик Windows ведёт себя лучше в обсуждаемых тестах, так как он значительно проще планировщика Linux и оптимизирован в основном для задач, специфичных для рабочего стола.
Источники
править
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.