High IO-Wait by Geyser Standalone
Describe the bug
Hello I'm running Geyser-Standalone, and as soon a a few players are online we're seeing high IOWait times with in Prometheus Node Exporter.
Also I looked with htop, well there the Cores have almost no usage, but the process it self shows also high CPU usage.
Here is also a Spark Profil, I do not rly know how to read those, if there're not from Bukkit.
https://spark.lucko.me/yMxnwNbxzD Edit: New Instance https://spark.lucko.me/NaF3BYcM6v
To Reproduce
Well we're starting the server, and after a while, Promethouse NodeExporter Shows 70-90% IOWait usage.
Expected behaviour
Well I would expect almost no IOWait times.
Screenshots / Videos
Screenshot of CPU usage from Node Exporter
Screenshot of Geyser htop processes.
Server Version and Plugins
Does not apply we're running standalone
Extensions installed:
- Spark-Geyser
Geyser Dump
https://dump.geysermc.org/hqThbdIPXVvSG6SBW905mVrZ1ctIjujH
Geyser Version
[07:52:53 INFO] This server is running Geyser version 2.4.3-b679 (git-master-7af5bac) (Java: 1.21, Bedrock: 1.20.80/1.20.81 - 1.21.30)
Minecraft: Bedrock Edition Device/Version
Not applicable
Additional Context
We're currently running on an Advance-3 Gen 2 from OVH. HW Specs:
CPU
- AMD Ryzen 9 5900X - 12c/24t - 3.7 GHz/4.8 GHz
RAM
- 128 GB ECC 2666 MHz
Storage:
- 2×960 GB SSD NVMe
- Soft RAID
We're running the latest geyser-version, it will get updated every day at 4am.
We're running ur geyser standalone and has an resourcepack. Everything else is basically vanilla.
And just added geyser-spark to it.
Also it does not seam to be disk write / read opterations, since they are mostly lower then 500kB/s
the spark is invalid
Here a new Sparkprofile, this time as an export. TIZJ2TNISo.zip
Maybe try adding -Dio.netty.transport.noNative=true temporarily and see if that solves the CPU load issues. This may be an IO_Uring issue.
@Camotoy That indeed helps...
All right. Three options I can think of:
- You can recompile Geyser-Standalone without the Netty IO_Uring dependency (probably a more temporary thing).
- Try updating your kernel version.
- Try updating the IO_Uring dependency, and if it fixes your issue, you can PR our way.
https://github.com/GeyserMC/Geyser/blob/7af5bac9057a65c299d8328d9b5711df42b84be1/core/src/main/java/org/geysermc/geyser/network/netty/GeyserServer.java#L435 io_uring should currently already be opt-in
@Camotoy I updated kernel from 5.15 to 6.8.0-45-generic, but the issue still persists.
Does geyser require the packege liburing2 to be installed?
(Chris's comment about IO_Uring is only applicable to the Bedrock connection side and doesn't affect if the Java connections use it)
I don't see anything that says Netty's dependency requires that.
io_uring from netty/incubator is no longer bundled with Geyser-Standalone - once we re-include io_uring transport, it'll be properly opt-in via a system property (for both the bedrock and java end). Thanks for reporting the issue!