polyphony 0.94 → 0.95

Sign up to get free protection for your applications and to get access to all the features.
Files changed (306) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/test.yml +2 -2
  3. data/.gitignore +3 -3
  4. data/CHANGELOG.md +14 -0
  5. data/docs/api-reference/fiber.md +2 -2
  6. data/docs/api-reference/object.md +3 -3
  7. data/docs/main-concepts/exception-handling.md +2 -2
  8. data/ext/polyphony/backend_common.c +3 -3
  9. data/ext/polyphony/backend_io_uring.c +18 -16
  10. data/ext/polyphony/event.c +1 -1
  11. data/ext/polyphony/extconf.rb +5 -3
  12. data/ext/polyphony/fiber.c +5 -13
  13. data/ext/polyphony/io_extensions.c +1 -1
  14. data/ext/polyphony/pipe.c +1 -1
  15. data/ext/polyphony/polyphony.c +1 -1
  16. data/ext/polyphony/polyphony_ext.c +1 -1
  17. data/ext/polyphony/queue.c +1 -1
  18. data/ext/polyphony/ring_buffer.c +1 -0
  19. data/ext/polyphony/socket_extensions.c +1 -1
  20. data/ext/polyphony/thread.c +1 -1
  21. data/lib/polyphony/extensions/enumerator.rb +16 -0
  22. data/lib/polyphony/extensions/socket.rb +2 -0
  23. data/lib/polyphony/extensions.rb +1 -0
  24. data/lib/polyphony/version.rb +1 -1
  25. data/polyphony.gemspec +2 -2
  26. data/test/test_backend.rb +5 -1
  27. data/test/test_enumerator.rb +46 -0
  28. data/test/test_io.rb +241 -216
  29. data/test/test_socket.rb +1 -1
  30. data/test/test_thread_pool.rb +3 -3
  31. data/vendor/liburing/.github/workflows/build.yml +51 -5
  32. data/vendor/liburing/.github/workflows/shellcheck.yml +1 -1
  33. data/vendor/liburing/.gitignore +6 -123
  34. data/vendor/liburing/CHANGELOG +35 -0
  35. data/vendor/liburing/CITATION.cff +11 -0
  36. data/vendor/liburing/LICENSE +16 -3
  37. data/vendor/liburing/Makefile +3 -1
  38. data/vendor/liburing/Makefile.common +1 -0
  39. data/vendor/liburing/README +14 -2
  40. data/vendor/liburing/SECURITY.md +6 -0
  41. data/vendor/liburing/configure +16 -15
  42. data/vendor/liburing/examples/Makefile +4 -1
  43. data/vendor/liburing/examples/io_uring-udp.c +395 -0
  44. data/vendor/liburing/examples/poll-bench.c +101 -0
  45. data/vendor/liburing/examples/send-zerocopy.c +339 -0
  46. data/vendor/liburing/liburing.spec +1 -1
  47. data/vendor/liburing/man/io_uring.7 +38 -11
  48. data/vendor/liburing/man/io_uring_buf_ring_add.3 +53 -0
  49. data/vendor/liburing/man/io_uring_buf_ring_advance.3 +31 -0
  50. data/vendor/liburing/man/io_uring_buf_ring_cq_advance.3 +41 -0
  51. data/vendor/liburing/man/io_uring_buf_ring_init.3 +30 -0
  52. data/vendor/liburing/man/io_uring_buf_ring_mask.3 +27 -0
  53. data/vendor/liburing/man/io_uring_cq_advance.3 +29 -15
  54. data/vendor/liburing/man/io_uring_cq_has_overflow.3 +25 -0
  55. data/vendor/liburing/man/io_uring_cq_ready.3 +9 -8
  56. data/vendor/liburing/man/io_uring_cqe_get_data.3 +32 -13
  57. data/vendor/liburing/man/io_uring_cqe_get_data64.3 +1 -0
  58. data/vendor/liburing/man/io_uring_cqe_seen.3 +22 -12
  59. data/vendor/liburing/man/io_uring_enter.2 +249 -32
  60. data/vendor/liburing/man/io_uring_enter2.2 +1 -0
  61. data/vendor/liburing/man/io_uring_free_probe.3 +11 -8
  62. data/vendor/liburing/man/io_uring_get_events.3 +33 -0
  63. data/vendor/liburing/man/io_uring_get_probe.3 +9 -8
  64. data/vendor/liburing/man/io_uring_get_sqe.3 +29 -10
  65. data/vendor/liburing/man/io_uring_opcode_supported.3 +11 -10
  66. data/vendor/liburing/man/io_uring_peek_cqe.3 +38 -0
  67. data/vendor/liburing/man/io_uring_prep_accept.3 +197 -0
  68. data/vendor/liburing/man/io_uring_prep_accept_direct.3 +1 -0
  69. data/vendor/liburing/man/io_uring_prep_cancel.3 +118 -0
  70. data/vendor/liburing/man/io_uring_prep_cancel64.3 +1 -0
  71. data/vendor/liburing/man/io_uring_prep_close.3 +59 -0
  72. data/vendor/liburing/man/io_uring_prep_close_direct.3 +1 -0
  73. data/vendor/liburing/man/io_uring_prep_connect.3 +66 -0
  74. data/vendor/liburing/man/io_uring_prep_fadvise.3 +59 -0
  75. data/vendor/liburing/man/io_uring_prep_fallocate.3 +59 -0
  76. data/vendor/liburing/man/io_uring_prep_files_update.3 +92 -0
  77. data/vendor/liburing/man/io_uring_prep_fsync.3 +70 -0
  78. data/vendor/liburing/man/io_uring_prep_link.3 +1 -0
  79. data/vendor/liburing/man/io_uring_prep_linkat.3 +91 -0
  80. data/vendor/liburing/man/io_uring_prep_madvise.3 +56 -0
  81. data/vendor/liburing/man/io_uring_prep_mkdir.3 +1 -0
  82. data/vendor/liburing/man/io_uring_prep_mkdirat.3 +83 -0
  83. data/vendor/liburing/man/io_uring_prep_msg_ring.3 +39 -25
  84. data/vendor/liburing/man/io_uring_prep_multishot_accept.3 +1 -0
  85. data/vendor/liburing/man/io_uring_prep_multishot_accept_direct.3 +1 -0
  86. data/vendor/liburing/man/io_uring_prep_nop.3 +28 -0
  87. data/vendor/liburing/man/io_uring_prep_openat.3 +117 -0
  88. data/vendor/liburing/man/io_uring_prep_openat2.3 +117 -0
  89. data/vendor/liburing/man/io_uring_prep_openat2_direct.3 +1 -0
  90. data/vendor/liburing/man/io_uring_prep_openat_direct.3 +1 -0
  91. data/vendor/liburing/man/io_uring_prep_poll_add.3 +72 -0
  92. data/vendor/liburing/man/io_uring_prep_poll_multishot.3 +1 -0
  93. data/vendor/liburing/man/io_uring_prep_poll_remove.3 +55 -0
  94. data/vendor/liburing/man/io_uring_prep_poll_update.3 +89 -0
  95. data/vendor/liburing/man/io_uring_prep_provide_buffers.3 +131 -0
  96. data/vendor/liburing/man/io_uring_prep_read.3 +33 -14
  97. data/vendor/liburing/man/io_uring_prep_read_fixed.3 +39 -21
  98. data/vendor/liburing/man/io_uring_prep_readv.3 +49 -15
  99. data/vendor/liburing/man/io_uring_prep_readv2.3 +49 -17
  100. data/vendor/liburing/man/io_uring_prep_recv.3 +105 -0
  101. data/vendor/liburing/man/io_uring_prep_recv_multishot.3 +1 -0
  102. data/vendor/liburing/man/io_uring_prep_recvmsg.3 +124 -0
  103. data/vendor/liburing/man/io_uring_prep_recvmsg_multishot.3 +1 -0
  104. data/vendor/liburing/man/io_uring_prep_remove_buffers.3 +52 -0
  105. data/vendor/liburing/man/io_uring_prep_rename.3 +1 -0
  106. data/vendor/liburing/man/io_uring_prep_renameat.3 +96 -0
  107. data/vendor/liburing/man/io_uring_prep_send.3 +57 -0
  108. data/vendor/liburing/man/io_uring_prep_send_zc.3 +64 -0
  109. data/vendor/liburing/man/io_uring_prep_sendmsg.3 +69 -0
  110. data/vendor/liburing/man/io_uring_prep_shutdown.3 +53 -0
  111. data/vendor/liburing/man/io_uring_prep_socket.3 +118 -0
  112. data/vendor/liburing/man/io_uring_prep_socket_direct.3 +1 -0
  113. data/vendor/liburing/man/io_uring_prep_socket_direct_alloc.3 +1 -0
  114. data/vendor/liburing/man/io_uring_prep_splice.3 +80 -0
  115. data/vendor/liburing/man/io_uring_prep_statx.3 +74 -0
  116. data/vendor/liburing/man/io_uring_prep_symlink.3 +1 -0
  117. data/vendor/liburing/man/io_uring_prep_symlinkat.3 +85 -0
  118. data/vendor/liburing/man/io_uring_prep_sync_file_range.3 +59 -0
  119. data/vendor/liburing/man/io_uring_prep_tee.3 +74 -0
  120. data/vendor/liburing/man/io_uring_prep_timeout.3 +95 -0
  121. data/vendor/liburing/man/io_uring_prep_timeout_remove.3 +1 -0
  122. data/vendor/liburing/man/io_uring_prep_timeout_update.3 +98 -0
  123. data/vendor/liburing/man/io_uring_prep_unlink.3 +1 -0
  124. data/vendor/liburing/man/io_uring_prep_unlinkat.3 +82 -0
  125. data/vendor/liburing/man/io_uring_prep_write.3 +32 -15
  126. data/vendor/liburing/man/io_uring_prep_write_fixed.3 +39 -21
  127. data/vendor/liburing/man/io_uring_prep_writev.3 +50 -16
  128. data/vendor/liburing/man/io_uring_prep_writev2.3 +50 -17
  129. data/vendor/liburing/man/io_uring_queue_exit.3 +3 -4
  130. data/vendor/liburing/man/io_uring_queue_init.3 +58 -13
  131. data/vendor/liburing/man/io_uring_queue_init_params.3 +1 -0
  132. data/vendor/liburing/man/io_uring_recvmsg_cmsg_firsthdr.3 +1 -0
  133. data/vendor/liburing/man/io_uring_recvmsg_cmsg_nexthdr.3 +1 -0
  134. data/vendor/liburing/man/io_uring_recvmsg_name.3 +1 -0
  135. data/vendor/liburing/man/io_uring_recvmsg_out.3 +78 -0
  136. data/vendor/liburing/man/io_uring_recvmsg_payload.3 +1 -0
  137. data/vendor/liburing/man/io_uring_recvmsg_payload_length.3 +1 -0
  138. data/vendor/liburing/man/io_uring_recvmsg_validate.3 +1 -0
  139. data/vendor/liburing/man/io_uring_register.2 +153 -13
  140. data/vendor/liburing/man/io_uring_register_buf_ring.3 +140 -0
  141. data/vendor/liburing/man/io_uring_register_buffers.3 +32 -12
  142. data/vendor/liburing/man/io_uring_register_eventfd.3 +51 -0
  143. data/vendor/liburing/man/io_uring_register_eventfd_async.3 +1 -0
  144. data/vendor/liburing/man/io_uring_register_file_alloc_range.3 +52 -0
  145. data/vendor/liburing/man/io_uring_register_files.3 +33 -11
  146. data/vendor/liburing/man/io_uring_register_files_sparse.3 +1 -0
  147. data/vendor/liburing/man/io_uring_register_iowq_aff.3 +61 -0
  148. data/vendor/liburing/man/io_uring_register_iowq_max_workers.3 +71 -0
  149. data/vendor/liburing/man/io_uring_register_ring_fd.3 +49 -0
  150. data/vendor/liburing/man/io_uring_register_sync_cancel.3 +71 -0
  151. data/vendor/liburing/man/io_uring_setup.2 +119 -13
  152. data/vendor/liburing/man/io_uring_sq_ready.3 +14 -8
  153. data/vendor/liburing/man/io_uring_sq_space_left.3 +9 -9
  154. data/vendor/liburing/man/io_uring_sqe_set_data.3 +29 -11
  155. data/vendor/liburing/man/io_uring_sqe_set_data64.3 +1 -0
  156. data/vendor/liburing/man/io_uring_sqe_set_flags.3 +38 -11
  157. data/vendor/liburing/man/io_uring_sqring_wait.3 +13 -9
  158. data/vendor/liburing/man/io_uring_submit.3 +29 -12
  159. data/vendor/liburing/man/io_uring_submit_and_get_events.3 +31 -0
  160. data/vendor/liburing/man/io_uring_submit_and_wait.3 +16 -12
  161. data/vendor/liburing/man/io_uring_submit_and_wait_timeout.3 +30 -23
  162. data/vendor/liburing/man/io_uring_unregister_buf_ring.3 +30 -0
  163. data/vendor/liburing/man/io_uring_unregister_buffers.3 +11 -10
  164. data/vendor/liburing/man/io_uring_unregister_eventfd.3 +1 -0
  165. data/vendor/liburing/man/io_uring_unregister_files.3 +11 -10
  166. data/vendor/liburing/man/io_uring_unregister_iowq_aff.3 +1 -0
  167. data/vendor/liburing/man/io_uring_unregister_ring_fd.3 +32 -0
  168. data/vendor/liburing/man/io_uring_wait_cqe.3 +19 -12
  169. data/vendor/liburing/man/io_uring_wait_cqe_nr.3 +21 -14
  170. data/vendor/liburing/man/io_uring_wait_cqe_timeout.3 +27 -13
  171. data/vendor/liburing/man/io_uring_wait_cqes.3 +24 -14
  172. data/vendor/liburing/src/Makefile +8 -7
  173. data/vendor/liburing/src/arch/aarch64/lib.h +48 -0
  174. data/vendor/liburing/src/arch/aarch64/syscall.h +0 -4
  175. data/vendor/liburing/src/arch/generic/lib.h +0 -4
  176. data/vendor/liburing/src/arch/generic/syscall.h +29 -16
  177. data/vendor/liburing/src/arch/syscall-defs.h +41 -14
  178. data/vendor/liburing/src/arch/x86/lib.h +0 -21
  179. data/vendor/liburing/src/arch/x86/syscall.h +146 -10
  180. data/vendor/liburing/src/include/liburing/io_uring.h +245 -5
  181. data/vendor/liburing/src/include/liburing.h +468 -35
  182. data/vendor/liburing/src/int_flags.h +1 -0
  183. data/vendor/liburing/src/lib.h +20 -16
  184. data/vendor/liburing/src/liburing.map +16 -0
  185. data/vendor/liburing/src/nolibc.c +1 -1
  186. data/vendor/liburing/src/queue.c +87 -55
  187. data/vendor/liburing/src/register.c +129 -53
  188. data/vendor/liburing/src/setup.c +65 -28
  189. data/vendor/liburing/src/syscall.c +14 -32
  190. data/vendor/liburing/src/syscall.h +12 -64
  191. data/vendor/liburing/test/{232c93d07b74-test.c → 232c93d07b74.c} +8 -9
  192. data/vendor/liburing/test/{35fa71a030ca-test.c → 35fa71a030ca.c} +4 -4
  193. data/vendor/liburing/test/{500f9fbadef8-test.c → 500f9fbadef8.c} +7 -7
  194. data/vendor/liburing/test/{7ad0e4b2f83c-test.c → 7ad0e4b2f83c.c} +8 -7
  195. data/vendor/liburing/test/{8a9973408177-test.c → 8a9973408177.c} +4 -3
  196. data/vendor/liburing/test/{917257daa0fe-test.c → 917257daa0fe.c} +3 -2
  197. data/vendor/liburing/test/Makefile +60 -62
  198. data/vendor/liburing/test/{a0908ae19763-test.c → a0908ae19763.c} +3 -2
  199. data/vendor/liburing/test/{a4c0b3decb33-test.c → a4c0b3decb33.c} +3 -2
  200. data/vendor/liburing/test/accept-link.c +5 -4
  201. data/vendor/liburing/test/accept-reuse.c +17 -16
  202. data/vendor/liburing/test/accept-test.c +14 -10
  203. data/vendor/liburing/test/accept.c +529 -107
  204. data/vendor/liburing/test/across-fork.c +7 -6
  205. data/vendor/liburing/test/{b19062a56726-test.c → b19062a56726.c} +3 -2
  206. data/vendor/liburing/test/{b5837bd5311d-test.c → b5837bd5311d.c} +10 -9
  207. data/vendor/liburing/test/buf-ring.c +420 -0
  208. data/vendor/liburing/test/{ce593a6c480a-test.c → ce593a6c480a.c} +15 -12
  209. data/vendor/liburing/test/connect.c +8 -7
  210. data/vendor/liburing/test/cq-full.c +5 -4
  211. data/vendor/liburing/test/cq-overflow.c +242 -12
  212. data/vendor/liburing/test/cq-peek-batch.c +5 -4
  213. data/vendor/liburing/test/cq-ready.c +5 -4
  214. data/vendor/liburing/test/cq-size.c +5 -4
  215. data/vendor/liburing/test/{d4ae271dfaae-test.c → d4ae271dfaae.c} +2 -2
  216. data/vendor/liburing/test/{d77a67ed5f27-test.c → d77a67ed5f27.c} +6 -6
  217. data/vendor/liburing/test/defer-taskrun.c +336 -0
  218. data/vendor/liburing/test/defer.c +26 -14
  219. data/vendor/liburing/test/double-poll-crash.c +15 -5
  220. data/vendor/liburing/test/drop-submit.c +5 -3
  221. data/vendor/liburing/test/{eeed8b54e0df-test.c → eeed8b54e0df.c} +7 -6
  222. data/vendor/liburing/test/empty-eownerdead.c +4 -4
  223. data/vendor/liburing/test/eventfd-disable.c +48 -20
  224. data/vendor/liburing/test/eventfd-reg.c +10 -9
  225. data/vendor/liburing/test/eventfd-ring.c +13 -12
  226. data/vendor/liburing/test/eventfd.c +13 -12
  227. data/vendor/liburing/test/exit-no-cleanup.c +1 -1
  228. data/vendor/liburing/test/fadvise.c +3 -3
  229. data/vendor/liburing/test/fallocate.c +16 -9
  230. data/vendor/liburing/test/{fc2a85cb02ef-test.c → fc2a85cb02ef.c} +4 -3
  231. data/vendor/liburing/test/fd-pass.c +187 -0
  232. data/vendor/liburing/test/file-register.c +302 -36
  233. data/vendor/liburing/test/file-update.c +62 -4
  234. data/vendor/liburing/test/file-verify.c +6 -2
  235. data/vendor/liburing/test/files-exit-hang-poll.c +11 -25
  236. data/vendor/liburing/test/files-exit-hang-timeout.c +13 -10
  237. data/vendor/liburing/test/fixed-buf-iter.c +115 -0
  238. data/vendor/liburing/test/fixed-link.c +10 -10
  239. data/vendor/liburing/test/fixed-reuse.c +160 -0
  240. data/vendor/liburing/test/fpos.c +6 -3
  241. data/vendor/liburing/test/fsync.c +3 -3
  242. data/vendor/liburing/test/hardlink.c +10 -6
  243. data/vendor/liburing/test/helpers.c +137 -4
  244. data/vendor/liburing/test/helpers.h +27 -0
  245. data/vendor/liburing/test/io-cancel.c +16 -11
  246. data/vendor/liburing/test/io_uring_enter.c +46 -81
  247. data/vendor/liburing/test/io_uring_passthrough.c +451 -0
  248. data/vendor/liburing/test/io_uring_register.c +59 -229
  249. data/vendor/liburing/test/io_uring_setup.c +24 -29
  250. data/vendor/liburing/test/iopoll-leak.c +85 -0
  251. data/vendor/liburing/test/iopoll.c +16 -9
  252. data/vendor/liburing/test/lfs-openat-write.c +3 -1
  253. data/vendor/liburing/test/link-timeout.c +4 -3
  254. data/vendor/liburing/test/link.c +8 -7
  255. data/vendor/liburing/test/madvise.c +2 -2
  256. data/vendor/liburing/test/mkdir.c +9 -5
  257. data/vendor/liburing/test/msg-ring.c +46 -20
  258. data/vendor/liburing/test/multicqes_drain.c +51 -12
  259. data/vendor/liburing/test/nolibc.c +60 -0
  260. data/vendor/liburing/test/nop.c +78 -16
  261. data/vendor/liburing/test/nvme.h +168 -0
  262. data/vendor/liburing/test/open-direct-link.c +188 -0
  263. data/vendor/liburing/test/open-direct-pick.c +180 -0
  264. data/vendor/liburing/test/openat2.c +3 -3
  265. data/vendor/liburing/test/poll-cancel-all.c +472 -0
  266. data/vendor/liburing/test/poll-link.c +9 -18
  267. data/vendor/liburing/test/poll-mshot-overflow.c +162 -0
  268. data/vendor/liburing/test/poll-mshot-update.c +83 -33
  269. data/vendor/liburing/test/pollfree.c +2 -2
  270. data/vendor/liburing/test/read-before-exit.c +112 -0
  271. data/vendor/liburing/test/read-write.c +83 -1
  272. data/vendor/liburing/test/recv-msgall-stream.c +398 -0
  273. data/vendor/liburing/test/recv-msgall.c +265 -0
  274. data/vendor/liburing/test/recv-multishot.c +505 -0
  275. data/vendor/liburing/test/rename.c +2 -5
  276. data/vendor/liburing/test/ring-leak.c +97 -0
  277. data/vendor/liburing/test/ringbuf-read.c +200 -0
  278. data/vendor/liburing/test/rsrc_tags.c +25 -13
  279. data/vendor/liburing/test/runtests-quiet.sh +11 -0
  280. data/vendor/liburing/test/runtests.sh +18 -20
  281. data/vendor/liburing/test/rw_merge_test.c +3 -2
  282. data/vendor/liburing/test/send-zerocopy.c +684 -0
  283. data/vendor/liburing/test/send_recv.c +49 -2
  284. data/vendor/liburing/test/send_recvmsg.c +165 -55
  285. data/vendor/liburing/test/shutdown.c +3 -4
  286. data/vendor/liburing/test/sigfd-deadlock.c +22 -8
  287. data/vendor/liburing/test/single-issuer.c +171 -0
  288. data/vendor/liburing/test/socket-rw-eagain.c +2 -12
  289. data/vendor/liburing/test/socket-rw-offset.c +2 -11
  290. data/vendor/liburing/test/socket-rw.c +2 -11
  291. data/vendor/liburing/test/socket.c +409 -0
  292. data/vendor/liburing/test/sq-poll-dup.c +1 -1
  293. data/vendor/liburing/test/sq-poll-share.c +1 -1
  294. data/vendor/liburing/test/statx.c +2 -2
  295. data/vendor/liburing/test/submit-and-wait.c +108 -0
  296. data/vendor/liburing/test/submit-link-fail.c +5 -3
  297. data/vendor/liburing/test/submit-reuse.c +0 -2
  298. data/vendor/liburing/test/sync-cancel.c +235 -0
  299. data/vendor/liburing/test/test.h +35 -0
  300. data/vendor/liburing/test/timeout-overflow.c +11 -11
  301. data/vendor/liburing/test/timeout.c +7 -7
  302. data/vendor/liburing/test/tty-write-dpoll.c +60 -0
  303. data/vendor/liburing/test/unlink.c +1 -1
  304. data/vendor/liburing/test/xattr.c +425 -0
  305. metadata +143 -22
  306. data/Gemfile.lock +0 -78
