Ixeris
Обзор
Ixeris — это мод, который оптимизирует производительность клиента, вынося опрос событий в отдельный поток, освобождая больше времени CPU для потока рендеринга.
Вы могли заметить видимое падение FPS при перемещении мыши. Часть падения FPS связана с тем, что игра действительно выполняет дополнительные задачи при повороте камеры, например, вычисление видимости чанков. Однако из-за неэффективности в нативном коде, который опрашивает события, и накладных расходов JNI upcall, часть времени CPU, которая могла бы быть использована для рендеринга, без необходимости тратится на вызов glfwPollEvents(). Это наиболее заметно в Windows, особенно когда ваша мышь имеет высокую частоту опроса.
Этот мод решает эту проблему, вызывая glfwPollEvents() в main thread, что означает, что опрос событий больше не блокирует render thread. Таким образом, поток рендеринга может продолжать работать, пока GLFW получает события от операционной системы. Улучшения FPS в состоянии покоя маловероятны, но у вас будет гораздо более плавная частота кадров при повороте камеры.
Бенчмарки
Эти тесты проведены после полной загрузки мира и стабилизации частоты кадров. Мышь имеет частоту опроса 1000Hz. Клавиши F3+Esc нажаты, чтобы убедиться, что изменение частоты кадров при перемещении мыши является результатом опроса событий, а не других вычислений.
| FPS в покое | Без Ixeris | С Ixeris | Улучшение | |
|---|---|---|---|---|
| Windows | 233 FPS | 133 FPS | 165 FPS | 1.24x |
| Linux (X11) | 358 FPS | 320 FPS | 355 FPS | 1.11x |
| Linux (Wayland) | 364 FPS | 289 FPS | 298 FPS | 1.03x |
Технические детали
Потокобезопасность
В текущем состоянии Ixeris не должен нарушать потокобезопасность. Колбэки, зарегистрированные с помощью glfwSet*Callback, выполняются в потоке рендеринга. Вызовы функций GLFW, которые требуют вызова в основном потоке, если они сделаны в других потоках, перенаправляются в основной поток. Эти вызовы могут немедленно возвращаться, если они могут быть безопасно отложены, или иначе могут блокировать вызывающий поток до завершения вызова.
Начиная с версии 3.1.0, требования потокобезопасности в документации GLFW строго соблюдаются.
Глоссарий
- Main thread — это поток, в котором запускается игра. Большинство функций GLFW должны вызываться в этом потоке, и он отвечает за опрос событий.
- Render thread выполняет всё, что обычно делает игра, за исключением опроса событий.
Эти два термина являются синонимами в ванильной Minecraft.
