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.
Files changed (307) hide show
  1. checksums.yaml +7 -0
  2. data/.github/dependabot.yml +12 -0
  3. data/.github/workflows/test.yml +35 -0
  4. data/.gitignore +59 -0
  5. data/.gitmodules +3 -0
  6. data/CHANGELOG.md +7 -0
  7. data/Gemfile +3 -0
  8. data/LICENSE +21 -0
  9. data/README.md +11 -0
  10. data/Rakefile +39 -0
  11. data/TODO.md +0 -0
  12. data/examples/echo_server.rb +52 -0
  13. data/examples/event_loop.rb +69 -0
  14. data/examples/fibers.rb +105 -0
  15. data/examples/http_server.rb +56 -0
  16. data/examples/http_server_multishot.rb +57 -0
  17. data/examples/http_server_simpler.rb +34 -0
  18. data/ext/um/extconf.rb +71 -0
  19. data/ext/um/iou.h +101 -0
  20. data/ext/um/op_ctx.c +138 -0
  21. data/ext/um/ring.c +755 -0
  22. data/ext/um/um.c +267 -0
  23. data/ext/um/um.h +97 -0
  24. data/ext/um/um_class.c +175 -0
  25. data/ext/um/um_ext.c +11 -0
  26. data/ext/um/um_op.c +87 -0
  27. data/ext/um/um_utils.c +23 -0
  28. data/lib/uringmachine/version.rb +3 -0
  29. data/lib/uringmachine.rb +8 -0
  30. data/test/helper.rb +70 -0
  31. data/test/test_iou.rb +876 -0
  32. data/test/test_um.rb +168 -0
  33. data/uringmachine.gemspec +27 -0
  34. data/vendor/liburing/.github/actions/codespell/stopwords +7 -0
  35. data/vendor/liburing/.github/pull_request_template.md +86 -0
  36. data/vendor/liburing/.github/workflows/build.yml +137 -0
  37. data/vendor/liburing/.github/workflows/codespell.yml +25 -0
  38. data/vendor/liburing/.github/workflows/shellcheck.yml +20 -0
  39. data/vendor/liburing/.gitignore +41 -0
  40. data/vendor/liburing/CHANGELOG +111 -0
  41. data/vendor/liburing/CITATION.cff +11 -0
  42. data/vendor/liburing/COPYING +502 -0
  43. data/vendor/liburing/COPYING.GPL +339 -0
  44. data/vendor/liburing/LICENSE +20 -0
  45. data/vendor/liburing/Makefile +96 -0
  46. data/vendor/liburing/Makefile.common +7 -0
  47. data/vendor/liburing/Makefile.quiet +11 -0
  48. data/vendor/liburing/README +106 -0
  49. data/vendor/liburing/SECURITY.md +6 -0
  50. data/vendor/liburing/configure +624 -0
  51. data/vendor/liburing/debian/README.Debian +7 -0
  52. data/vendor/liburing/debian/changelog +38 -0
  53. data/vendor/liburing/debian/control +39 -0
  54. data/vendor/liburing/debian/copyright +49 -0
  55. data/vendor/liburing/debian/liburing-dev.install +4 -0
  56. data/vendor/liburing/debian/liburing-dev.manpages +5 -0
  57. data/vendor/liburing/debian/liburing2.install +1 -0
  58. data/vendor/liburing/debian/liburing2.symbols +56 -0
  59. data/vendor/liburing/debian/patches/series +1 -0
  60. data/vendor/liburing/debian/rules +29 -0
  61. data/vendor/liburing/debian/source/format +1 -0
  62. data/vendor/liburing/debian/source/local-options +2 -0
  63. data/vendor/liburing/debian/source/options +1 -0
  64. data/vendor/liburing/debian/watch +3 -0
  65. data/vendor/liburing/examples/Makefile +53 -0
  66. data/vendor/liburing/examples/helpers.c +62 -0
  67. data/vendor/liburing/examples/helpers.h +7 -0
  68. data/vendor/liburing/examples/io_uring-close-test.c +123 -0
  69. data/vendor/liburing/examples/io_uring-cp.c +282 -0
  70. data/vendor/liburing/examples/io_uring-test.c +112 -0
  71. data/vendor/liburing/examples/io_uring-udp.c +403 -0
  72. data/vendor/liburing/examples/link-cp.c +193 -0
  73. data/vendor/liburing/examples/napi-busy-poll-client.c +509 -0
  74. data/vendor/liburing/examples/napi-busy-poll-server.c +450 -0
  75. data/vendor/liburing/examples/poll-bench.c +101 -0
  76. data/vendor/liburing/examples/proxy.c +2461 -0
  77. data/vendor/liburing/examples/proxy.h +102 -0
  78. data/vendor/liburing/examples/rsrc-update-bench.c +100 -0
  79. data/vendor/liburing/examples/send-zerocopy.c +658 -0
  80. data/vendor/liburing/examples/ucontext-cp.c +258 -0
  81. data/vendor/liburing/liburing-ffi.pc.in +12 -0
  82. data/vendor/liburing/liburing.pc.in +12 -0
  83. data/vendor/liburing/liburing.spec +66 -0
  84. data/vendor/liburing/make-debs.sh +55 -0
  85. data/vendor/liburing/src/Makefile +129 -0
  86. data/vendor/liburing/src/arch/aarch64/lib.h +47 -0
  87. data/vendor/liburing/src/arch/aarch64/syscall.h +91 -0
  88. data/vendor/liburing/src/arch/generic/lib.h +17 -0
  89. data/vendor/liburing/src/arch/generic/syscall.h +100 -0
  90. data/vendor/liburing/src/arch/riscv64/lib.h +48 -0
  91. data/vendor/liburing/src/arch/riscv64/syscall.h +100 -0
  92. data/vendor/liburing/src/arch/syscall-defs.h +94 -0
  93. data/vendor/liburing/src/arch/x86/lib.h +11 -0
  94. data/vendor/liburing/src/arch/x86/syscall.h +296 -0
  95. data/vendor/liburing/src/ffi.c +15 -0
  96. data/vendor/liburing/src/include/liburing/barrier.h +81 -0
  97. data/vendor/liburing/src/include/liburing/io_uring.h +818 -0
  98. data/vendor/liburing/src/include/liburing.h +1602 -0
  99. data/vendor/liburing/src/int_flags.h +11 -0
  100. data/vendor/liburing/src/lib.h +52 -0
  101. data/vendor/liburing/src/liburing-ffi.map +211 -0
  102. data/vendor/liburing/src/liburing.map +104 -0
  103. data/vendor/liburing/src/nolibc.c +55 -0
  104. data/vendor/liburing/src/queue.c +468 -0
  105. data/vendor/liburing/src/register.c +374 -0
  106. data/vendor/liburing/src/setup.c +689 -0
  107. data/vendor/liburing/src/setup.h +9 -0
  108. data/vendor/liburing/src/syscall.c +29 -0
  109. data/vendor/liburing/src/syscall.h +53 -0
  110. data/vendor/liburing/src/version.c +21 -0
  111. data/vendor/liburing/test/232c93d07b74.c +305 -0
  112. data/vendor/liburing/test/35fa71a030ca.c +329 -0
  113. data/vendor/liburing/test/500f9fbadef8.c +91 -0
  114. data/vendor/liburing/test/7ad0e4b2f83c.c +94 -0
  115. data/vendor/liburing/test/8a9973408177.c +107 -0
  116. data/vendor/liburing/test/917257daa0fe.c +54 -0
  117. data/vendor/liburing/test/Makefile +297 -0
  118. data/vendor/liburing/test/a0908ae19763.c +59 -0
  119. data/vendor/liburing/test/a4c0b3decb33.c +181 -0
  120. data/vendor/liburing/test/accept-link.c +255 -0
  121. data/vendor/liburing/test/accept-non-empty.c +256 -0
  122. data/vendor/liburing/test/accept-reuse.c +163 -0
  123. data/vendor/liburing/test/accept-test.c +83 -0
  124. data/vendor/liburing/test/accept.c +919 -0
  125. data/vendor/liburing/test/across-fork.c +284 -0
  126. data/vendor/liburing/test/b19062a56726.c +54 -0
  127. data/vendor/liburing/test/b5837bd5311d.c +78 -0
  128. data/vendor/liburing/test/bind-listen.c +408 -0
  129. data/vendor/liburing/test/buf-ring-nommap.c +123 -0
  130. data/vendor/liburing/test/buf-ring-put.c +83 -0
  131. data/vendor/liburing/test/buf-ring.c +473 -0
  132. data/vendor/liburing/test/ce593a6c480a.c +139 -0
  133. data/vendor/liburing/test/close-opath.c +123 -0
  134. data/vendor/liburing/test/config +14 -0
  135. data/vendor/liburing/test/connect-rep.c +204 -0
  136. data/vendor/liburing/test/connect.c +442 -0
  137. data/vendor/liburing/test/coredump.c +60 -0
  138. data/vendor/liburing/test/cq-full.c +97 -0
  139. data/vendor/liburing/test/cq-overflow.c +530 -0
  140. data/vendor/liburing/test/cq-peek-batch.c +103 -0
  141. data/vendor/liburing/test/cq-ready.c +95 -0
  142. data/vendor/liburing/test/cq-size.c +65 -0
  143. data/vendor/liburing/test/d4ae271dfaae.c +96 -0
  144. data/vendor/liburing/test/d77a67ed5f27.c +65 -0
  145. data/vendor/liburing/test/defer-taskrun.c +391 -0
  146. data/vendor/liburing/test/defer-tw-timeout.c +173 -0
  147. data/vendor/liburing/test/defer.c +319 -0
  148. data/vendor/liburing/test/double-poll-crash.c +195 -0
  149. data/vendor/liburing/test/drop-submit.c +94 -0
  150. data/vendor/liburing/test/eeed8b54e0df.c +120 -0
  151. data/vendor/liburing/test/empty-eownerdead.c +45 -0
  152. data/vendor/liburing/test/eploop.c +74 -0
  153. data/vendor/liburing/test/eventfd-disable.c +179 -0
  154. data/vendor/liburing/test/eventfd-reg.c +77 -0
  155. data/vendor/liburing/test/eventfd-ring.c +98 -0
  156. data/vendor/liburing/test/eventfd.c +113 -0
  157. data/vendor/liburing/test/evloop.c +73 -0
  158. data/vendor/liburing/test/exec-target.c +6 -0
  159. data/vendor/liburing/test/exit-no-cleanup.c +117 -0
  160. data/vendor/liburing/test/fadvise.c +202 -0
  161. data/vendor/liburing/test/fallocate.c +265 -0
  162. data/vendor/liburing/test/fc2a85cb02ef.c +132 -0
  163. data/vendor/liburing/test/fd-install.c +500 -0
  164. data/vendor/liburing/test/fd-pass.c +237 -0
  165. data/vendor/liburing/test/fdinfo.c +419 -0
  166. data/vendor/liburing/test/file-register.c +1189 -0
  167. data/vendor/liburing/test/file-update.c +231 -0
  168. data/vendor/liburing/test/file-verify.c +654 -0
  169. data/vendor/liburing/test/files-exit-hang-poll.c +114 -0
  170. data/vendor/liburing/test/files-exit-hang-timeout.c +137 -0
  171. data/vendor/liburing/test/fixed-buf-iter.c +115 -0
  172. data/vendor/liburing/test/fixed-buf-merge.c +101 -0
  173. data/vendor/liburing/test/fixed-hugepage.c +411 -0
  174. data/vendor/liburing/test/fixed-link.c +90 -0
  175. data/vendor/liburing/test/fixed-reuse.c +160 -0
  176. data/vendor/liburing/test/fpos.c +255 -0
  177. data/vendor/liburing/test/fsnotify.c +118 -0
  178. data/vendor/liburing/test/fsync.c +224 -0
  179. data/vendor/liburing/test/futex.c +571 -0
  180. data/vendor/liburing/test/hardlink.c +170 -0
  181. data/vendor/liburing/test/helpers.c +318 -0
  182. data/vendor/liburing/test/helpers.h +108 -0
  183. data/vendor/liburing/test/ignore-single-mmap.c +48 -0
  184. data/vendor/liburing/test/init-mem.c +164 -0
  185. data/vendor/liburing/test/io-cancel.c +561 -0
  186. data/vendor/liburing/test/io_uring_enter.c +264 -0
  187. data/vendor/liburing/test/io_uring_passthrough.c +482 -0
  188. data/vendor/liburing/test/io_uring_register.c +503 -0
  189. data/vendor/liburing/test/io_uring_setup.c +110 -0
  190. data/vendor/liburing/test/iopoll-leak.c +85 -0
  191. data/vendor/liburing/test/iopoll-overflow.c +118 -0
  192. data/vendor/liburing/test/iopoll.c +465 -0
  193. data/vendor/liburing/test/lfs-openat-write.c +119 -0
  194. data/vendor/liburing/test/lfs-openat.c +273 -0
  195. data/vendor/liburing/test/link-timeout.c +1108 -0
  196. data/vendor/liburing/test/link.c +497 -0
  197. data/vendor/liburing/test/link_drain.c +255 -0
  198. data/vendor/liburing/test/madvise.c +195 -0
  199. data/vendor/liburing/test/min-timeout-wait.c +354 -0
  200. data/vendor/liburing/test/min-timeout.c +233 -0
  201. data/vendor/liburing/test/mkdir.c +112 -0
  202. data/vendor/liburing/test/msg-ring-fd.c +331 -0
  203. data/vendor/liburing/test/msg-ring-flags.c +212 -0
  204. data/vendor/liburing/test/msg-ring-overflow.c +159 -0
  205. data/vendor/liburing/test/msg-ring.c +467 -0
  206. data/vendor/liburing/test/multicqes_drain.c +429 -0
  207. data/vendor/liburing/test/napi-test.c +215 -0
  208. data/vendor/liburing/test/napi-test.sh +48 -0
  209. data/vendor/liburing/test/no-mmap-inval.c +42 -0
  210. data/vendor/liburing/test/nolibc.c +62 -0
  211. data/vendor/liburing/test/nop-all-sizes.c +99 -0
  212. data/vendor/liburing/test/nop.c +177 -0
  213. data/vendor/liburing/test/nvme.h +169 -0
  214. data/vendor/liburing/test/ooo-file-unreg.c +82 -0
  215. data/vendor/liburing/test/open-close.c +261 -0
  216. data/vendor/liburing/test/open-direct-link.c +188 -0
  217. data/vendor/liburing/test/open-direct-pick.c +180 -0
  218. data/vendor/liburing/test/openat2.c +312 -0
  219. data/vendor/liburing/test/personality.c +204 -0
  220. data/vendor/liburing/test/pipe-bug.c +95 -0
  221. data/vendor/liburing/test/pipe-eof.c +83 -0
  222. data/vendor/liburing/test/pipe-reuse.c +105 -0
  223. data/vendor/liburing/test/poll-cancel-all.c +496 -0
  224. data/vendor/liburing/test/poll-cancel-ton.c +135 -0
  225. data/vendor/liburing/test/poll-cancel.c +228 -0
  226. data/vendor/liburing/test/poll-link.c +221 -0
  227. data/vendor/liburing/test/poll-many.c +230 -0
  228. data/vendor/liburing/test/poll-mshot-overflow.c +265 -0
  229. data/vendor/liburing/test/poll-mshot-update.c +323 -0
  230. data/vendor/liburing/test/poll-race-mshot.c +276 -0
  231. data/vendor/liburing/test/poll-race.c +105 -0
  232. data/vendor/liburing/test/poll-ring.c +48 -0
  233. data/vendor/liburing/test/poll-v-poll.c +353 -0
  234. data/vendor/liburing/test/poll.c +327 -0
  235. data/vendor/liburing/test/probe.c +135 -0
  236. data/vendor/liburing/test/read-before-exit.c +129 -0
  237. data/vendor/liburing/test/read-mshot-empty.c +153 -0
  238. data/vendor/liburing/test/read-mshot.c +404 -0
  239. data/vendor/liburing/test/read-write.c +1013 -0
  240. data/vendor/liburing/test/recv-msgall-stream.c +398 -0
  241. data/vendor/liburing/test/recv-msgall.c +263 -0
  242. data/vendor/liburing/test/recv-multishot.c +602 -0
  243. data/vendor/liburing/test/recvsend_bundle.c +691 -0
  244. data/vendor/liburing/test/reg-fd-only.c +131 -0
  245. data/vendor/liburing/test/reg-hint.c +56 -0
  246. data/vendor/liburing/test/reg-reg-ring.c +90 -0
  247. data/vendor/liburing/test/regbuf-merge.c +91 -0
  248. data/vendor/liburing/test/register-restrictions.c +633 -0
  249. data/vendor/liburing/test/rename.c +132 -0
  250. data/vendor/liburing/test/ring-leak.c +283 -0
  251. data/vendor/liburing/test/ring-leak2.c +249 -0
  252. data/vendor/liburing/test/ringbuf-read.c +196 -0
  253. data/vendor/liburing/test/ringbuf-status.c +242 -0
  254. data/vendor/liburing/test/rsrc_tags.c +461 -0
  255. data/vendor/liburing/test/runtests-loop.sh +16 -0
  256. data/vendor/liburing/test/runtests-quiet.sh +11 -0
  257. data/vendor/liburing/test/runtests.sh +168 -0
  258. data/vendor/liburing/test/rw_merge_test.c +98 -0
  259. data/vendor/liburing/test/self.c +91 -0
  260. data/vendor/liburing/test/send-zerocopy.c +971 -0
  261. data/vendor/liburing/test/send_recv.c +412 -0
  262. data/vendor/liburing/test/send_recvmsg.c +444 -0
  263. data/vendor/liburing/test/shared-wq.c +84 -0
  264. data/vendor/liburing/test/short-read.c +75 -0
  265. data/vendor/liburing/test/shutdown.c +165 -0
  266. data/vendor/liburing/test/sigfd-deadlock.c +88 -0
  267. data/vendor/liburing/test/single-issuer.c +169 -0
  268. data/vendor/liburing/test/skip-cqe.c +428 -0
  269. data/vendor/liburing/test/socket-getsetsock-cmd.c +346 -0
  270. data/vendor/liburing/test/socket-io-cmd.c +237 -0
  271. data/vendor/liburing/test/socket-rw-eagain.c +149 -0
  272. data/vendor/liburing/test/socket-rw-offset.c +149 -0
  273. data/vendor/liburing/test/socket-rw.c +137 -0
  274. data/vendor/liburing/test/socket.c +408 -0
  275. data/vendor/liburing/test/splice.c +512 -0
  276. data/vendor/liburing/test/sq-full-cpp.cc +45 -0
  277. data/vendor/liburing/test/sq-full.c +45 -0
  278. data/vendor/liburing/test/sq-poll-dup.c +211 -0
  279. data/vendor/liburing/test/sq-poll-kthread.c +169 -0
  280. data/vendor/liburing/test/sq-poll-share.c +138 -0
  281. data/vendor/liburing/test/sq-space_left.c +159 -0
  282. data/vendor/liburing/test/sqpoll-disable-exit.c +196 -0
  283. data/vendor/liburing/test/sqpoll-exec.c +132 -0
  284. data/vendor/liburing/test/sqpoll-exit-hang.c +78 -0
  285. data/vendor/liburing/test/sqpoll-sleep.c +69 -0
  286. data/vendor/liburing/test/statx.c +172 -0
  287. data/vendor/liburing/test/stdout.c +232 -0
  288. data/vendor/liburing/test/submit-and-wait.c +108 -0
  289. data/vendor/liburing/test/submit-link-fail.c +156 -0
  290. data/vendor/liburing/test/submit-reuse.c +237 -0
  291. data/vendor/liburing/test/symlink.c +117 -0
  292. data/vendor/liburing/test/sync-cancel.c +235 -0
  293. data/vendor/liburing/test/teardowns.c +58 -0
  294. data/vendor/liburing/test/test.h +36 -0
  295. data/vendor/liburing/test/thread-exit.c +143 -0
  296. data/vendor/liburing/test/timeout-new.c +256 -0
  297. data/vendor/liburing/test/timeout.c +1798 -0
  298. data/vendor/liburing/test/truncate.c +186 -0
  299. data/vendor/liburing/test/tty-write-dpoll.c +60 -0
  300. data/vendor/liburing/test/unlink.c +112 -0
  301. data/vendor/liburing/test/version.c +25 -0
  302. data/vendor/liburing/test/wait-timeout.c +287 -0
  303. data/vendor/liburing/test/waitid.c +373 -0
  304. data/vendor/liburing/test/wakeup-hang.c +162 -0
  305. data/vendor/liburing/test/wq-aff.c +146 -0
  306. data/vendor/liburing/test/xattr.c +442 -0
  307. metadata +412 -0
