netty / netty-incubator-transport-io_uring

Apache License 2.0
194 stars 39 forks source link

Build project

Netty io_uring

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

Requirements:

See our wiki page.

How to include the dependency

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.21.Final</version>
    <classifier>linux-x86_64</classifier>
</dependency>

And in gradle:

dependencies {
    implementation 'io.netty.incubator:netty-incubator-transport-native-io_uring:0.0.21.Final:linux-x86_64'
}

FAQ

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