簡體   English   中英

io_uring: io_uring_wait_cqe_nr, io_uring_peek_batch_cqe

[英]io_uring: io_uring_wait_cqe_nr, io_uring_peek_batch_cqe

我想在github項目上試驗io_uring: https ://github.com/alexhultman/io_uring_epoll_benchmark

參考: https ://unixism.net/loti/ref-liburing/completion.html

但是我偶然發現了兩個功能:

  1. 無符號 io_uring_peek_batch_cqe(結構 io_uring *ring,結構 io_uring_cqe **cqes,無符號計數)

  2. int io_uring_wait_cqe_nr(結構 io_uring *ring,結構 io_uring_cqe **cqe_ptr,無符號 wait_nr)

我知道第一個函數將填充一個 I/O 完成數組,直到 cqes 計數,並且無論有多少 cqes 完成都會返回

然而,即使我等待 wait_nr 完成,第二個函數也只向 cqes 填充一個 I/O 完成,為什么會這樣,如果它等待特定數量的 cqes 完成,為什么我沒有填寫 I/O 數組像第一個功能一樣嗎?

比如我創建的例子:#define MAX_BATCH 2000

結構 io_uring_cqe **cqes = malloc(sizeof(struct io_uring_cqe *) * MAX_BATCH);

如果我在第一個函數上運行,我可以訪問 cqes[i] i = (0 to completions)

如果我在第二個函數上運行,我只能訪問 cqes[i] i = 0

我需要了解為什么第二個函數永遠不會像第一個函數那樣更新 cqes 數組

我已經解決了,作為第二個功能:

int io_uring_wait_cqe_nr(結構 io_uring *ring,結構 io_uring_cqe **cqe_ptr,無符號 wait_nr)

將等到 wait_nr 完成 cqe 完成后再繼續,它將返回 cqe I/O 完成並僅更新 cqes 的第一個數組,即 cqes[0],

但是對於第一個功能:

無符號 io_uring_peek_batch_cqe(結構 io_uring *ring,結構 io_uring_cqe **cqes,無符號計數)

無論是否有 cqe 都將返回,並將返回 cqes 的數量和 cqes I/O 的數組

在檢查 cqes 的 struct 是否正確完成異步后,用函數標記它:

void io_uring_cq_advance(struct io_uring *ring, struct io_uring_cqe *cqe, unsigned count) 釋放 cqes 條目,以便下一個 cqes 指向 cqes[0]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM