Ixeris
Ringkasan
Ixeris adalah mod yang mengoptimalkan polling event untuk meningkatkan performa klien.
Anda mungkin pernah menyadari adanya penurunan FPS yang terlihat saat menggerakkan mouse. Sebagian dari penurunan FPS tersebut terjadi karena game memang memiliki pekerjaan tambahan saat Anda memutar kamera, seperti menghitung visibilitas chunk. Namun, karena ketidakefisienan pada kode native yang melakukan polling event dan overhead upcall JNI, sebagian waktu CPU yang seharusnya dapat dimanfaatkan untuk rendering malah terbuang secara tidak perlu untuk polling event. Hal ini paling terasa di Windows, terutama jika mouse Anda memiliki polling rate yang tinggi.
Ixeris mengatasi masalah ini terutama melalui dua langkah:
- Threaded Event Polling. Alih-alih melakukan rendering dan polling event pada thread yang sama, Ixeris melakukan polling event pada main thread dan memindahkan rendering ke render thread terpisah.
- Buffered Raw Input (khusus Windows). Mengubah metode yang digunakan untuk polling input dari GetRawInputData yang tidak efisien (satu panggilan untuk setiap event input) menjadi GetRawInputBuffer yang memungkinkan pembacaan pesan raw input secara batch (satu panggilan untuk semua event). Selain itu, melakukan pekerjaan ini dalam kode Java memungkinkan kami menghilangkan overhead upcall JNI.
Benchmark
Pengujian ini dilakukan setelah dunia sepenuhnya dimuat dan framerate telah stabil.
Tes 1: Di Dalam Game
Tes ini membandingkan performa saat mouse di-grab, yaitu kursor tidak terlihat. Tes ini dilakukan di dunia superflat tanpa entitas.
Tes ini dilakukan di Windows, di mana Ixeris menggunakan buffered raw input secara default untuk meningkatkan performa. Kolom "Ixeris, Non-buffered" menunjukkan FPS dengan opsi tersebut dinonaktifkan.
Polling Rate - Tanpa 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)
Tes 2: Di Menu
Tes ini membandingkan performa saat mouse tidak di-grab, yaitu kursor terlihat, seperti pada layar pause F3+Esc. Dalam kasus ini, raw input tidak pernah digunakan karena game perlu mengetahui posisi kursor yang sebenarnya, bukan pergerakan relatif mentah. Polling rate-nya adalah 1000Hz.
Kolom "Idle FPS" menunjukkan FPS saat tidak menggerakkan mouse, dan dua kolom berikutnya menunjukkan FPS saat menggerakkan mouse dengan cepat di atas jendela game, masing-masing tanpa Ixeris dan dengan Ixeris. Perlu dicatat bahwa tes ini dilakukan pada rilis awal Ixeris, dan banyak peningkatan telah dilakukan sejak saat itu.
Idle FPS - Tanpa Ixeris - Dengan 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)
Detail Teknis
Keamanan Thread
Dalam kondisi saat ini, Ixeris seharusnya tidak merusak keamanan thread. Callback yang didaftarkan dengan glfwSetCallback dieksekusi pada render thread. Panggilan ke fungsi GLFW yang diharuskan dipanggil pada main thread, jika dilakukan pada thread lain, akan dikirim ke main thread. Panggilan ini dapat langsung kembali jika dapat ditunda dengan aman, atau jika tidak dapat memblokir pemanggil hingga panggilan selesai.
Sejak versi 3.1.0, persyaratan keamanan thread dalam dokumentasi GLFW dipatuhi secara ketat.
Caching State GLFW
Sebagian besar fungsi GLFW diharuskan dipanggil dari main thread. Namun, banyak mod yang mungkin memanggilnya dari render thread. Untuk menghindari penurunan performa yang disebabkan oleh komunikasi antar-thread, Ixeris menyimpan cache state GLFW yang sering digunakan untuk akses cepat dari thread mana pun, tanpa harus mengarahkan panggilan ke main thread. Cache tersebut aman dan tidak menimbulkan lag tambahan.
FPS Limiter yang Ditingkatkan
FPS limiter vanilla (sebelum 26.1) memiliki kekurangan, yaitu menggunakan glfwWaitEventsTimeout untuk tidur. Fungsi ini, bagaimanapun, tidak dapat dipanggil dari render thread dan dengan demikian tidak bekerja secara optimal dengan Ixeris.
Ixeris menulis ulang FPS limiter dengan cara hybrid, tidur secara presisi dan memulai spin waiting saat waktu tunggu sangat rendah.
Glosarium
- Main thread adalah thread tempat game dijalankan. Sebagian besar fungsi GLFW diharuskan dipanggil pada thread ini, dan thread ini bertanggung jawab untuk polling event.
- Render thread melakukan semua yang biasanya dilakukan game, kecuali polling event.
Kedua istilah ini sinonim dalam Minecraft vanilla.
Cara memasang Ixeris
With Millida Launcher
Install Millida Launcher
The launcher is free: download it at millida.net/launcher and sign in with any nickname.
Click “Install” on this page
The launcher opens and installs the mod for Minecraft 1.16.5–26.3 on Fabric, Forge, NeoForge or Quilt automatically.
Launch the game
A profile with it appears in the launcher: click “Play”.
Manually
Install Fabric, Forge, NeoForge or Quilt
The loader must match the game version of the mod file, for example Minecraft 26.3. After installing it, a separate profile appears in your launcher.
Download the file for your version
In the version list above, pick the file Ixeris-4.6.10+26.3-neoforge.jar (677 KB) for your game version and loader.
Put it in the mods folder
The folder is inside .minecraft (Windows: %appdata%\.minecraft\mods). If it does not exist, create it.
Launch the loader profile
Open “Mods” in the main menu: Ixeris should be in the list.
Ixeris works on the player’s side only: there is no need to install it on a server.
Versi
Dengan dependensi
| Minecraft | Loader | File | Tanggal | Tindakan |
|---|---|---|---|---|
| 26.3 | NeoForge | 26.3677 KB | ||
| 26.3 | Fabric, Quilt | 26.3751 KB 6 | ||
| 26.2 | NeoForge | 26.2680 KB | ||
| 26.2 | Fabric, Quilt | 26.2754 KB 5 | ||
| 26.1.2 | NeoForge | 26.1.2679 KB | ||
| 26.1.2 | Fabric, Quilt | 26.1.2753 KB | ||
| 1.21.11 | Forge | 1.21.111.5 MB 2 | ||
| 1.21.11 | NeoForge | 1.21.11680 KB |
Ulasan
Jadilah yang pertama menilai Ixeris