@@ -4,38 +4,58 @@
4
4
  .\"
5
5
  .TH io_uring_register_buffers 3 "November 15, 2021" "liburing-2.1" "liburing Manual"
6
6
  .SH NAME
7
- io_uring_register_buffers - register buffers for fixed buffer operations
8
- .fi
7
+ io_uring_register_buffers \- register buffers for fixed buffer operations
9
8
  .SH SYNOPSIS
10
9
  .nf
11
- .BR "#include <liburing.h>"
10
+ .B #include <liburing.h>
12
11
  .PP
13
- .BI "int io_uring_register_buffers(struct io_uring *ring,"
14
- .BI " const struct iovec *iovecs,
15
- .BI " unsigned nr_iovecs)"
12
+ .BI "int io_uring_register_buffers(struct io_uring *" ring ",
13
+ .BI " const struct iovec *" iovecs ",
14
+ .BI " unsigned " nr_iovecs ");"
16
15
  .PP
16
+ .BI "int io_uring_register_buffers_sparse(struct io_uring *" ring ",
17
+ .BI " unsigned " nr_iovecs ");"
18
+ .fi
17
19
  .SH DESCRIPTION
18
20
  .PP
19
- The io_uring_register_buffers() function registers
21
+ The
22
+ .BR io_uring_register_buffers (3)
23
+ function registers
20
24
  .I nr_iovecs