@@ -0,0 +1,49 @@
1
+ Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
2
+ Upstream-Name: liburing
3
+ Source: https://git.kernel.dk/cgit/liburing/
4
+
5
+ Files: *
6
+ Copyright: 2019 Jens Axboe <axboe@kernel.dk>
7
+ License: GPL-2+ / MIT
8
+
9
+ Files: debian/*
10
+ Copyright: 2019 Changcheng Liu <changcheng.liu@aliyun.com>
11
+ License: GPL-2+
12
+
13
+ License: GPL-2+
14
+ This package is free software; you can redistribute it and/or modify
15
+ it under the terms of the GNU General Public License as published by
16
+ the Free Software Foundation; either version 2 of the License, or
17
+ (at your option) any later version.
18
+ .
19
+ This package is distributed in the hope that it will be useful,
20
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
21
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22
+ GNU General Public License for more details.
23
+ .
24
+ You should have received a copy of the GNU General Public License
25
+ along with this program. If not, see <https://www.gnu.org/licenses/>
26
+ .
27
+ On Debian systems, the complete text of the GNU General
28
+ Public License version 2 can be found in "/usr/share/common-licenses/GPL-2".
29
+
30
+ License: MIT
31
+ Copyright 2020 Jens Axboe
32
+
33
+ Permission is hereby granted, free of charge, to any person obtaining a copy
34
+ of this software and associated documentation files (the "Software"), to deal
35
+ in the Software without restriction, including without limitation the rights
36
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
37
+ copies of the Software, and to permit persons to whom the Software is
38
+ furnished to do so, subject to the following conditions:
39
+
40
+ The above copyright notice and this permission notice shall be included in all
41
+ copies or substantial portions of the Software.
42
+
43
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
44
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
45
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
46
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
47
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
48
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
49
+ SOFTWARE.
@@ -0,0 +1,4 @@
1
+ usr/include
2
+ usr/lib/*/lib*.so
3
+ usr/lib/*/lib*.a
4
+ usr/lib/*/pkgconfig
@@ -0,0 +1,5 @@
1
+ usr/share/man/man2/io_uring_*.2
2
+ usr/share/man/man3/io_uring_*.3
3
+ usr/share/man/man7/io_uring.7
4
+ usr/share/man/man3/IO_URING_*.3
5
+ usr/share/man/man3/__io_uring_*.3
@@ -0,0 +1 @@
1
+ usr/lib/*/lib*.so.*
@@ -0,0 +1,56 @@
1
+ liburing.so.2 liburing2 #MINVER# [47/1887]
2
+ LIBURING_2.0@LIBURING_2.0 0.7-1
3
+ LIBURING_2.1@LIBURING_2.1 0.7-1
4
+ LIBURING_2.2@LIBURING_2.2 0.7-1
5
+ LIBURING_2.3@LIBURING_2.3 0.7-1
6
+ __io_uring_get_cqe@LIBURING_2.0 0.7-1
7
+ __io_uring_sqring_wait@LIBURING_2.0 0.7-1
8
+ io_uring_enter2@LIBURING_2.3 0.7-1
9
+ io_uring_enter@LIBURING_2.3 0.7-1
10
+ io_uring_free_probe@LIBURING_2.0 0.7-1
11
+ io_uring_get_events@LIBURING_2.3 0.7-1
12
+ io_uring_get_probe@LIBURING_2.0 0.7-1
13
+ io_uring_get_probe_ring@LIBURING_2.0 0.7-1
14
+ io_uring_get_sqe@LIBURING_2.0 0.7-1
15
+ io_uring_mlock_size@LIBURING_2.1 0.7-1
16
+ io_uring_mlock_size_params@LIBURING_2.1 0.7-1
17
+ io_uring_peek_batch_cqe@LIBURING_2.0 0.7-1
18
+ io_uring_queue_exit@LIBURING_2.0 0.7-1
19
+ io_uring_queue_init@LIBURING_2.0 0.7-1
20
+ io_uring_queue_init_params@LIBURING_2.0 0.7-1
21
+ io_uring_queue_mmap@LIBURING_2.0 0.7-1
22
+ io_uring_register@LIBURING_2.3 0.7-1
23
+ io_uring_register_buf_ring@LIBURING_2.2 0.7-1
24
+ io_uring_register_buffers@LIBURING_2.0 0.7-1
25
+ io_uring_register_buffers_sparse@LIBURING_2.2 0.7-1
26
+ io_uring_register_buffers_tags@LIBURING_2.1 0.7-1
27
+ io_uring_register_buffers_update_tag@LIBURING_2.1 0.7-1
28
+ io_uring_register_eventfd@LIBURING_2.0 0.7-1
29
+ io_uring_register_eventfd_async@LIBURING_2.0 0.7-1
30
+ io_uring_register_file_alloc_range@LIBURING_2.3 0.7-1
31
+ io_uring_register_files@LIBURING_2.0 0.7-1
32
+ io_uring_register_files_sparse@LIBURING_2.2 0.7-1
33
+ io_uring_register_files_tags@LIBURING_2.1 0.7-1
34
+ io_uring_register_files_update@LIBURING_2.0 0.7-1
35
+ io_uring_register_files_update_tag@LIBURING_2.1 0.7-1
36
+ io_uring_register_iowq_aff@LIBURING_2.1 0.7-1
37
+ io_uring_register_iowq_max_workers@LIBURING_2.1 0.7-1
38
+ io_uring_register_personality@LIBURING_2.0 0.7-1
39
+ io_uring_register_probe@LIBURING_2.0 0.7-1
40
+ io_uring_register_ring_fd@LIBURING_2.2 0.7-1
41
+ io_uring_register_sync_cancel@LIBURING_2.3 0.7-1
42
+ io_uring_ring_dontfork@LIBURING_2.0 0.7-1
43
+ io_uring_setup@LIBURING_2.3 0.7-1
44
+ io_uring_submit@LIBURING_2.0 0.7-1
45
+ io_uring_submit_and_get_events@LIBURING_2.3 0.7-1
46
+ io_uring_submit_and_wait@LIBURING_2.0 0.7-1
47
+ io_uring_submit_and_wait_timeout@LIBURING_2.2 0.7-1
48
+ io_uring_unregister_buf_ring@LIBURING_2.2 0.7-1
49
+ io_uring_unregister_buffers@LIBURING_2.0 0.7-1
50
+ io_uring_unregister_eventfd@LIBURING_2.0 0.7-1
51
+ io_uring_unregister_files@LIBURING_2.0 0.7-1
52
+ io_uring_unregister_iowq_aff@LIBURING_2.1 0.7-1
53
+ io_uring_unregister_personality@LIBURING_2.0 0.7-1
54
+ io_uring_unregister_ring_fd@LIBURING_2.2 0.7-1
55
+ io_uring_wait_cqe_timeout@LIBURING_2.0 0.7-1
56
+ io_uring_wait_cqes@LIBURING_2.0 0.7-1
@@ -0,0 +1 @@
1
+ # You must remove unused comment lines for the released package.
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/make -f
2
+
3
+ # Uncomment this to turn on verbose mode.
4
+ #export DH_VERBOSE=1
5
+
6
+ DEB_BUILD_MAINT_OPTIONS = hardening=+bindnow
7
+ DEB_CFLAGS_MAINT_PREPEND = -Wall
8
+ DEB_BUILD_OPTIONS += nocheck
9
+
10
+ include /usr/share/dpkg/default.mk
11
+ include /usr/share/dpkg/buildtools.mk
12
+
13
+ %:
14
+ dh $@ --parallel
15
+
16
+ override_dh_auto_configure:
17
+ ./configure \
18
+ --prefix=/usr \
19
+ --includedir=/usr/include \
20
+ --datadir=/usr/share \
21
+ --mandir=/usr/share/man \
22
+ --libdir=/usr/lib/$(DEB_HOST_MULTIARCH) \
23
+ --libdevdir=/usr/lib/$(DEB_HOST_MULTIARCH) \
24
+ --cc=$(CC)
25
+
26
+ override_dh_auto_test:
27
+ ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS)))
28
+ $(MAKE) runtests
29
+ endif
@@ -0,0 +1 @@
1
+ 3.0 (quilt)
@@ -0,0 +1,2 @@
1
+ #abort-on-upstream-changes
2
+ #unapply-patches
@@ -0,0 +1 @@
1
+ extend-diff-ignore = "(^|/)(config\.log|config-host\.h|config-host\.mak|liburing\.pc)$"
@@ -0,0 +1,3 @@
1
+ # Site Directory Pattern Version Script
2
+ version=4
3
+ https://git.kernel.dk/cgit/liburing/ snapshot\/liburing-([\d\.]+)\.tar\.(?:gz|xz) debian uupdate
@@ -0,0 +1,53 @@
1
+ CPPFLAGS ?=
2
+ override CPPFLAGS += -D_GNU_SOURCE -I../src/include/
3
+ CFLAGS ?= -g -O2 -Wall
4
+ LDFLAGS ?=
5
+ override LDFLAGS += -L../src/ -luring
6
+
7
+ include ../Makefile.quiet
8
+
9
+ ifneq ($(MAKECMDGOALS),clean)
10
+ include ../config-host.mak
11
+ endif
12
+
13
+ LDFLAGS ?=
14
+ override LDFLAGS += -L../src/ -luring -lpthread
15
+
16
+ example_srcs := \
17
+ io_uring-close-test.c \
18
+ io_uring-cp.c \
19
+ io_uring-test.c \
20
+ io_uring-udp.c \
21
+ link-cp.c \
22
+ napi-busy-poll-client.c \
23
+ napi-busy-poll-server.c \
24
+ poll-bench.c \
25
+ send-zerocopy.c \
26
+ rsrc-update-bench.c \
27
+ proxy.c
28
+
29
+ all_targets :=
30
+
31
+
32
+ ifdef CONFIG_HAVE_UCONTEXT
33
+ example_srcs += ucontext-cp.c
34
+ endif
35
+ all_targets += ucontext-cp helpers.o
36
+
37
+ example_targets := $(patsubst %.c,%,$(patsubst %.cc,%,$(example_srcs)))
38
+ all_targets += $(example_targets)
39
+
40
+ helpers = helpers.o
41
+
42
+ all: $(example_targets)
43
+
44
+ helpers.o: helpers.c
45
+ $(QUIET_CC)$(CC) $(CPPFLAGS) $(CFLAGS) -o $@ -c $<
46
+
47
+ %: %.c $(helpers) ../src/liburing.a
48
+ $(QUIET_CC)$(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $< $(helpers) $(LDFLAGS)
49
+
50
+ clean:
51
+ @rm -f $(all_targets)
52
+
53
+ .PHONY: all clean
@@ -0,0 +1,62 @@
1
+ /* SPDX-License-Identifier: MIT */
2
+ #include <fcntl.h>
3
+ #include <stdint.h>
4
+ #include <netinet/in.h>
5
+ #include <arpa/inet.h>
6
+ #include <stdio.h>
7
+ #include <stdlib.h>
8
+ #include <string.h>
9
+ #include <sys/socket.h>
10
+ #include <sys/time.h>
11
+ #include <unistd.h>
12
+
13
+ #include "helpers.h"
14
+
15
+ int setup_listening_socket(int port, int ipv6)
16
+ {
17
+ struct sockaddr_in srv_addr = { };
18
+ struct sockaddr_in6 srv_addr6 = { };
19
+ int fd, enable, ret, domain;
20
+
21
+ if (ipv6)
22
+ domain = AF_INET6;
23
+ else
24
+ domain = AF_INET;
25
+
26
+ fd = socket(domain, SOCK_STREAM, 0);
27
+ if (fd == -1) {
28
+ perror("socket()");
29
+ return -1;
30
+ }
31
+
32
+ enable = 1;
33
+ ret = setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &enable, sizeof(int));
34
+ if (ret < 0) {
35
+ perror("setsockopt(SO_REUSEADDR)");
36
+ return -1;
37
+ }
38
+
39
+ if (ipv6) {
40
+ srv_addr6.sin6_family = AF_INET6;
41
+ srv_addr6.sin6_port = htons(port);
42
+ srv_addr6.sin6_addr = in6addr_any;
43
+ ret = bind(fd, (const struct sockaddr *)&srv_addr6, sizeof(srv_addr6));
44
+ } else {
45
+ srv_addr.sin_family = AF_INET;
46
+ srv_addr.sin_port = htons(port);
47
+ srv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
48
+ ret = bind(fd, (const struct sockaddr *)&srv_addr, sizeof(srv_addr));
49
+ }
50
+
51
+ if (ret < 0) {
52
+ perror("bind()");
53
+ return -1;
54
+ }
55
+
56
+ if (listen(fd, 1024) < 0) {
57
+ perror("listen()");
58
+ return -1;
59
+ }
60
+
61
+ return fd;
62
+ }
@@ -0,0 +1,7 @@
1
+ /* SPDX-License-Identifier: MIT */
2
+ #ifndef LIBURING_EX_HELPERS_H
3
+ #define LIBURING_EX_HELPERS_H
4
+
5
+ int setup_listening_socket(int port, int ipv6);
6
+
7
+ #endif
@@ -0,0 +1,123 @@
1
+ /* SPDX-License-Identifier: MIT */
2
+ /*
3
+ * Simple app that demonstrates how to setup an io_uring interface, and use it
4
+ * via a registered ring fd, without leaving the original fd open.
5
+ *
6
+ * gcc -Wall -O2 -D_GNU_SOURCE -o io_uring-close-test io_uring-close-test.c -luring
7
+ */
8
+ #include <stdio.h>
9
+ #include <fcntl.h>
10
+ #include <string.h>
11
+ #include <stdlib.h>
12
+ #include <sys/types.h>
13
+ #include <sys/stat.h>
14
+ #include <unistd.h>
15
+ #include "liburing.h"
16
+
17
+ #define QD 4
18
+
19
+ int main(int argc, char *argv[])
20
+ {
21
+ struct io_uring ring;
22
+ int i, fd, ret, pending, done;
23
+ struct io_uring_sqe *sqe;
24
+ struct io_uring_cqe *cqe;
25
+ struct iovec *iovecs;
26
+ struct stat sb;
27
+ ssize_t fsize;
28
+ off_t offset;
29
+ void *buf;
30
+
31
+ if (argc < 2) {
32
+ printf("%s: file\n", argv[0]);
33
+ return 1;
34
+ }
35
+
36
+ ret = io_uring_queue_init(QD, &ring, 0);
37
+ if (ret < 0) {
38
+ fprintf(stderr, "queue_init: %s\n", strerror(-ret));
39
+ return 1;
40
+ }
41
+
42
+ ret = io_uring_register_ring_fd(&ring);
43
+ if (ret < 0) {
44
+ fprintf(stderr, "register_ring_fd: %s\n", strerror(-ret));
45
+ return 1;
46
+ }
47
+ ret = io_uring_close_ring_fd(&ring);
48
+ if (ret < 0) {
49
+ fprintf(stderr, "close_ring_fd: %s\n", strerror(-ret));
50
+ return 1;
51
+ }
52
+
53
+ fd = open(argv[1], O_RDONLY);
54
+ if (fd < 0) {
55
+ perror("open");
56
+ return 1;
57
+ }
58
+
59
+ if (fstat(fd, &sb) < 0) {
60
+ perror("fstat");
61
+ return 1;
62
+ }
63
+
64
+ fsize = 0;
65
+ iovecs = calloc(QD, sizeof(struct iovec));
66
+ for (i = 0; i < QD; i++) {
67
+ if (posix_memalign(&buf, 4096, 4096))
68
+ return 1;
69
+ iovecs[i].iov_base = buf;
70
+ iovecs[i].iov_len = 4096;
71
+ fsize += 4096;
72
+ }
73
+
74
+ offset = 0;
75
+ i = 0;
76
+ do {
77
+ sqe = io_uring_get_sqe(&ring);
78
+ if (!sqe)
79
+ break;
80
+ io_uring_prep_readv(sqe, fd, &iovecs[i], 1, offset);
81
+ offset += iovecs[i].iov_len;
82
+ i++;
83
+ if (offset > sb.st_size)
84
+ break;
85
+ } while (1);
86
+
87
+ ret = io_uring_submit(&ring);
88
+ if (ret < 0) {
89
+ fprintf(stderr, "io_uring_submit: %s\n", strerror(-ret));
90
+ return 1;
91
+ } else if (ret != i) {
92
+ fprintf(stderr, "io_uring_submit submitted less %d\n", ret);
93
+ return 1;
94
+ }
95
+
96
+ done = 0;
97
+ pending = ret;
98
+ fsize = 0;
99
+ for (i = 0; i < pending; i++) {
100
+ ret = io_uring_wait_cqe(&ring, &cqe);
101
+ if (ret < 0) {
102
+ fprintf(stderr, "io_uring_wait_cqe: %s\n", strerror(-ret));
103
+ return 1;
104
+ }
105
+
106
+ done++;
107
+ ret = 0;
108
+ if (cqe->res != 4096 && cqe->res + fsize != sb.st_size) {
109
+ fprintf(stderr, "ret=%d, wanted 4096\n", cqe->res);
110
+ ret = 1;
111
+ }
112
+ fsize += cqe->res;
113
+ io_uring_cqe_seen(&ring, cqe);
114
+ if (ret)
115
+ break;
116
+ }
117
+
118
+ printf("Submitted=%d, completed=%d, bytes=%lu\n", pending, done,
119
+ (unsigned long) fsize);
120
+ close(fd);
121
+ io_uring_queue_exit(&ring);
122
+ return 0;
123
+ }
@@ -0,0 +1,282 @@
1
+ /* SPDX-License-Identifier: MIT */
2
+ /*
3
+ * gcc -Wall -O2 -D_GNU_SOURCE -o io_uring-cp io_uring-cp.c -luring
4
+ */
5
+ #include <stdio.h>
6
+ #include <fcntl.h>
7
+ #include <string.h>
8
+ #include <stdlib.h>
9
+ #include <unistd.h>
10
+ #include <assert.h>
11
+ #include <errno.h>
12
+ #include <inttypes.h>
13
+ #include <sys/types.h>
14
+ #include <sys/stat.h>
15
+ #include <sys/ioctl.h>
16
+ #include "liburing.h"
17
+
18
+ #define QD 64
19
+ #define BS (32*1024)
20
+
21
+ static int infd, outfd;
22
+
23
+ struct io_data {
24
+ int read;
25
+ off_t first_offset, offset;
26
+ size_t first_len;
27
+ struct iovec iov;
28
+ };
29
+
30
+ static int setup_context(unsigned entries, struct io_uring *ring)
31
+ {
32
+ int ret;
33
+
34
+ ret = io_uring_queue_init(entries, ring, 0);
35
+ if (ret < 0) {
36
+ fprintf(stderr, "queue_init: %s\n", strerror(-ret));
37
+ return -1;
38
+ }
39
+
40
+ return 0;
41
+ }
42
+
43
+ static int get_file_size(int fd, off_t *size)
44
+ {
45
+ struct stat st;
46
+
47
+ if (fstat(fd, &st) < 0)
48
+ return -1;
49
+ if (S_ISREG(st.st_mode)) {
50
+ *size = st.st_size;
51
+ return 0;
52
+ } else if (S_ISBLK(st.st_mode)) {
53
+ unsigned long long bytes;
54
+
55
+ if (ioctl(fd, BLKGETSIZE64, &bytes) != 0)
56
+ return -1;
57
+
58
+ *size = bytes;
59
+ return 0;
60
+ }
61
+
62
+ return -1;
63
+ }
64
+
65
+ static void queue_prepped(struct io_uring *ring, struct io_data *data)
66
+ {
67
+ struct io_uring_sqe *sqe;
68
+
69
+ sqe = io_uring_get_sqe(ring);
70
+ assert(sqe);
71
+
72
+ if (data->read)
73
+ io_uring_prep_readv(sqe, infd, &data->iov, 1, data->offset);
74
+ else
75
+ io_uring_prep_writev(sqe, outfd, &data->iov, 1, data->offset);
76
+
77
+ io_uring_sqe_set_data(sqe, data);
78
+ }
79
+
80
+ static int queue_read(struct io_uring *ring, off_t size, off_t offset)
81
+ {
82
+ struct io_uring_sqe *sqe;
83
+ struct io_data *data;
84
+
85
+ data = malloc(size + sizeof(*data));
86
+ if (!data)
87
+ return 1;
88
+
89
+ sqe = io_uring_get_sqe(ring);
90
+ if (!sqe) {
91
+ free(data);
92
+ return 1;
93
+ }
94
+
95
+ data->read = 1;
96
+ data->offset = data->first_offset = offset;
97
+
98
+ data->iov.iov_base = data + 1;
99
+ data->iov.iov_len = size;
100
+ data->first_len = size;
101
+
102
+ io_uring_prep_readv(sqe, infd, &data->iov, 1, offset);
103
+ io_uring_sqe_set_data(sqe, data);
104
+ return 0;
105
+ }
106
+
107
+ static void queue_write(struct io_uring *ring, struct io_data *data)
108
+ {
109
+ data->read = 0;
110
+ data->offset = data->first_offset;
111
+
112
+ data->iov.iov_base = data + 1;
113
+ data->iov.iov_len = data->first_len;
114
+
115
+ queue_prepped(ring, data);
116
+ io_uring_submit(ring);
117
+ }
118
+
119
+ static int copy_file(struct io_uring *ring, off_t insize)
120
+ {
121
+ unsigned long reads, writes;
122
+ struct io_uring_cqe *cqe;
123
+ off_t write_left, offset;
124
+ int ret;
125
+
126
+ write_left = insize;
127
+ writes = reads = offset = 0;
128
+
129
+ while (insize || write_left) {
130
+ unsigned long had_reads;
131
+ int got_comp;
132
+
133
+ /*
134
+ * Queue up as many reads as we can
135
+ */
136
+ had_reads = reads;
137
+ while (insize) {
138
+ off_t this_size = insize;
139
+
140
+ if (reads + writes >= QD)
141
+ break;
142
+ if (this_size > BS)
143
+ this_size = BS;
144
+ else if (!this_size)
145
+ break;
146
+
147
+ if (queue_read(ring, this_size, offset))
148
+ break;
149
+
150
+ insize -= this_size;
151
+ offset += this_size;
152
+ reads++;
153
+ }
154
+
155
+ if (had_reads != reads) {
156
+ ret = io_uring_submit(ring);
157
+ if (ret < 0) {
158
+ fprintf(stderr, "io_uring_submit: %s\n", strerror(-ret));
159
+ break;
160
+ }
161
+ }
162
+
163
+ /*
164
+ * Queue is full at this point. Find at least one completion.
165
+ */
166
+ got_comp = 0;
167
+ while (write_left) {
168
+ struct io_data *data;
169
+
170
+ if (!got_comp) {
171
+ ret = io_uring_wait_cqe(ring, &cqe);
172
+ got_comp = 1;
173
+ } else {
174
+ ret = io_uring_peek_cqe(ring, &cqe);
175
+ if (ret == -EAGAIN) {
176
+ cqe = NULL;
177
+ ret = 0;
178
+ }
179
+ }
180
+ if (ret < 0) {
181
+ fprintf(stderr, "io_uring_peek_cqe: %s\n",
182
+ strerror(-ret));
183
+ return 1;
184
+ }
185
+ if (!cqe)
186
+ break;
187
+
188
+ data = io_uring_cqe_get_data(cqe);
189
+ if (cqe->res < 0) {
190
+ if (cqe->res == -EAGAIN) {
191
+ queue_prepped(ring, data);
192
+ io_uring_submit(ring);
193
+ io_uring_cqe_seen(ring, cqe);
194
+ continue;
195
+ }
196
+ fprintf(stderr, "cqe failed: %s\n",
197
+ strerror(-cqe->res));
198
+ return 1;
199
+ } else if ((size_t)cqe->res != data->iov.iov_len) {
200
+ /* Short read/write, adjust and requeue */
201
+ data->iov.iov_base += cqe->res;
202
+ data->iov.iov_len -= cqe->res;
203
+ data->offset += cqe->res;
204
+ queue_prepped(ring, data);
205
+ io_uring_submit(ring);
206
+ io_uring_cqe_seen(ring, cqe);
207
+ continue;
208
+ }
209
+
210
+ /*
211
+ * All done. if write, nothing else to do. if read,
212
+ * queue up corresponding write.
213
+ */
214
+ if (data->read) {
215
+ queue_write(ring, data);
216
+ write_left -= data->first_len;
217
+ reads--;
218
+ writes++;
219
+ } else {
220
+ free(data);
221
+ writes--;
222
+ }
223
+ io_uring_cqe_seen(ring, cqe);
224
+ }
225
+ }
226
+
227
+ /* wait out pending writes */
228
+ while (writes) {
229
+ struct io_data *data;
230
+
231
+ ret = io_uring_wait_cqe(ring, &cqe);
232
+ if (ret) {
233
+ fprintf(stderr, "wait_cqe=%d\n", ret);
234
+ return 1;
235
+ }
236
+ if (cqe->res < 0) {
237
+ fprintf(stderr, "write res=%d\n", cqe->res);
238
+ return 1;
239
+ }
240
+ data = io_uring_cqe_get_data(cqe);
241
+ free(data);
242
+ writes--;
243
+ io_uring_cqe_seen(ring, cqe);
244
+ }
245
+
246
+ return 0;
247
+ }
248
+
249
+ int main(int argc, char *argv[])
250
+ {
251
+ struct io_uring ring;
252
+ off_t insize;
253
+ int ret;
254
+
255
+ if (argc < 3) {
256
+ printf("%s: infile outfile\n", argv[0]);
257
+ return 1;
258
+ }
259
+
260
+ infd = open(argv[1], O_RDONLY);
261
+ if (infd < 0) {
262
+ perror("open infile");
263
+ return 1;
264
+ }
265
+ outfd = open(argv[2], O_WRONLY | O_CREAT | O_TRUNC, 0644);
266
+ if (outfd < 0) {
267
+ perror("open outfile");
268
+ return 1;
269
+ }
270
+
271
+ if (setup_context(QD, &ring))
272
+ return 1;
273
+ if (get_file_size(infd, &insize))
274
+ return 1;
275
+
276
+ ret = copy_file(&ring, insize);
277
+
278
+ close(infd);
279
+ close(outfd);
280
+ io_uring_queue_exit(&ring);
281
+ return ret;
282
+ }