uringmachine 0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.github/dependabot.yml +12 -0
- data/.github/workflows/test.yml +35 -0
- data/.gitignore +59 -0
- data/.gitmodules +3 -0
- data/CHANGELOG.md +7 -0
- data/Gemfile +3 -0
- data/LICENSE +21 -0
- data/README.md +11 -0
- data/Rakefile +39 -0
- data/TODO.md +0 -0
- data/examples/echo_server.rb +52 -0
- data/examples/event_loop.rb +69 -0
- data/examples/fibers.rb +105 -0
- data/examples/http_server.rb +56 -0
- data/examples/http_server_multishot.rb +57 -0
- data/examples/http_server_simpler.rb +34 -0
- data/ext/um/extconf.rb +71 -0
- data/ext/um/iou.h +101 -0
- data/ext/um/op_ctx.c +138 -0
- data/ext/um/ring.c +755 -0
- data/ext/um/um.c +267 -0
- data/ext/um/um.h +97 -0
- data/ext/um/um_class.c +175 -0
- data/ext/um/um_ext.c +11 -0
- data/ext/um/um_op.c +87 -0
- data/ext/um/um_utils.c +23 -0
- data/lib/uringmachine/version.rb +3 -0
- data/lib/uringmachine.rb +8 -0
- data/test/helper.rb +70 -0
- data/test/test_iou.rb +876 -0
- data/test/test_um.rb +168 -0
- data/uringmachine.gemspec +27 -0
- data/vendor/liburing/.github/actions/codespell/stopwords +7 -0
- data/vendor/liburing/.github/pull_request_template.md +86 -0
- data/vendor/liburing/.github/workflows/build.yml +137 -0
- data/vendor/liburing/.github/workflows/codespell.yml +25 -0
- data/vendor/liburing/.github/workflows/shellcheck.yml +20 -0
- data/vendor/liburing/.gitignore +41 -0
- data/vendor/liburing/CHANGELOG +111 -0
- data/vendor/liburing/CITATION.cff +11 -0
- data/vendor/liburing/COPYING +502 -0
- data/vendor/liburing/COPYING.GPL +339 -0
- data/vendor/liburing/LICENSE +20 -0
- data/vendor/liburing/Makefile +96 -0
- data/vendor/liburing/Makefile.common +7 -0
- data/vendor/liburing/Makefile.quiet +11 -0
- data/vendor/liburing/README +106 -0
- data/vendor/liburing/SECURITY.md +6 -0
- data/vendor/liburing/configure +624 -0
- data/vendor/liburing/debian/README.Debian +7 -0
- data/vendor/liburing/debian/changelog +38 -0
- data/vendor/liburing/debian/control +39 -0
- data/vendor/liburing/debian/copyright +49 -0
- data/vendor/liburing/debian/liburing-dev.install +4 -0
- data/vendor/liburing/debian/liburing-dev.manpages +5 -0
- data/vendor/liburing/debian/liburing2.install +1 -0
- data/vendor/liburing/debian/liburing2.symbols +56 -0
- data/vendor/liburing/debian/patches/series +1 -0
- data/vendor/liburing/debian/rules +29 -0
- data/vendor/liburing/debian/source/format +1 -0
- data/vendor/liburing/debian/source/local-options +2 -0
- data/vendor/liburing/debian/source/options +1 -0
- data/vendor/liburing/debian/watch +3 -0
- data/vendor/liburing/examples/Makefile +53 -0
- data/vendor/liburing/examples/helpers.c +62 -0
- data/vendor/liburing/examples/helpers.h +7 -0
- data/vendor/liburing/examples/io_uring-close-test.c +123 -0
- data/vendor/liburing/examples/io_uring-cp.c +282 -0
- data/vendor/liburing/examples/io_uring-test.c +112 -0
- data/vendor/liburing/examples/io_uring-udp.c +403 -0
- data/vendor/liburing/examples/link-cp.c +193 -0
- data/vendor/liburing/examples/napi-busy-poll-client.c +509 -0
- data/vendor/liburing/examples/napi-busy-poll-server.c +450 -0
- data/vendor/liburing/examples/poll-bench.c +101 -0
- data/vendor/liburing/examples/proxy.c +2461 -0
- data/vendor/liburing/examples/proxy.h +102 -0
- data/vendor/liburing/examples/rsrc-update-bench.c +100 -0
- data/vendor/liburing/examples/send-zerocopy.c +658 -0
- data/vendor/liburing/examples/ucontext-cp.c +258 -0
- data/vendor/liburing/liburing-ffi.pc.in +12 -0
- data/vendor/liburing/liburing.pc.in +12 -0
- data/vendor/liburing/liburing.spec +66 -0
- data/vendor/liburing/make-debs.sh +55 -0
- data/vendor/liburing/src/Makefile +129 -0
- data/vendor/liburing/src/arch/aarch64/lib.h +47 -0
- data/vendor/liburing/src/arch/aarch64/syscall.h +91 -0
- data/vendor/liburing/src/arch/generic/lib.h +17 -0
- data/vendor/liburing/src/arch/generic/syscall.h +100 -0
- data/vendor/liburing/src/arch/riscv64/lib.h +48 -0
- data/vendor/liburing/src/arch/riscv64/syscall.h +100 -0
- data/vendor/liburing/src/arch/syscall-defs.h +94 -0
- data/vendor/liburing/src/arch/x86/lib.h +11 -0
- data/vendor/liburing/src/arch/x86/syscall.h +296 -0
- data/vendor/liburing/src/ffi.c +15 -0
- data/vendor/liburing/src/include/liburing/barrier.h +81 -0
- data/vendor/liburing/src/include/liburing/io_uring.h +818 -0
- data/vendor/liburing/src/include/liburing.h +1602 -0
- data/vendor/liburing/src/int_flags.h +11 -0
- data/vendor/liburing/src/lib.h +52 -0
- data/vendor/liburing/src/liburing-ffi.map +211 -0
- data/vendor/liburing/src/liburing.map +104 -0
- data/vendor/liburing/src/nolibc.c +55 -0
- data/vendor/liburing/src/queue.c +468 -0
- data/vendor/liburing/src/register.c +374 -0
- data/vendor/liburing/src/setup.c +689 -0
- data/vendor/liburing/src/setup.h +9 -0
- data/vendor/liburing/src/syscall.c +29 -0
- data/vendor/liburing/src/syscall.h +53 -0
- data/vendor/liburing/src/version.c +21 -0
- data/vendor/liburing/test/232c93d07b74.c +305 -0
- data/vendor/liburing/test/35fa71a030ca.c +329 -0
- data/vendor/liburing/test/500f9fbadef8.c +91 -0
- data/vendor/liburing/test/7ad0e4b2f83c.c +94 -0
- data/vendor/liburing/test/8a9973408177.c +107 -0
- data/vendor/liburing/test/917257daa0fe.c +54 -0
- data/vendor/liburing/test/Makefile +297 -0
- data/vendor/liburing/test/a0908ae19763.c +59 -0
- data/vendor/liburing/test/a4c0b3decb33.c +181 -0
- data/vendor/liburing/test/accept-link.c +255 -0
- data/vendor/liburing/test/accept-non-empty.c +256 -0
- data/vendor/liburing/test/accept-reuse.c +163 -0
- data/vendor/liburing/test/accept-test.c +83 -0
- data/vendor/liburing/test/accept.c +919 -0
- data/vendor/liburing/test/across-fork.c +284 -0
- data/vendor/liburing/test/b19062a56726.c +54 -0
- data/vendor/liburing/test/b5837bd5311d.c +78 -0
- data/vendor/liburing/test/bind-listen.c +408 -0
- data/vendor/liburing/test/buf-ring-nommap.c +123 -0
- data/vendor/liburing/test/buf-ring-put.c +83 -0
- data/vendor/liburing/test/buf-ring.c +473 -0
- data/vendor/liburing/test/ce593a6c480a.c +139 -0
- data/vendor/liburing/test/close-opath.c +123 -0
- data/vendor/liburing/test/config +14 -0
- data/vendor/liburing/test/connect-rep.c +204 -0
- data/vendor/liburing/test/connect.c +442 -0
- data/vendor/liburing/test/coredump.c +60 -0
- data/vendor/liburing/test/cq-full.c +97 -0
- data/vendor/liburing/test/cq-overflow.c +530 -0
- data/vendor/liburing/test/cq-peek-batch.c +103 -0
- data/vendor/liburing/test/cq-ready.c +95 -0
- data/vendor/liburing/test/cq-size.c +65 -0
- data/vendor/liburing/test/d4ae271dfaae.c +96 -0
- data/vendor/liburing/test/d77a67ed5f27.c +65 -0
- data/vendor/liburing/test/defer-taskrun.c +391 -0
- data/vendor/liburing/test/defer-tw-timeout.c +173 -0
- data/vendor/liburing/test/defer.c +319 -0
- data/vendor/liburing/test/double-poll-crash.c +195 -0
- data/vendor/liburing/test/drop-submit.c +94 -0
- data/vendor/liburing/test/eeed8b54e0df.c +120 -0
- data/vendor/liburing/test/empty-eownerdead.c +45 -0
- data/vendor/liburing/test/eploop.c +74 -0
- data/vendor/liburing/test/eventfd-disable.c +179 -0
- data/vendor/liburing/test/eventfd-reg.c +77 -0
- data/vendor/liburing/test/eventfd-ring.c +98 -0
- data/vendor/liburing/test/eventfd.c +113 -0
- data/vendor/liburing/test/evloop.c +73 -0
- data/vendor/liburing/test/exec-target.c +6 -0
- data/vendor/liburing/test/exit-no-cleanup.c +117 -0
- data/vendor/liburing/test/fadvise.c +202 -0
- data/vendor/liburing/test/fallocate.c +265 -0
- data/vendor/liburing/test/fc2a85cb02ef.c +132 -0
- data/vendor/liburing/test/fd-install.c +500 -0
- data/vendor/liburing/test/fd-pass.c +237 -0
- data/vendor/liburing/test/fdinfo.c +419 -0
- data/vendor/liburing/test/file-register.c +1189 -0
- data/vendor/liburing/test/file-update.c +231 -0
- data/vendor/liburing/test/file-verify.c +654 -0
- data/vendor/liburing/test/files-exit-hang-poll.c +114 -0
- data/vendor/liburing/test/files-exit-hang-timeout.c +137 -0
- data/vendor/liburing/test/fixed-buf-iter.c +115 -0
- data/vendor/liburing/test/fixed-buf-merge.c +101 -0
- data/vendor/liburing/test/fixed-hugepage.c +411 -0
- data/vendor/liburing/test/fixed-link.c +90 -0
- data/vendor/liburing/test/fixed-reuse.c +160 -0
- data/vendor/liburing/test/fpos.c +255 -0
- data/vendor/liburing/test/fsnotify.c +118 -0
- data/vendor/liburing/test/fsync.c +224 -0
- data/vendor/liburing/test/futex.c +571 -0
- data/vendor/liburing/test/hardlink.c +170 -0
- data/vendor/liburing/test/helpers.c +318 -0
- data/vendor/liburing/test/helpers.h +108 -0
- data/vendor/liburing/test/ignore-single-mmap.c +48 -0
- data/vendor/liburing/test/init-mem.c +164 -0
- data/vendor/liburing/test/io-cancel.c +561 -0
- data/vendor/liburing/test/io_uring_enter.c +264 -0
- data/vendor/liburing/test/io_uring_passthrough.c +482 -0
- data/vendor/liburing/test/io_uring_register.c +503 -0
- data/vendor/liburing/test/io_uring_setup.c +110 -0
- data/vendor/liburing/test/iopoll-leak.c +85 -0
- data/vendor/liburing/test/iopoll-overflow.c +118 -0
- data/vendor/liburing/test/iopoll.c +465 -0
- data/vendor/liburing/test/lfs-openat-write.c +119 -0
- data/vendor/liburing/test/lfs-openat.c +273 -0
- data/vendor/liburing/test/link-timeout.c +1108 -0
- data/vendor/liburing/test/link.c +497 -0
- data/vendor/liburing/test/link_drain.c +255 -0
- data/vendor/liburing/test/madvise.c +195 -0
- data/vendor/liburing/test/min-timeout-wait.c +354 -0
- data/vendor/liburing/test/min-timeout.c +233 -0
- data/vendor/liburing/test/mkdir.c +112 -0
- data/vendor/liburing/test/msg-ring-fd.c +331 -0
- data/vendor/liburing/test/msg-ring-flags.c +212 -0
- data/vendor/liburing/test/msg-ring-overflow.c +159 -0
- data/vendor/liburing/test/msg-ring.c +467 -0
- data/vendor/liburing/test/multicqes_drain.c +429 -0
- data/vendor/liburing/test/napi-test.c +215 -0
- data/vendor/liburing/test/napi-test.sh +48 -0
- data/vendor/liburing/test/no-mmap-inval.c +42 -0
- data/vendor/liburing/test/nolibc.c +62 -0
- data/vendor/liburing/test/nop-all-sizes.c +99 -0
- data/vendor/liburing/test/nop.c +177 -0
- data/vendor/liburing/test/nvme.h +169 -0
- data/vendor/liburing/test/ooo-file-unreg.c +82 -0
- data/vendor/liburing/test/open-close.c +261 -0
- data/vendor/liburing/test/open-direct-link.c +188 -0
- data/vendor/liburing/test/open-direct-pick.c +180 -0
- data/vendor/liburing/test/openat2.c +312 -0
- data/vendor/liburing/test/personality.c +204 -0
- data/vendor/liburing/test/pipe-bug.c +95 -0
- data/vendor/liburing/test/pipe-eof.c +83 -0
- data/vendor/liburing/test/pipe-reuse.c +105 -0
- data/vendor/liburing/test/poll-cancel-all.c +496 -0
- data/vendor/liburing/test/poll-cancel-ton.c +135 -0
- data/vendor/liburing/test/poll-cancel.c +228 -0
- data/vendor/liburing/test/poll-link.c +221 -0
- data/vendor/liburing/test/poll-many.c +230 -0
- data/vendor/liburing/test/poll-mshot-overflow.c +265 -0
- data/vendor/liburing/test/poll-mshot-update.c +323 -0
- data/vendor/liburing/test/poll-race-mshot.c +276 -0
- data/vendor/liburing/test/poll-race.c +105 -0
- data/vendor/liburing/test/poll-ring.c +48 -0
- data/vendor/liburing/test/poll-v-poll.c +353 -0
- data/vendor/liburing/test/poll.c +327 -0
- data/vendor/liburing/test/probe.c +135 -0
- data/vendor/liburing/test/read-before-exit.c +129 -0
- data/vendor/liburing/test/read-mshot-empty.c +153 -0
- data/vendor/liburing/test/read-mshot.c +404 -0
- data/vendor/liburing/test/read-write.c +1013 -0
- data/vendor/liburing/test/recv-msgall-stream.c +398 -0
- data/vendor/liburing/test/recv-msgall.c +263 -0
- data/vendor/liburing/test/recv-multishot.c +602 -0
- data/vendor/liburing/test/recvsend_bundle.c +691 -0
- data/vendor/liburing/test/reg-fd-only.c +131 -0
- data/vendor/liburing/test/reg-hint.c +56 -0
- data/vendor/liburing/test/reg-reg-ring.c +90 -0
- data/vendor/liburing/test/regbuf-merge.c +91 -0
- data/vendor/liburing/test/register-restrictions.c +633 -0
- data/vendor/liburing/test/rename.c +132 -0
- data/vendor/liburing/test/ring-leak.c +283 -0
- data/vendor/liburing/test/ring-leak2.c +249 -0
- data/vendor/liburing/test/ringbuf-read.c +196 -0
- data/vendor/liburing/test/ringbuf-status.c +242 -0
- data/vendor/liburing/test/rsrc_tags.c +461 -0
- data/vendor/liburing/test/runtests-loop.sh +16 -0
- data/vendor/liburing/test/runtests-quiet.sh +11 -0
- data/vendor/liburing/test/runtests.sh +168 -0
- data/vendor/liburing/test/rw_merge_test.c +98 -0
- data/vendor/liburing/test/self.c +91 -0
- data/vendor/liburing/test/send-zerocopy.c +971 -0
- data/vendor/liburing/test/send_recv.c +412 -0
- data/vendor/liburing/test/send_recvmsg.c +444 -0
- data/vendor/liburing/test/shared-wq.c +84 -0
- data/vendor/liburing/test/short-read.c +75 -0
- data/vendor/liburing/test/shutdown.c +165 -0
- data/vendor/liburing/test/sigfd-deadlock.c +88 -0
- data/vendor/liburing/test/single-issuer.c +169 -0
- data/vendor/liburing/test/skip-cqe.c +428 -0
- data/vendor/liburing/test/socket-getsetsock-cmd.c +346 -0
- data/vendor/liburing/test/socket-io-cmd.c +237 -0
- data/vendor/liburing/test/socket-rw-eagain.c +149 -0
- data/vendor/liburing/test/socket-rw-offset.c +149 -0
- data/vendor/liburing/test/socket-rw.c +137 -0
- data/vendor/liburing/test/socket.c +408 -0
- data/vendor/liburing/test/splice.c +512 -0
- data/vendor/liburing/test/sq-full-cpp.cc +45 -0
- data/vendor/liburing/test/sq-full.c +45 -0
- data/vendor/liburing/test/sq-poll-dup.c +211 -0
- data/vendor/liburing/test/sq-poll-kthread.c +169 -0
- data/vendor/liburing/test/sq-poll-share.c +138 -0
- data/vendor/liburing/test/sq-space_left.c +159 -0
- data/vendor/liburing/test/sqpoll-disable-exit.c +196 -0
- data/vendor/liburing/test/sqpoll-exec.c +132 -0
- data/vendor/liburing/test/sqpoll-exit-hang.c +78 -0
- data/vendor/liburing/test/sqpoll-sleep.c +69 -0
- data/vendor/liburing/test/statx.c +172 -0
- data/vendor/liburing/test/stdout.c +232 -0
- data/vendor/liburing/test/submit-and-wait.c +108 -0
- data/vendor/liburing/test/submit-link-fail.c +156 -0
- data/vendor/liburing/test/submit-reuse.c +237 -0
- data/vendor/liburing/test/symlink.c +117 -0
- data/vendor/liburing/test/sync-cancel.c +235 -0
- data/vendor/liburing/test/teardowns.c +58 -0
- data/vendor/liburing/test/test.h +36 -0
- data/vendor/liburing/test/thread-exit.c +143 -0
- data/vendor/liburing/test/timeout-new.c +256 -0
- data/vendor/liburing/test/timeout.c +1798 -0
- data/vendor/liburing/test/truncate.c +186 -0
- data/vendor/liburing/test/tty-write-dpoll.c +60 -0
- data/vendor/liburing/test/unlink.c +112 -0
- data/vendor/liburing/test/version.c +25 -0
- data/vendor/liburing/test/wait-timeout.c +287 -0
- data/vendor/liburing/test/waitid.c +373 -0
- data/vendor/liburing/test/wakeup-hang.c +162 -0
- data/vendor/liburing/test/wq-aff.c +146 -0
- data/vendor/liburing/test/xattr.c +442 -0
- metadata +412 -0
data/test/test_um.rb
ADDED
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'helper'
|
|
4
|
+
require 'socket'
|
|
5
|
+
|
|
6
|
+
class SleepTest < UMBaseTest
|
|
7
|
+
def test_sleep
|
|
8
|
+
t0 = monotonic_clock
|
|
9
|
+
res = machine.sleep(0.1)
|
|
10
|
+
t1 = monotonic_clock
|
|
11
|
+
assert_in_range 0.09..0.13, t1 - t0
|
|
12
|
+
assert_equal 0.1, res
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
class SchedulingTest < UMBaseTest
|
|
17
|
+
def test_schedule_and_yield
|
|
18
|
+
buf = []
|
|
19
|
+
cur = Fiber.current
|
|
20
|
+
f = Fiber.new do |x|
|
|
21
|
+
buf << [21, x]
|
|
22
|
+
machine.schedule(cur, 21)
|
|
23
|
+
buf << 22
|
|
24
|
+
x = machine.yield
|
|
25
|
+
buf << [23, x]
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
buf << 11
|
|
29
|
+
machine.schedule(f, 11)
|
|
30
|
+
buf << 12
|
|
31
|
+
x = machine.yield
|
|
32
|
+
buf << [13, x]
|
|
33
|
+
|
|
34
|
+
assert_equal [11, 12, [21, 11], 22, [13, 21]], buf
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
class CustomError < Exception
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def test_schedule_exception
|
|
41
|
+
buf = []
|
|
42
|
+
f = Fiber.new do
|
|
43
|
+
# this should raise
|
|
44
|
+
machine.yield
|
|
45
|
+
rescue Exception => e
|
|
46
|
+
buf << e
|
|
47
|
+
machine.yield
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
machine.schedule(f, nil)
|
|
51
|
+
# start the f fiber
|
|
52
|
+
machine.snooze
|
|
53
|
+
|
|
54
|
+
# f fiber has yielded
|
|
55
|
+
e = CustomError.new
|
|
56
|
+
machine.schedule(f, e)
|
|
57
|
+
machine.snooze
|
|
58
|
+
|
|
59
|
+
assert_equal [e], buf
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def test_interrupt
|
|
63
|
+
cur = Fiber.current
|
|
64
|
+
e = CustomError.new
|
|
65
|
+
f = Fiber.new do
|
|
66
|
+
machine.interrupt(cur, e)
|
|
67
|
+
assert_equal 2, machine.pending_count
|
|
68
|
+
machine.yield
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
machine.schedule(f, nil)
|
|
72
|
+
t0 = monotonic_clock
|
|
73
|
+
|
|
74
|
+
# the call to schedule means an op is checked out
|
|
75
|
+
assert_equal 1, machine.pending_count
|
|
76
|
+
begin
|
|
77
|
+
machine.sleep(1)
|
|
78
|
+
rescue Exception => e2
|
|
79
|
+
end
|
|
80
|
+
# the sleep op has been cancelled, but we still need to process the
|
|
81
|
+
# cancellation. Calling snooze should take care of that.
|
|
82
|
+
assert_equal 1, machine.pending_count
|
|
83
|
+
machine.snooze
|
|
84
|
+
|
|
85
|
+
# CQE should have been received, and the op checked in
|
|
86
|
+
assert_equal 0, machine.pending_count
|
|
87
|
+
t1 = monotonic_clock
|
|
88
|
+
|
|
89
|
+
assert_equal e2, e
|
|
90
|
+
assert_in_range 0..0.1, t1 - t0
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
class TOError < RuntimeError; end
|
|
94
|
+
|
|
95
|
+
def test_timeout
|
|
96
|
+
buf = []
|
|
97
|
+
begin
|
|
98
|
+
buf << 1
|
|
99
|
+
machine.timeout(0.01, TOError) do
|
|
100
|
+
buf << 2
|
|
101
|
+
machine.sleep(1)
|
|
102
|
+
buf << 3
|
|
103
|
+
end
|
|
104
|
+
buf << 4
|
|
105
|
+
rescue => e
|
|
106
|
+
buf << 5
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
# at this point, the sleep cancelled CQE should not yet have been received.
|
|
110
|
+
# So we still have a pending operation. Snooze should have let the CQE be
|
|
111
|
+
# received.
|
|
112
|
+
assert_equal 1, machine.pending_count
|
|
113
|
+
machine.snooze
|
|
114
|
+
assert_equal 0, machine.pending_count
|
|
115
|
+
|
|
116
|
+
assert_equal [1, 2, 5], buf
|
|
117
|
+
assert_kind_of TOError, e
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def test_timeout_with_raising_block
|
|
121
|
+
e = nil
|
|
122
|
+
v = begin
|
|
123
|
+
machine.timeout(0.01, TOError) do
|
|
124
|
+
raise 'hi'
|
|
125
|
+
end
|
|
126
|
+
rescue => e
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
assert_equal 1, machine.pending_count
|
|
130
|
+
machine.snooze
|
|
131
|
+
assert_equal 0, machine.pending_count
|
|
132
|
+
|
|
133
|
+
assert_kind_of RuntimeError, e
|
|
134
|
+
assert_equal 'hi', e.message
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
def test_timeout_with_nothing_blocking
|
|
138
|
+
v = machine.timeout(0.01, TOError) { 42 }
|
|
139
|
+
|
|
140
|
+
assert_equal 42, v
|
|
141
|
+
|
|
142
|
+
assert_equal 1, machine.pending_count
|
|
143
|
+
machine.snooze
|
|
144
|
+
assert_equal 0, machine.pending_count
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
class TO2Error < RuntimeError; end
|
|
148
|
+
class TO3Error < RuntimeError; end
|
|
149
|
+
|
|
150
|
+
def test_timeout_nested
|
|
151
|
+
e = nil
|
|
152
|
+
buf = []
|
|
153
|
+
begin
|
|
154
|
+
machine.timeout(0.04, TOError) do
|
|
155
|
+
machine.timeout(0.02, TO2Error) do
|
|
156
|
+
machine.timeout(0.03, TO3Error) do
|
|
157
|
+
buf << machine.pending_count
|
|
158
|
+
machine.sleep(1)
|
|
159
|
+
end
|
|
160
|
+
end
|
|
161
|
+
end
|
|
162
|
+
rescue => e
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
assert_kind_of TO2Error, e
|
|
166
|
+
assert_equal [3], buf
|
|
167
|
+
end
|
|
168
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
require_relative './lib/uringmachine/version'
|
|
2
|
+
|
|
3
|
+
Gem::Specification.new do |s|
|
|
4
|
+
s.name = 'uringmachine'
|
|
5
|
+
s.version = UM_VERSION
|
|
6
|
+
s.licenses = ['MIT']
|
|
7
|
+
s.summary = 'A lean, mean io_uring machine'
|
|
8
|
+
s.author = 'Sharon Rosner'
|
|
9
|
+
s.email = 'sharon@noteflakes.com'
|
|
10
|
+
s.files = `git ls-files --recurse-submodules`.split.reject { |fn| fn =~ /liburing\/man/ }
|
|
11
|
+
s.homepage = 'https://github.com/digital-fabric/uringmachine'
|
|
12
|
+
s.metadata = {
|
|
13
|
+
"source_code_uri" => "https://github.com/digital-fabric/uringmachine",
|
|
14
|
+
"documentation_uri" => "https://www.rubydoc.info/gems/uringmachine",
|
|
15
|
+
"changelog_uri" => "https://github.com/digital-fabric/uringmachine/blob/master/CHANGELOG.md"
|
|
16
|
+
}
|
|
17
|
+
s.rdoc_options = ["--title", "UringMachine", "--main", "README.md"]
|
|
18
|
+
s.extra_rdoc_files = ["README.md"]
|
|
19
|
+
s.extensions = ["ext/um/extconf.rb"]
|
|
20
|
+
s.require_paths = ["lib"]
|
|
21
|
+
s.required_ruby_version = '>= 3.3'
|
|
22
|
+
|
|
23
|
+
s.add_development_dependency 'rake-compiler', '1.2.7'
|
|
24
|
+
s.add_development_dependency 'minitest', '5.25.1'
|
|
25
|
+
s.add_development_dependency 'http_parser.rb', '0.8.0'
|
|
26
|
+
s.add_development_dependency 'benchmark-ips', '2.10.0'
|
|
27
|
+
end
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
|
|
2
|
+
<!-- Explain your changes here... -->
|
|
3
|
+
|
|
4
|
+
----
|
|
5
|
+
## git request-pull output:
|
|
6
|
+
```
|
|
7
|
+
<!-- START REPLACE ME -->
|
|
8
|
+
|
|
9
|
+
Generate your PR shortlog and diffstat with these commands:
|
|
10
|
+
git remote add axboe-tree https://github.com/axboe/liburing
|
|
11
|
+
git fetch axboe-tree
|
|
12
|
+
git request-pull axboe-tree/master your_fork_URL your_branch_name
|
|
13
|
+
|
|
14
|
+
Then replace this with the output of `git request-pull` command.
|
|
15
|
+
|
|
16
|
+
<!-- END REPLACE ME -->
|
|
17
|
+
```
|
|
18
|
+
----
|
|
19
|
+
<details>
|
|
20
|
+
<summary>Click to show/hide pull request guidelines</summary>
|
|
21
|
+
|
|
22
|
+
## Pull Request Guidelines
|
|
23
|
+
1. To make everyone easily filter pull request from the email
|
|
24
|
+
notification, use `[GIT PULL]` as a prefix in your PR title.
|
|
25
|
+
```
|
|
26
|
+
[GIT PULL] Your Pull Request Title
|
|
27
|
+
```
|
|
28
|
+
2. Follow the commit message format rules below.
|
|
29
|
+
3. Follow the Linux kernel coding style (see: https://github.com/torvalds/linux/blob/master/Documentation/process/coding-style.rst).
|
|
30
|
+
|
|
31
|
+
### Commit message format rules:
|
|
32
|
+
1. The first line is title (don't be more than 72 chars if possible).
|
|
33
|
+
2. Then an empty line.
|
|
34
|
+
3. Then a description (may be omitted for truly trivial changes).
|
|
35
|
+
4. Then an empty line again (if it has a description).
|
|
36
|
+
5. Then a `Signed-off-by` tag with your real name and email. For example:
|
|
37
|
+
```
|
|
38
|
+
Signed-off-by: Foo Bar <foo.bar@gmail.com>
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
The description should be word-wrapped at 72 chars. Some things should
|
|
42
|
+
not be word-wrapped. They may be some kind of quoted text - long
|
|
43
|
+
compiler error messages, oops reports, Link, etc. (things that have a
|
|
44
|
+
certain specific format).
|
|
45
|
+
|
|
46
|
+
Note that all of this goes in the commit message, not in the pull
|
|
47
|
+
request text. The pull request text should introduce what this pull
|
|
48
|
+
request does, and each commit message should explain the rationale for
|
|
49
|
+
why that particular change was made. The git tree is canonical source
|
|
50
|
+
of truth, not github.
|
|
51
|
+
|
|
52
|
+
Each patch should do one thing, and one thing only. If you find yourself
|
|
53
|
+
writing an explanation for why a patch is fixing multiple issues, that's
|
|
54
|
+
a good indication that the change should be split into separate patches.
|
|
55
|
+
|
|
56
|
+
If the commit is a fix for an issue, add a `Fixes` tag with the issue
|
|
57
|
+
URL.
|
|
58
|
+
|
|
59
|
+
Don't use GitHub anonymous email like this as the commit author:
|
|
60
|
+
```
|
|
61
|
+
123456789+username@users.noreply.github.com
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Use a real email address!
|
|
65
|
+
|
|
66
|
+
### Commit message example:
|
|
67
|
+
```
|
|
68
|
+
src/queue: don't flush SQ ring for new wait interface
|
|
69
|
+
|
|
70
|
+
If we have IORING_FEAT_EXT_ARG, then timeouts are done through the
|
|
71
|
+
syscall instead of by posting an internal timeout. This was done
|
|
72
|
+
to be both more efficient, but also to enable multi-threaded use
|
|
73
|
+
the wait side. If we touch the SQ state by flushing it, that isn't
|
|
74
|
+
safe without synchronization.
|
|
75
|
+
|
|
76
|
+
Fixes: https://github.com/axboe/liburing/issues/402
|
|
77
|
+
Signed-off-by: Jens Axboe <axboe@kernel.dk>
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
</details>
|
|
81
|
+
|
|
82
|
+
----
|
|
83
|
+
## By submitting this pull request, I acknowledge that:
|
|
84
|
+
1. I have followed the above pull request guidelines.
|
|
85
|
+
2. I have the rights to submit this work under the same license.
|
|
86
|
+
3. I agree to a Developer Certificate of Origin (see https://developercertificate.org for more information).
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
name: Build test
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
# Trigger the workflow on push or pull requests.
|
|
5
|
+
push:
|
|
6
|
+
pull_request:
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
build:
|
|
10
|
+
runs-on: ubuntu-22.04
|
|
11
|
+
|
|
12
|
+
strategy:
|
|
13
|
+
fail-fast: false
|
|
14
|
+
matrix:
|
|
15
|
+
include:
|
|
16
|
+
# x86-64 gcc
|
|
17
|
+
- arch: x86_64
|
|
18
|
+
cc_pkg: gcc-x86-64-linux-gnu
|
|
19
|
+
cxx_pkg: g++-x86-64-linux-gnu
|
|
20
|
+
cc: x86_64-linux-gnu-gcc
|
|
21
|
+
cxx: x86_64-linux-gnu-g++
|
|
22
|
+
|
|
23
|
+
# x86-64 clang
|
|
24
|
+
- arch: x86_64
|
|
25
|
+
cc_pkg: clang
|
|
26
|
+
cxx_pkg: clang
|
|
27
|
+
cc: clang
|
|
28
|
+
cxx: clang++
|
|
29
|
+
liburing_extra_flags: -Wshorten-64-to-32
|
|
30
|
+
extra_flags: -Wmissing-prototypes -Wstrict-prototypes -Wunreachable-code-loop-increment -Wunreachable-code -Wmissing-variable-declarations -Wextra-semi-stmt
|
|
31
|
+
|
|
32
|
+
# x86 (32-bit) gcc
|
|
33
|
+
- arch: i686
|
|
34
|
+
cc_pkg: gcc-i686-linux-gnu
|
|
35
|
+
cxx_pkg: g++-i686-linux-gnu
|
|
36
|
+
cc: i686-linux-gnu-gcc
|
|
37
|
+
cxx: i686-linux-gnu-g++
|
|
38
|
+
|
|
39
|
+
# aarch64 gcc
|
|
40
|
+
- arch: aarch64
|
|
41
|
+
cc_pkg: gcc-aarch64-linux-gnu
|
|
42
|
+
cxx_pkg: g++-aarch64-linux-gnu
|
|
43
|
+
cc: aarch64-linux-gnu-gcc
|
|
44
|
+
cxx: aarch64-linux-gnu-g++
|
|
45
|
+
|
|
46
|
+
# arm (32-bit) gcc
|
|
47
|
+
- arch: arm
|
|
48
|
+
cc_pkg: gcc-arm-linux-gnueabi
|
|
49
|
+
cxx_pkg: g++-arm-linux-gnueabi
|
|
50
|
+
cc: arm-linux-gnueabi-gcc
|
|
51
|
+
cxx: arm-linux-gnueabi-g++
|
|
52
|
+
|
|
53
|
+
# riscv64
|
|
54
|
+
- arch: riscv64
|
|
55
|
+
cc_pkg: gcc-riscv64-linux-gnu
|
|
56
|
+
cxx_pkg: g++-riscv64-linux-gnu
|
|
57
|
+
cc: riscv64-linux-gnu-gcc
|
|
58
|
+
cxx: riscv64-linux-gnu-g++
|
|
59
|
+
|
|
60
|
+
# powerpc64
|
|
61
|
+
- arch: powerpc64
|
|
62
|
+
cc_pkg: gcc-powerpc64-linux-gnu
|
|
63
|
+
cxx_pkg: g++-powerpc64-linux-gnu
|
|
64
|
+
cc: powerpc64-linux-gnu-gcc
|
|
65
|
+
cxx: powerpc64-linux-gnu-g++
|
|
66
|
+
|
|
67
|
+
# powerpc
|
|
68
|
+
- arch: powerpc
|
|
69
|
+
cc_pkg: gcc-powerpc-linux-gnu
|
|
70
|
+
cxx_pkg: g++-powerpc-linux-gnu
|
|
71
|
+
cc: powerpc-linux-gnu-gcc
|
|
72
|
+
cxx: powerpc-linux-gnu-g++
|
|
73
|
+
|
|
74
|
+
# alpha
|
|
75
|
+
- arch: alpha
|
|
76
|
+
cc_pkg: gcc-alpha-linux-gnu
|
|
77
|
+
cxx_pkg: g++-alpha-linux-gnu
|
|
78
|
+
cc: alpha-linux-gnu-gcc
|
|
79
|
+
cxx: alpha-linux-gnu-g++
|
|
80
|
+
|
|
81
|
+
# mips64
|
|
82
|
+
- arch: mips64
|
|
83
|
+
cc_pkg: gcc-mips64-linux-gnuabi64
|
|
84
|
+
cxx_pkg: g++-mips64-linux-gnuabi64
|
|
85
|
+
cc: mips64-linux-gnuabi64-gcc
|
|
86
|
+
cxx: mips64-linux-gnuabi64-g++
|
|
87
|
+
|
|
88
|
+
# mips
|
|
89
|
+
- arch: mips
|
|
90
|
+
cc_pkg: gcc-mips-linux-gnu
|
|
91
|
+
cxx_pkg: g++-mips-linux-gnu
|
|
92
|
+
cc: mips-linux-gnu-gcc
|
|
93
|
+
cxx: mips-linux-gnu-g++
|
|
94
|
+
|
|
95
|
+
# hppa
|
|
96
|
+
- arch: hppa
|
|
97
|
+
cc_pkg: gcc-hppa-linux-gnu
|
|
98
|
+
cxx_pkg: g++-hppa-linux-gnu
|
|
99
|
+
cc: hppa-linux-gnu-gcc
|
|
100
|
+
cxx: hppa-linux-gnu-g++
|
|
101
|
+
|
|
102
|
+
env:
|
|
103
|
+
FLAGS: -g -O3 -Wall -Wextra -Werror -Wno-sign-compare ${{matrix.extra_flags}}
|
|
104
|
+
|
|
105
|
+
# Flags for building sources in src/ dir only.
|
|
106
|
+
LIBURING_CFLAGS: ${{matrix.liburing_extra_flags}}
|
|
107
|
+
|
|
108
|
+
steps:
|
|
109
|
+
- name: Checkout source
|
|
110
|
+
uses: actions/checkout@v4
|
|
111
|
+
|
|
112
|
+
- name: Install Compilers
|
|
113
|
+
run: |
|
|
114
|
+
if [[ "${{matrix.cc_pkg}}" == "clang" ]]; then \
|
|
115
|
+
wget https://apt.llvm.org/llvm.sh -O /tmp/llvm.sh; \
|
|
116
|
+
sudo apt-get purge --auto-remove llvm python3-lldb-14 llvm-14 -y; \
|
|
117
|
+
sudo bash /tmp/llvm.sh 17; \
|
|
118
|
+
sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-17 400; \
|
|
119
|
+
sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-17 400; \
|
|
120
|
+
else \
|
|
121
|
+
sudo apt-get update -y; \
|
|
122
|
+
sudo apt-get install -y ${{matrix.cc_pkg}} ${{matrix.cxx_pkg}}; \
|
|
123
|
+
fi;
|
|
124
|
+
|
|
125
|
+
- name: Display compiler versions
|
|
126
|
+
run: |
|
|
127
|
+
${{matrix.cc}} --version;
|
|
128
|
+
${{matrix.cxx}} --version;
|
|
129
|
+
|
|
130
|
+
- name: Build
|
|
131
|
+
run: |
|
|
132
|
+
./configure --cc=${{matrix.cc}} --cxx=${{matrix.cxx}};
|
|
133
|
+
make -j$(nproc) V=1 CPPFLAGS="-Werror" CFLAGS="$FLAGS" CXXFLAGS="$FLAGS";
|
|
134
|
+
|
|
135
|
+
- name: Test install command
|
|
136
|
+
run: |
|
|
137
|
+
sudo make install;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
name: Codespell
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
# Trigger the workflow on push or pull requests.
|
|
5
|
+
push:
|
|
6
|
+
pull_request:
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
test:
|
|
10
|
+
runs-on: ubuntu-24.04
|
|
11
|
+
|
|
12
|
+
steps:
|
|
13
|
+
- name: Checkout source
|
|
14
|
+
uses: actions/checkout@v4
|
|
15
|
+
|
|
16
|
+
- name: Install codespell
|
|
17
|
+
run: |
|
|
18
|
+
sudo apt-get update -y
|
|
19
|
+
sudo apt-get install -y codespell
|
|
20
|
+
|
|
21
|
+
- name: Display codespell version
|
|
22
|
+
run: codespell --version
|
|
23
|
+
|
|
24
|
+
- name: Execute codespell
|
|
25
|
+
run: codespell --ignore-words=.github/actions/codespell/stopwords .
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
name: Shellcheck
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
# Trigger the workflow on push or pull requests.
|
|
5
|
+
push:
|
|
6
|
+
pull_request:
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
test:
|
|
10
|
+
runs-on: ubuntu-22.04
|
|
11
|
+
|
|
12
|
+
steps:
|
|
13
|
+
- name: Checkout source
|
|
14
|
+
uses: actions/checkout@v4
|
|
15
|
+
|
|
16
|
+
- name: Display shellcheck version
|
|
17
|
+
run: shellcheck --version
|
|
18
|
+
|
|
19
|
+
- name: Shellcheck execution
|
|
20
|
+
run: shellcheck test/runtest*.sh
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
*.rej
|
|
2
|
+
*.orig
|
|
3
|
+
*~
|
|
4
|
+
/*.patch
|
|
5
|
+
|
|
6
|
+
*.d
|
|
7
|
+
*.o
|
|
8
|
+
*.o[ls]
|
|
9
|
+
|
|
10
|
+
/src/liburing.a
|
|
11
|
+
/src/liburing.so*
|
|
12
|
+
/src/liburing-ffi.a
|
|
13
|
+
/src/liburing-ffi.so*
|
|
14
|
+
/src/include/liburing/compat.h
|
|
15
|
+
/src/include/liburing/io_uring_version.h
|
|
16
|
+
|
|
17
|
+
/examples/io_uring-close-test
|
|
18
|
+
/examples/io_uring-cp
|
|
19
|
+
/examples/io_uring-test
|
|
20
|
+
/examples/io_uring-udp
|
|
21
|
+
/examples/link-cp
|
|
22
|
+
/examples/napi-busy-poll-client
|
|
23
|
+
/examples/napi-busy-poll-server
|
|
24
|
+
/examples/ucontext-cp
|
|
25
|
+
/examples/poll-bench
|
|
26
|
+
/examples/proxy
|
|
27
|
+
/examples/send-zerocopy
|
|
28
|
+
/examples/rsrc-update-bench
|
|
29
|
+
|
|
30
|
+
/test/*.t
|
|
31
|
+
/test/*.dmesg
|
|
32
|
+
/test/output/
|
|
33
|
+
|
|
34
|
+
config-host.h
|
|
35
|
+
config-host.mak
|
|
36
|
+
config.log
|
|
37
|
+
|
|
38
|
+
liburing.pc
|
|
39
|
+
liburing-ffi.pc
|
|
40
|
+
|
|
41
|
+
cscope.out
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
liburing-2.7 release
|
|
2
|
+
|
|
3
|
+
- Man page updates
|
|
4
|
+
- Sync with kernel 6.10
|
|
5
|
+
- send/recv bundle support
|
|
6
|
+
- accept nowait and CQE_F_MORE
|
|
7
|
+
- Add and update test cases
|
|
8
|
+
- Fix io_uring_queue_init_mem() returning a value that was too small,
|
|
9
|
+
potentially causing memory corruption in userspace by overwriting
|
|
10
|
+
64 bytes beyond the returned value. Also add test case for that.
|
|
11
|
+
- Add 64-bit length variants of io_uring_prep_{m,f}advise()
|
|
12
|
+
- Add BIND/LISTEN support and helpers / man pages
|
|
13
|
+
- Add io_uring_enable_rings.3 man page
|
|
14
|
+
- Fix bug in io_uring_prep_read_multishot()
|
|
15
|
+
- Fixup bundle test cases
|
|
16
|
+
- Add fixed-hugepage test case
|
|
17
|
+
- Fix io_uring_prep_fixed_fd_install.3 man page
|
|
18
|
+
- Note 'len' == 0 requirement in io_uring_prep_send.3 man page
|
|
19
|
+
- Fix some test cases for skipping on older kernels
|
|
20
|
+
|
|
21
|
+
liburing-2.6 release
|
|
22
|
+
|
|
23
|
+
- Add getsockopt and setsockopt socket commands
|
|
24
|
+
- Add test cases to test/hardlink
|
|
25
|
+
- Man page fixes
|
|
26
|
+
- Add futex support, and test cases
|
|
27
|
+
- Add waitid support, and test cases
|
|
28
|
+
- Add read multishot, and test cases
|
|
29
|
+
- Add support for IORING_SETUP_NO_SQARRAY
|
|
30
|
+
- Use IORING_SETUP_NO_SQARRAY as the default
|
|
31
|
+
- Add support for IORING_OP_FIXED_FD_INSTALL
|
|
32
|
+
- Add io_uring_prep_fixed_fd_install() helper
|
|
33
|
+
- Support for napi busy polling
|
|
34
|
+
- Improve/add test cases
|
|
35
|
+
- Man page fixes
|
|
36
|
+
- Add sample 'proxy' example
|
|
37
|
+
|
|
38
|
+
liburing-2.5 release
|
|
39
|
+
|
|
40
|
+
- Add support for io_uring_prep_cmd_sock()
|
|
41
|
+
- Add support for application allocated ring memory, for placing rings
|
|
42
|
+
in huge mem. Available through io_uring_queue_init_mem().
|
|
43
|
+
- Add support for registered ring fds
|
|
44
|
+
- Various documentation updates
|
|
45
|
+
- Various fixes
|
|
46
|
+
|
|
47
|
+
liburing-2.4 release
|
|
48
|
+
|
|
49
|
+
- Add io_uring_{major,minor,check}_version() functions.
|
|
50
|
+
- Add IO_URING_{MAJOR,MINOR,CHECK}_VERSION() macros.
|
|
51
|
+
- FFI support (for non-C/C++ languages integration).
|
|
52
|
+
- Add io_uring_prep_msg_ring_cqe_flags() function.
|
|
53
|
+
- Deprecate --nolibc configure option.
|
|
54
|
+
- CONFIG_NOLIBC is always enabled on x86-64, x86, and aarch64.
|
|
55
|
+
- Add support for IORING_REGISTER_USE_REGISTERED_RING and use if available.
|
|
56
|
+
- Add io_uring_close_ring_fd() function.
|
|
57
|
+
- Add io_uring_prep_msg_ring_fd_alloc function.
|
|
58
|
+
- Add io_uring_free_buf_ring() and io_uring_setup_buf_ring() functions.
|
|
59
|
+
- Ensure that io_uring_prep_accept_direct(), io_uring_prep_openat_direct(),
|
|
60
|
+
io_uring_prep_openat2_direct(), io_uring_prep_msg_ring_fd(), and
|
|
61
|
+
io_uring_prep_socket_direct() factor in being called with
|
|
62
|
+
IORING_FILE_INDEX_ALLOC for allocating a direct descriptor.
|
|
63
|
+
- Add io_uring_prep_sendto() function.
|
|
64
|
+
- Add io_uring_prep_cmd_sock() function.
|
|
65
|
+
|
|
66
|
+
liburing-2.3 release
|
|
67
|
+
|
|
68
|
+
- Support non-libc build for aarch64.
|
|
69
|
+
- Add io_uring_{enter,enter2,register,setup} syscall functions.
|
|
70
|
+
- Add sync cancel interface, io_uring_register_sync_cancel().
|
|
71
|
+
- Fix return value of io_uring_submit_and_wait_timeout() to match the
|
|
72
|
+
man page.
|
|
73
|
+
- Improvements to the regression tests
|
|
74
|
+
- Add support and test case for passthrough IO
|
|
75
|
+
- Add recv and recvmsg multishot helpers and support
|
|
76
|
+
- Add documentation and support for IORING_SETUP_DEFER_TASKRUN
|
|
77
|
+
- Fix potential missing kernel entry with IORING_SETUP_IOPOLL
|
|
78
|
+
- Add support and documentation for zero-copy network transmit
|
|
79
|
+
- Various optimizations
|
|
80
|
+
- Many cleanups
|
|
81
|
+
- Many man page additions and updates
|
|
82
|
+
|
|
83
|
+
liburing-2.2 release
|
|
84
|
+
|
|
85
|
+
- Support non-libc builds.
|
|
86
|
+
- Optimized syscall handling for x86-64/x86/aarch64.
|
|
87
|
+
- Enable non-lib function calls for fast path functions.
|
|
88
|
+
- Add support for multishot accept.
|
|
89
|
+
- io_uring_register_files() will set RLIMIT_NOFILE if necessary.
|
|
90
|
+
- Add support for registered ring fds, io_uring_register_ring_fd(),
|
|
91
|
+
reducing the overhead of an io_uring_enter() system call.
|
|
92
|
+
- Add support for the message ring opcode.
|
|
93
|
+
- Add support for newer request cancelation features.
|
|
94
|
+
- Add support for IORING_SETUP_COOP_TASKRUN, which can help reduce the
|
|
95
|
+
overhead of io_uring in general. Most applications should set this flag,
|
|
96
|
+
see the io_uring_setup.2 man page for details.
|
|
97
|
+
- Add support for registering a sparse buffer and file set.
|
|
98
|
+
- Add support for a new buffer provide scheme, see
|
|
99
|
+
io_uring_register_buf_ring.3 for details.
|
|
100
|
+
- Add io_uring_submit_and_wait_timeout() for submitting IO and waiting
|
|
101
|
+
for completions with a timeout.
|
|
102
|
+
- Add io_uring_prep_{read,write}v2 prep helpers.
|
|
103
|
+
- Add io_uring_prep_close_direct() helper.
|
|
104
|
+
- Add support for SQE128 and CQE32, which are doubly sized SQE and CQE
|
|
105
|
+
rings. This is needed for some cases of the new IORING_OP_URING_CMD,
|
|
106
|
+
notably for NVMe passthrough.
|
|
107
|
+
- ~5500 lines of man page additions, including adding ~90 new man pages.
|
|
108
|
+
- Synced with the 5.19 kernel release, supporting all the features of
|
|
109
|
+
5.19 and earlier.
|
|
110
|
+
- 24 new regression test cases, and ~7000 lines of new tests in general.
|
|
111
|
+
- General optimizations and fixes.
|