21
25
  number of buffers defined by the array
22
26
  .I iovecs
23
27
  belonging to the
24
- .I ring.
28
+ .IR ring .
29
+
30
+ The
31
+ .BR io_uring_register_buffers_sparse (3)
32
+ function registers
33
+ .I nr_iovecs
34
+ empty buffers belonging to the
35
+ .IR ring .
36
+ These buffers must be updated before use, using eg
37
+ .BR io_uring_register_buffers_update_tag (3).
25
38
 
26
39
  After the caller has registered the buffers, they can be used with one of the
27
40
  fixed buffers functions.
28
41
 
29
42
  Registered buffers is an optimization that is useful in conjunction with
30
43
  .B O_DIRECT
31
- reads and writes, where maps the specified range into the kernel once when
32
- the buffer is registered, rather than doing a map and unmap for each IO
44
+ reads and writes, where it maps the specified range into the kernel once when
45
+ the buffer is registered rather than doing a map and unmap for each IO
33
46
  every time IO is performed to that region. Additionally, it also avoids
34
47
  manipulating the page reference counts for each IO.
35
48
 
36
49
  .SH RETURN VALUE
37
50
  On success
38
51
  .BR io_uring_register_buffers (3)
39
- returns 0. On failure it returns -errno.
52
+ and
53
+ .BR io_uring_register_buffers_sparse (3)
54
+ return 0. On failure they return
55
+ .BR -errno .
40
56
  .SH SEE ALSO
