Valve улучшает стабильность Steam на Linux: подробности работы команды

2024-11-12 613 комментарии
Команда Valve рассказала о внесённых изменениях, которые повысили стабильность Steam на Linux. Реализация нового подхода к работе с переменными окружения сделала клиент более устойчивым

Valve раскрыла детали работы по повышению стабильности Steam на Linux

Недавно была выпущена встроенная функция записи игр в Steam, став частью большого обновления стабильной версии клиента Steam, включающего исправления "различных распространённых сбоев" на Linux. Теперь мы узнали больше о том, что происходит за кулисами.

В блоге разработчика Тимоте Бессета, активно работающего в Valve, упоминается, что важное изменение, касающееся функций setenv и getenv, значительно повлияло на стабильность клиента Steam на Linux.

Немного контекста:

  • setenv: изменение или добавление переменной окружения.
  • getenv: получение значения переменной окружения.

По словам Бессета, один из его коллег назвал setenv "худшим API для Linux", хотя это распространённый API, доступный на всех платформах, — "сложно было поверить, что всё настолько плохо". Однако уже было известно, что на Linux "setenv и getenv небезопасны для использования в многопоточных средах".

Скриншот клиента Steam

Частью проблемы является разнообразие Linux-дистрибутивов, с различными оконными менеджерами, окружениями рабочего стола, версиями драйверов и пользовательскими настройками. В итоге отчёты о сбоях становятся "очень шумными". Ещё одна сложность заключается в том, что setenv может вызывать сбой в многопоточной программе, и помимо этого, "другие потоки обычно заканчиваются ошибкой SIGABRT вскоре после вызова getenv", а трассировки сбоев оказываются "хаотичными и не привязанными к одной причине".

Что же они сделали? Вот их подход:

  • Убрали большинство вызовов setenv. Они использовались в основном при запуске процессов, и рефакторинг с переходом на execve для передачи подготовленной среды улучшил ситуацию.
  • Сократили зависимость от getenv, в основном за счёт кэширования вызовов. В системных библиотеках (x11, xcb, dbus и др.) использование остаётся высоким, но они продолжают работать над его уменьшением.
  • Для оставшихся случаев использования setenv, которые сложно было рефакторить, они ввели "менеджер окружения", который выделяет достаточно большие буферы значений на старте для фиксированных переменных окружения, ещё до начала работы потоков.

Эту запись в блоге стоит прочитать, если вам интересны закулисные подробности, ведь разработка для Linux порой напоминает минное поле.

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

Чем стабильнее станет клиент Steam, тем лучше будет опыт для новых пользователей Linux, а также для владельцев Steam Deck, так как SteamOS базируется на Linux. Приятно видеть, как разработчики Valve постоянно стремятся улучшать продукт.

© . По материалам Gamingonlinux
Комментарии и отзывы

Нашли ошибку?

Новое на сайте