Commit Graph

70 Commits

Author SHA1 Message Date
Josef Grieb
0160284301 Add abstract stream channel
Motivation:

to shutdown child channels we should create new abstact client class instead of using AbstractIOUringChannel

Modifications:

-Added new child channel abstract class
-Add shutdown methods to close a channel when the connection is lost

Result:

the channels can be closed when the connection is lost
2020-08-24 11:12:40 +02:00
Josef Grieb
96e0e5cc91 Release timeout memory for scheduled tasks
Motivation:

fix memory leak

Modification:

added a new release method and it will be called in ring buffer

Result:

to avoid memory leaks
2020-08-24 11:12:40 +02:00
Josef Grieb
8d464d5ab4 Include LinuxSocket TCP options
Motivation:

some tcp options (like TcpFastopen or TcpFastopenConnect etc.) are required for testsuite tests

Modification:

-copied the class LinuxSocket from epoll and  JNI to load this module in io_uring jni
-some configurations have been adjusted

Result:

more tcp options are available
2020-08-24 11:12:40 +02:00
Josef Grieb
1117c6fdb8 io_uring availability check
Motivation:

availability io_uring check for each test case

Modification:

added ioUringExit method to munmap the shared memory and close ring file descriptor which is required for the availability check

Result:

it's able to integrate testsuite tests
2020-08-20 12:27:10 +02:00
Josef Grieb
bf6a14effb Removed poll before the read event
Motivation:

no need to poll in front of the read operation since IORING_FEAT_FAST_POLL polls anyway

Modification:

removed poll before the read event

Result:

netty echo prototype works on a custom kernel https://github.com/1Jo1/linux/tree/io_uring_off7(merge linux-block/io_uring-5.9 branch into 5.8.0) and Linux 5.9-rc1 should work as well(not tested yet)
2020-08-18 06:45:42 +02:00
Josef Grieb
71c33eaec3 Add Poll before the accept/read operation
Motivation:

The problem is that if io_uring accept/read non blocking doesnt return -EAGAIN for non-blocking sockets
in general, then it removes a way for the application to tell if
there's ever any data there.
There is a fix in Kernel 5.8 https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?h=v5.8&id=e697deed834de15d2322d0619d51893022c90ea2 which means we need to add poll before the accept/read event(poll<link>read/accept) to fix in netty as well

Modification:

-add poll before the accept/read event with this flag IOSQE_IO_LINK

Result:

netty prototype works on Kernel 5.8
2020-08-10 09:53:38 +02:00
Josef Grieb
bc9ada411b Add wakeup and timeout
Motivation:

wake up the blocking call io_uring which is called when a new task is added(not from the eventloop thread)

Modification:

-Added timeout operation for scheduled task(not tested yet)
-Added Poll operation
-Added two tests to reproduce the polling signal issue

Result:
io_uring_enter doesnt get any polling signal from eventFdWrite if both functions are executed in different threads
2020-08-04 19:56:18 +02:00
Josef Grieb
d3c28143a8 Cleanup PR
Motivation:

unnecessary use of LinuxSocket class, missing CRLF etc.

Modification:

-Add CRLF
-remove IOUringChannelConfig and LinuxSocket class

Result:
less code and cleanup
2020-07-28 22:52:32 +02:00
Josef Grieb
a29b8c5cb3 write all messages
Motivation:

write until there is nothing left in the buffer

Modification:

eventloop executes the next write event

Result:
write all messages
2020-07-28 21:36:11 +02:00
Josef Grieb
df84759128 fix bind address exception
Motivation:

if you run a io_uring example two times in a row, you gonna get bind address exception

Modification:
-set SO_REUSEADDR as default

Result:
fixed bug
2020-07-28 21:19:46 +02:00
Josef Grieb
97b4537ab1 Use socket non-blocking instead of blocking
Motivation:

non-blocking sockets are more efficient

Modification:
-use socket non blocking
-some PR cleanups

Result:
probably better performance
2020-07-27 20:41:26 +02:00
Josef Grieb
eb1c8e4991 Cleanup
Motivation:

fix checkstyle errors and many classes are unnecessarily public

Modification:
-fixed maven checkstyle errors
-using package-private and final classes

Result:
better code quality
2020-07-22 14:01:48 +02:00
Josef Grieb
8c9b874a2d First running prototype 🎉
Motivation:
missing eventLoop completionQueue logic

Modification:
-mapping between channel and eventloop
-added new prototype blocking example

Result:
First running prototype
2020-07-20 23:49:00 +02:00
Josef Grieb
339d5f1565 Added native unix common module
Motivation:

unix common tools native C modules were not loaded in netty_io_uring_native.c

```
Caused by: java.lang.UnsatisfiedLinkError: io.netty.channel.unix.LimitsStaticallyReferencedJniMethods.udsSunPathSize()I
        at io.netty.channel.unix.LimitsStaticallyReferencedJniMethods.udsSunPathSize(Native Method)
        at io.netty.channel.unix.Socket.<clinit>(Socket.java:49)
        at io.netty.channel.uring.IOUringServerSocketChannel.<init>(IOUringServerSocketChannel.java:29)
        ... 11 more

```

Modification:

Added unix common tools native in netty_io_uring_native.c and small cleanup

Result:

fix UnsatisfiedLinkError exception
2020-07-16 03:03:36 +02:00
Josef Grieb
247e14a2b1 Add channel configs
Motivation:
-missing channel configs
-we dont store byteBuf and channel for the read operation to execute channel.fireChannelReadComplete

Modifications:
-add channels configs
-new Event properties for the processing completionQueue

Result:
with these changes it will be much easier to implement the eventloop
2020-07-15 17:51:51 +02:00
Josef Grieb
8a56cd1959 Read Event test and documentation
Motivation:

missing documentation and read event test

Modifications:

add documentation and read event test

Result:

better documentation and tests
2020-07-10 09:24:49 +02:00
Josef Grieb
692238f6da Move ring buffer logic to Java
Motivation:
JNI ring buffer implementation is inflexible and not really efficient

Modifications:

-RingBuffer instance is created in JNI which contains io_uring ring buffer information
-move the JNI ring buffer logic to Java
-added Todos
-using unsafe memory barriers loadFence and storeFence
-revert epoll file

Result:

this java ring buffer implementation is more flexible and efficient
2020-07-07 13:06:45 +02:00
Josef Grieb
962a3433ca Added io_uring JNI
Motivation:

prototype is not buildable and JNI io_uring implementation is missing

Modifications:

-added io_uring implementation(source from https://github.com/axboe/liburing)
-eventloop stores netty io_uring pointer which is used for two ring buffers to execute events like read and write operations in JNI
-memory barriers already included in JNI(will be changed in the future)
-pom file adopted from native epoll

Result:

prototype can finally be built
2020-06-28 15:25:19 +02:00
Josef Grieb
187ec6dffd Cleanup
Motivation:
licenses and netty dependencies are missing

Modification:
added licenses and netty dependencies

Result:
netty io_uring is buidable
2020-06-26 09:18:36 +02:00
Josef Grieb
07e2e23a7d Draft - Add native io_uring transport
Motivation:
to get a better feeling of how it could be implemented

Result:
- cant be build yet -> still work in progress
2020-06-19 13:01:33 +02:00