41
- .BR io_uring_get_sqe (3), io_uring_unregister_buffers (3), io_uring_prep_read_fixed (3), io_uring_prep_write_fixed (3)
57
+ .BR io_uring_get_sqe (3),
58
+ .BR io_uring_unregister_buffers (3),
59
+ .BR io_uring_register_buf_ring (3),
60
+ .BR io_uring_prep_read_fixed (3),
61
+ .BR io_uring_prep_write_fixed (3)
@@ -0,0 +1,51 @@
1
+ .\" Copyright (C) 2022 Jens Axboe <axboe@kernel.dk>
2
+ .\"
3
+ .\" SPDX-License-Identifier: LGPL-2.0-or-later
4
+ .\"
5
+ .TH io_uring_register_eventfd 3 "April 16, 2022" "liburing-2.2" "liburing Manual"
6
+ .SH NAME
7
+ io_uring_register_eventfd \- register an eventfd with a ring
8
+ .SH SYNOPSIS
9
+ .nf
10
+ .B #include <liburing.h>
11
+ .PP
12
+ .BI "int io_uring_register_eventfd(struct io_uring *" ring ","
13
+ .BI " int " fd ");"
14
+ .PP
15
+ .BI "int io_uring_register_eventfd_async(struct io_uring *" ring ","
16
+ .BI " int " fd ");"
17
+ .PP
18
+ .BI "int io_uring_unregister_eventfd(struct io_uring *" ring ");"
19
+ .fi
20
+ .SH DESCRIPTION
21
+ .PP
22
+ .BR io_uring_register_eventfd (3)
23
+ registers the eventfd file descriptor
24
+ .I fd
25
+ with the ring identified by
26
+ .IR ring .
27
+
28
+ Whenever completions are posted to the CQ ring, an eventfd notification
29
+ is generated with the registered eventfd descriptor. If
30
+ .BR io_uring_register_eventfd_async (3)
31
+ is used, only events that completed out-of-line will trigger a notification.
32
+
33
+ It notifications are no longer desired,
34
+ .BR io_uring_unregister_eventfd (3)
35
+ may be called to remove the eventfd registration. No eventfd argument is
36
+ needed, as a ring can only have a single eventfd registered.
37
+
38
+ .SH NOTES
39
+ While io_uring generally takes care to avoid spurious events, they can occur.
40
+ Similarly, batched completions of CQEs may only trigger a single eventfd
41
+ notification even if multiple CQEs are posted. The application should make no
42
+ assumptions on number of events being available having a direct correlation to
43
+ eventfd notifications posted. An eventfd notification must thus only be treated
44
+ as a hint to check the CQ ring for completions.
45
+ .SH RETURN VALUE
46
+ Returns 0 on success, or
47
+ or
48
+ .BR -errno
49
+ on error.
50
+ .SH SEE ALSO
51
+ .BR eventfd (2)
@@ -0,0 +1 @@
1
+ io_uring_register_eventfd.3
@@ -0,0 +1,52 @@
1
+ .\" Copyright (C) 2022 Jens Axboe <axboe@kernel.dk>
2
+ .\"
3
+ .\" SPDX-License-Identifier: LGPL-2.0-or-later
4
+ .\"
5
+ .TH io_uring_register_file_alloc_range 3 "Oct 21, 2022" "liburing-2.3" "liburing Manual"
6
+ .SH NAME
7
+ io_uring_register_file_alloc_range \- set range for fixed file allocations
8
+ .SH SYNOPSIS
9
+ .nf
10
+ .B #include <liburing.h>
11
+ .PP
12
+ .BI "int io_uring_register_file_alloc_range(struct io_uring *" ring ",
13
+ .BI " unsigned " off ","
14
+ .BI " unsigned " len ");"
15
+ .BI "
16
+ .fi
17
+ .SH DESCRIPTION
18
+ .PP
19
+ The
20
+ .BR io_uring_register_file_alloc_range (3)
21
+ function sets the allowable range for fixed file index allocations within the
22
+ kernel. When requests that can instantiate a new fixed file are used with
23
+ .B IORING_FILE_INDEX_ALLOC ,
24
+ the application is asking the kernel to allocate a new fixed file descriptor
25
+ rather than pass in a specific value for one. By default, the kernel will
26
+ pick any available fixed file descriptor within the range available. Calling
27
+ this function with
28
+ .I off
29
+ set to the starting offset and
30
+ .I len
31
+ set to the number of descriptors, the application can limit the allocated
32
+ descriptors to that particular range. This effectively allows the application
33
+ to set aside a range just for dynamic allocations, with the remainder being
34
+ used for specific values.
35
+
36
+ The application must have registered a fixed file table upfront, eg through
37
+ .BR io_uring_register_files (3)
38
+ or
39
+ .BR io_uring_register_files_sparse (3) .
40
+
41
+ Available since 6.0.
42
+
43
+ .SH RETURN VALUE
44
+ On success
45
+ .BR io_uring_register_buf_ring (3)
46
+ returns 0. On failure it returns
47
+ .BR -errno .
48
+ .SH SEE ALSO
49
+ .BR io_uring_register_files (3)
50
+ .BR io_uring_prep_accept_direct (3)
51
+ .BR io_uring_prep_openat_direct (3)
52
+ .BR io_uring_prep_socket_direct (3)
@@ -4,19 +4,23 @@
4
4
  .\"
5
5
  .TH io_uring_register_files 3 "November 15, 2021" "liburing-2.1" "liburing Manual"
6
6
  .SH NAME
7
- io_uring_register_files - register file descriptors
8
- .fi
7
+ io_uring_register_files \- register file descriptors
9
8
  .SH SYNOPSIS
10
9
  .nf
11
- .BR "#include <liburing.h>"
10
+ .B #include <liburing.h>
12
11
  .PP
13
- .BI "int io_uring_register_files(struct io_uring *ring,"
14
- .BI " const int *files,"
15
- .BI " unsigned nr_files)"
12
+ .BI "int io_uring_register_files(struct io_uring *" ring ","
13
+ .BI " const int *" files ","
14
+ .BI " unsigned " nr_files ");"
16
15
  .PP
16
+ .BI "int io_uring_register_files_sparse(struct io_uring *" ring ","
17
+ .BI " unsigned " nr_files ");"
18
+ .fi
17
19
  .SH DESCRIPTION
18
20
  .PP
19
- The io_uring_register_files() function registers
21
+ The
22
+ .BR io_uring_register_files (3)
23
+ function registers
20
24
  .I nr_files
21
25
  number of file descriptors defined by the array
22
26
  .I files
@@ -24,12 +28,30 @@ belonging to the
24
28
  .I ring
