Ixeris
Буферизованный сырой ввод и многопоточный опрос событий
- Загрузчики
- FabricNeoForgeForgeQuilt
- Скачиваний на Modrinth
- 14,6 млн
- Подписчиков на Modrinth
- 565
- версий
- 1 039
- Обновлён
- 19 октября 202619 окт.
- Опубликован
- в 2025
Коротко о моде
Ставится только в игру; на сервер ставить не нужно
Ixeris
Обзор
Ixeris — это мод, который оптимизирует опрос событий для повышения производительности клиента.
Вы могли заметить заметное падение FPS при движении мыши. Часть падения FPS связана с тем, что при повороте камеры у игры появляются дополнительные задачи, например расчёт видимости чанков. Однако из-за неэффективности нативного кода, который опрашивает события, и накладных расходов на вызовы JNI часть процессорного времени, которое можно было бы использовать для рендеринга, тратится впустую на опрос событий. Это наиболее заметно на Windows, особенно если у вашей мыши высокая частота опроса.
Ixeris решает проблему в основном двумя способами:
- Многопоточный опрос событий. Вместо выполнения рендеринга и опроса событий в одном потоке Ixeris выполняет опрос событий в главном потоке и выносит рендеринг в отдельный поток рендеринга.
- Буферизованный Raw Input (только Windows). Переключает метод опроса ввода с неэффективного
GetRawInputData(один вызов на каждое событие ввода) наGetRawInputBuffer, который позволяет читать сообщения raw input пакетами (один вызов для всех событий). Кроме того, выполнение этой работы в Java-коде позволило нам устранить накладные расходы на вызовы JNI.
Бенчмарки
Эти тесты выполнены после полной загрузки мира и стабилизации частоты кадров.
Тест 1: В игре
Этот тест сравнивает производительность, когда мышь захвачена, то есть курсор невидим. Тест проводится в суперплоском мире без сущностей.
Тест выполнен на Windows, где Ixeris по умолчанию использует буферизованный raw input для повышения производительности. Столбец «Ixeris, Non-buffered» показывает FPS с отключённой этой опцией.
| Частота опроса | Без Ixeris | Ixeris, Non-buffered | Ixeris, Buffered |
|---|---|---|---|
| 8000 Hz | 12 FPS | 83 FPS (6.9x) | 121 FPS (10.1x) |
| 2000 Hz | 76 FPS | 114 FPS (1.50x) | 135 FPS (1.78x) |
| 500 Hz | 134 FPS | 145 FPS (1.08x) | 151 FPS (1.13x) |
Тест 2: В меню
Этот тест сравнивает производительность, когда мышь не захвачена, то есть курсор видим, как на экране паузы F3+Esc. В этом случае raw input никогда не используется, так как игре нужно знать фактическую позицию курсора, а не сырое относительное перемещение. Частота опроса — 1000Hz.
Столбец «Idle FPS» показывает FPS, когда мышь не движется, а следующие два столбца показывают FPS при быстром движении мыши по окну игры — без Ixeris и с Ixeris соответственно. Учтите, что этот тест был выполнен на начальном релизе Ixeris, и с тех пор было сделано много улучшений.
| Idle 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 строго соблюдаются.
Кэширование состояния GLFW
Большинство функций GLFW должны вызываться из главного потока. Однако многие моды могут вызывать их из потока рендеринга. Чтобы избежать снижения производительности из-за межпоточного взаимодействия, Ixeris кэширует часто используемые состояния GLFW для быстрого доступа из любого потока без необходимости перенаправлять вызов в главный поток. Кэши безопасны и не вносят дополнительных задержек.
Улучшенный ограничитель FPS
Ванильный ограничитель FPS (до 26.1) несовершенен: он использует glfwWaitEventsTimeout для ожидания. Однако эту функцию нельзя вызывать из потока рендера, поэтому с Ixeris она работает неоптимально.
Ixeris переписывает ограничитель FPS гибридным способом: точно засыпает и начинает активное ожидание, когда время ожидания очень мало.
Глоссарий
- Главный поток — это поток, в котором запускается игра. Большинство функций GLFW должны вызываться в этом потоке, и он отвечает за опрос событий.
- Поток рендера делает всё, что обычно делает игра, кроме опроса событий.
В ванильном Minecraft эти два термина синонимичны.
Частые вопросы
Как установить Ixeris?
Установите Fabric под свою версию Minecraft, скачайте Ixeris под ту же версию и загрузчик, положите файл в папку mods и запустите игру с профилем загрузчика.
Для каких версий Minecraft есть Ixeris?
У Ixeris есть сборки для Minecraft 1.16.5, 1.18.2, 1.19.2, 1.19.4–26.3.
Нужен ли Ixeris на сервере?
Ставится только в игру; на сервер ставить не нужно