The new io_uring interface added to the Linux Kernel 5.1 is a high I/O performance scalable interface for fully asynchronous Linux syscalls
- x86-64 / aarch64 processor
- at least 5.9
- to run the tests, you have to increase memlock(default 64K)
See our wiki page.
To include the dependency you need to ensure you also specify the right classifier. At the moment we only support linux x86_64 and aarch_64 but this may change.
As an example this is how you would include the dependency in maven for x86_64:
<dependency>
<groupId>io.netty.incubator</groupId>
<artifactId>netty-incubator-transport-native-io_uring</artifactId>
<version>0.0.9.Final</version>
<classifier>linux-x86_64</classifier>
</dependency>
And in gradle:
dependencies {
implementation 'io.netty.incubator:netty-incubator-transport-native-io_uring:0.0.5.Final:linux-x86_64'
}
I tried to use io_uring but got java.lang.RuntimeException: failed to create io_uring ring fd Cannot allocate memory
When you tried to use io_uring but saw an exception that looked like this please try to encreate the memlock limit for the user that tries to use io_uring:
Exception in thread "main" java.lang.UnsatisfiedLinkError: failed to load the required native library
at io.netty.incubator.channel.uring.IOUring.ensureAvailability(IOUring.java:63)
...
...
Caused by: java.lang.RuntimeException: failed to create io_uring ring fd Cannot allocate memory
at io.netty.incubator.channel.uring.Native.ioUringSetup(Native Method)
at io.netty.incubator.channel.uring.Native.createRingBuffer(Native.java:141)
at io.netty.incubator.channel.uring.Native.createRingBuffer(Native.java:174)
at io.netty.incubator.channel.uring.IOUring.<clinit>(IOUring.java:36)
... 17 more
You can check your current memlock settings by
$ ulimit -l
65536