25
29
  for subsequent operations.
26
30
 
27
- After the caller has registered the buffers, they can be used with the
28
- submission queue polling operations.
31
+ The
32
+ .BR io_uring_register_files_sparse (3)
33
+ function registers an empty file table of
34
+ .I nr_files
35
+ number of file descriptors. The sparse variant is available in kernels 5.19
36
+ and later.
37
+
38
+ Registering a file table is a prerequisite for using any request that uses
39
+ direct descriptors.
40
+
41
+ Registered files have less overhead per operation than normal files. This
42
+ is due to the kernel grabbing a reference count on a file when an operation
43
+ begins, and dropping it when it's done. When the process file table is
44
+ shared, for example if the process has ever created any threads, then this
45
+ cost goes up even more. Using registered files reduces the overhead of
46
+ file reference management across requests that operate on a file.
29
47
 
30
48
  .SH RETURN VALUE
31
49
  On success
32
50
  .BR io_uring_register_files (3)
33
- returns 0. On failure it returns -errno.
51
+ and
52
+ .BR io_uring_register_files_sparse (3)
53
+ return 0. On failure they return
54
+ .BR -errno .
34
55
  .SH SEE ALSO
35
- .BR io_uring_get_sqe (3), io_uring_unregister_files (3)
56
+ .BR io_uring_get_sqe (3),
57
+ .BR io_uring_unregister_files (3)
@@ -0,0 +1 @@
1
+ io_uring_register_files.3
@@ -0,0 +1,61 @@
1
+ .\" Copyright (C) 2022 Jens Axboe <axboe@kernel.dk>
2
+ .\"
3
+ .\" SPDX-License-Identifier: LGPL-2.0-or-later
4
+ .\"
5
+ .TH io_uring_register_iowq_aff 3 "March 13, 2022" "liburing-2.2" "liburing Manual"
6
+ .SH NAME
7
+ io_uring_register_iowq_aff \- register async worker CPU affinities
8
+ .SH SYNOPSIS
9
+ .nf
10
+ .B #include <sched.h>
11
+ .B #include <liburing.h>
12
+ .PP
13
+ .BI "int io_uring_register_iowq_aff(struct io_uring *" ring ","
14
+ .BI " size_t " cpusz ","
15
+ .BI " const cpu_set_t *" mask ");
16
+ .PP
17
+ .BI "void io_uring_unregister_iowq_aff(struct io_uring *" ring ");"
18
+ .fi
19
+ .SH DESCRIPTION
20
+ .PP
21
+ The
22
+ .BR io_uring_prep_register_iowq_aff (3)
23
+ function registers a set of CPU affinities to be used by the io_uring async
24
+ workers. By default, io_uring async workers are allowed to run on any CPU in
25
+ the system. If this function is called with
26
+ .I ring
27
+ set to the ring in question and
28
+ .I mask
29
+ set to a pointer to a
30
+ .B cpu_set_t
31
+ value and
32
+ .I cpusz
33
+ set to the size of the CPU set, then async workers will only be allowed to run
34
+ on the CPUs specified in the mask. Existing workers may need to hit a schedule
35
+ point before they are migrated.
36
+
37
+ For unregistration,
38
+ .BR io_uring_unregister_iowq_aff (3)
39
+ may be called to restore CPU affinities to the default.
40
+
41
+ .SH RETURN VALUE
42
+ Returns
43
+ .B 0
44
+ on success, or any of the following values in case of error.
45
+ .TP
46
+ .B -EFAULT
47
+ The kernel was unable to copy the memory pointer to by
48
+ .I mask
49
+ as it was invalid.
50
+ .TP
51
+ .B -ENOMEM
52
+ The kernel was unable to allocate memory for the new CPU mask.
53
+ .TP
54
+ .B -EINVAL
55
+ .I cpusz
56
+ or
57
+ .I mask
58
+ was NULL/0, or any other value specified was invalid.
59
+ .SH SEE ALSO
60
+ .BR io_uring_queue_init (3),
61
+ .BR io_uring_register (2)
@@ -0,0 +1,71 @@
1
+ .\" Copyright (C) 2022 Jens Axboe <axboe@kernel.dk>
2
+ .\"
3
+ .\" SPDX-License-Identifier: LGPL-2.0-or-later
4
+ .\"
5
+ .TH io_uring_register_iowq_max_workers 3 "March 13, 2022" "liburing-2.2" "liburing Manual"
6
+ .SH NAME
7
+ io_uring_register_iowq_max_workers \- modify the maximum allowed async workers
8
+ .SH SYNOPSIS
9
+ .nf
10
+ .B #include <liburing.h>
11
+ .PP
12
+ .BI "int io_uring_register_iowq_max_workers(struct io_uring *" ring ","
13
+ .BI " unsigned int *" values ");"
14
+ .fi
15
+ .SH DESCRIPTION
16
+ .PP
17
+ io_uring async workers are split into two types:
18
+ .TP
19
+ .B Bounded
20
+ These workers have a bounded execution time. Examples of that are filesystem
21
+ reads, which normally complete in a relatively short amount of time. In case
22
+ of disk failures, they are still bounded by a timeout operation that will
23
+ abort them if exceeded.
24
+ .TP
25
+ .B Unbounded
26
+ Work items here may take an indefinite amount of time to complete. Examples
27
+ include doing IO to sockets, pipes, or any other non-regular type of file.
28
+
29
+ .PP
30
+ By default, the amount of bounded IO workers is limited to how many SQ entries
31
+ the ring was setup with, or 4 times the number of online CPUs in the system,
32
+ whichever is smaller. Unbounded workers are only limited by the process task
33
+ limit, as indicated by the rlimit
34
+ .B RLIMIT_NPROC
35
+ limit.
36
+
37
+ This can be modified by calling
38
+ .B io_uring_register_iowq_max_workers
39
+ with
40
+ .I ring
41
+ set to the ring in question, and
42
+ .I values
43
+ pointing to an array of two values. The first element should contain the number
44
+ of desired bounded workers, and the second element should contain the number
45
+ of desired unbounded workers. These are both maximum values, io_uring will
46
+ not maintain a high count of idle workers, they are reaped when they are not
47
+ necessary anymore.
48
+
49
+ If called with both values set to 0, the existing values are returned.
50
+
51
+ .SH RETURN VALUE
52
+ Returns
53
+ .B 0
54
+ on success, with
55
+ .I values
56
+ containing the previous values for the settings. On error, any of the following
57
+ may be returned.
58
+ .TP
59
+ .B -EFAULT
60
+ The kernel was unable to copy the memory pointer to by
61
+ .I values
62
+ as it was invalid.
63
+ .TP
64
+ .B -EINVAL
65
+ .I values
66
+ was
67
+ .B NULL
68
+ or the new values exceeded the maximum allowed value.
69
+ .SH SEE ALSO
70
+ .BR io_uring_queue_init (3),
71
+ .BR io_uring_register (2)
@@ -0,0 +1,49 @@
1
+ .\" Copyright (C) 2022 Jens Axboe <axboe@kernel.dk>
2
+ .\"
3
+ .\" SPDX-License-Identifier: LGPL-2.0-or-later
4
+ .\"
5
+ .TH io_uring_register_ring_fd 3 "March 11, 2022" "liburing-2.2" "liburing Manual"
6
+ .SH NAME
7
+ io_uring_register_ring_fd \- register a ring file descriptor
8
+ .SH SYNOPSIS
9
+ .nf
10
+ .B #include <liburing.h>
11
+ .PP
12
+ .BI "int io_uring_register_ring_fd(struct io_uring *" ring ");"
13
+ .fi
14
+ .SH DESCRIPTION
15
+ .PP
16
+ .BR io_uring_register_ring_fd (3)
17
+ registers the file descriptor of the ring.
18
+
19
+ Whenever
20
+ .BR io_uring_enter (2)
21
+ is called to submit request or wait for completions, the kernel must grab a
22
+ reference to the file descriptor. If the application using io_uring is threaded,
23
+ the file table is marked as shared, and the reference grab and put of the file
24
+ descriptor count is more expensive than it is for a non-threaded application.
25
+
26
+ Similarly to how io_uring allows registration of files, this allow registration
27
+ of the ring file descriptor itself. This reduces the overhead of the
28
+ .BR io_uring_enter (2)
29
+ system call.
30
+
31
+ If an application using liburing is threaded, then an application should call
32
+ this function to register the ring descriptor when a ring is set up. See NOTES
33
+ for restrictions when a ring is shared.
34
+
35
+ .SH NOTES
36
+ When the ring descriptor is registered, it is stored internally in the
37
+ .I struct io_uring
38
+ structure. For applications that share a ring between threads, for example
39
+ having one thread do submits and another reap events, then this optimization
40
+ cannot be used as each thread may have a different index for the registered
41
+ ring fd.
42
+ .SH RETURN VALUE
43
+ Returns 1 on success, indicating that one file descriptor was registered,
44
+ or
45
+ .BR -errno
46
+ on error.
47
+ .SH SEE ALSO
48
+ .BR io_uring_unregister_ring_fd (3),
49
+ .BR io_uring_register_files (3)
@@ -0,0 +1,71 @@
1
+ .\" Copyright (C) 2022 Jens Axboe <axboe@kernel.dk>
2
+ .\"
3
+ .\" SPDX-License-Identifier: LGPL-2.0-or-later
4
+ .\"
5
+ .TH io_uring_register_sync_cancel 3 "September 21, 2022" "liburing-2.3" "liburing Manual"
6
+ .SH NAME
7
+ io_uring_register_sync_cancel \- issue a synchronous cancelation request
8
+ .SH SYNOPSIS
9
+ .nf
10
+ .B #include <liburing.h>
11
+ .PP
12
+ .BI "int io_uring_register_sync_cancel(struct io_uring *" ring ",
13
+ .BI " struct io_uring_sync_cancel_reg *" reg ");
14
+ .PP
15
+ .SH DESCRIPTION
16
+ .PP
17
+ The
18
+ .BR io_uring_register_sync_cancel (3)
19
+ function performs a synchronous cancelation request based on the parameters
20
+ specified in
21
+ .I reg .
22
+
23
+ The
24
+ .I reg
25
+ argument must be filled in with the appropriate information for the
26
+ cancelation request. It looks as follows:
27
+ .PP
28
+ .in +4n
29
+ .EX
30
+ struct io_uring_sync_cancel_reg {
31
+ __u64 addr;
32
+ __s32 fd;
33
+ __u32 flags;
34
+ struct __kernel_timespec timeout;
35
+ __u64 pad[4];
36
+ };
37
+ .EE
38
+ .in
39
+ .PP
40
+
41
+ The arguments largely mirror what the async prep functions support, see
42
+ .BR io_uring_prep_cancel (3)
43
+ for details. Similarly, the return value is the same. The exception is the
44
+ .I timeout
45
+ argument, which can be used to limit the time that the kernel will wait for
46
+ cancelations to be successful. If the
47
+ .I tv_sec
48
+ and
49
+ .I tv_nsec
50
+ values are set to anything but
51
+ .B -1UL ,
52
+ then they indicate a relative timeout upon which cancelations should be
53
+ completed by.
54
+
55
+ The
56
+ .I pad
57
+ values must be zero filled.
58
+
59
+ .SH RETURN VALUE
60
+ See
61
+ .BR io_uring_prep_cancel (3)
62
+ for details on the return value. If
63
+ .I timeout
64
+ is set to indicate a timeout, then
65
+ .B -ETIME
66
+ will be returned if exceeded. If an unknown value is set in the request,
67
+ or if the pad values are not cleared to zero, then
68
+ .I -EINVAL
69
+ is returned.
70
+ .SH SEE ALSO
71
+ .BR io_uring_prep_cancel (3)