-
Notifications
You must be signed in to change notification settings - Fork 945
Open
Description
3FS/src/storage/aio
/AioReadWorker.cc
在这一步部分的代码当中,对于iouring的提交和收割,你们是这么写的:
do {
// 2. collect a batch of read jobs.
status.collect();
// 3. submit a batch of read jobs.
status.submit();
// 4. wait a batch of events.
while (status.inflight()) {
status.reap(config_.min_complete());
};
} while (status.hasUnfinishedBatchReadJob());
也就是基本遵循(一次提交,对应一次io收割)。
这一步似乎写成两个轮询的线程会有更高的效率?因为在现有实现下,对于ssd队列深度的使用基本等于一次提交的子请求数量。如果改写成在两个线程中进行:
// submit IO thread
do {
// 2. collect a batch of read jobs.
status.collect();
// 3. submit a batch of read jobs.
status.submit();
} while (status.hasUnfinishedBatchReadJob());
// reap IO thread
while (status.inflight()) {
status.reap(config_.min_complete());
};
此时,第二次提交的批量请求,也能够直接投入到sqe环中,而由另一个线程进行不断收割IO,队列深度的利用率和整体io效率也许会更高?
Metadata
Metadata
Assignees
Labels
No labels