首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我们应该如何解释CFQ-iosche.txt中的“异步请求”这个短语?

我们应该如何解释CFQ-iosche.txt中的“异步请求”这个短语?
EN

Unix & Linux用户
提问于 2019-01-26 11:09:31
回答 1查看 199关注 0票数 0

旧的cfq-iosched.txt在几个地方提到了“异步”或“异步”请求。

CFQ为请求I/O操作(同步请求)的进程维护每个进程队列。在异步请求的情况下,来自所有进程的所有请求都根据进程的I/O优先级分批在一起。

从用户空间的角度来看,我们应该如何确切地理解这个文档中的区别?我不清楚,因为有几个名为同步/异步的区别:

  1. 普通的read()/write()调用,V.S.LinuxAIO (io_submit()/io_getevents)。
  2. O_SYNC标志,可以在open()文件时设置。

(注意,据我所知,上述关于IO优先级的引号不适用于简单缓冲写入.。IO优先权对这类请求没有影响。

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2019-01-26 14:38:46

Linux调度程序处理的请求的形式,在它们上设置了各种“提示”。其中之一是“同步”提示。

在Linux中,所有IO都是异步处理的。这对于后台写入很好,但是对于等待完成的读或写,我们希望通知块层和IO调度程序,以便他们知道这一点。这样他们就可以做出更好的调度决策。因此,当下面的引用“同步”和“异步”时,它引用了这个优先级提示。- 包含/linux/fs.h (2016-11-01)

读取请求总是被视为同步的。

区块:不要使用REQ_同步读取_同步定义 (2016-11-01)读取每个定义都是同步的,不要为其添加另一个标志。

O_DIRECTO_SYNC写操作都被视为同步的。

代码语言:javascript
复制
#define READ_SYNC       0
#define WRITE_SYNC      (REQ_SYNC | REQ_NOIDLE)
#define WRITE_ODIRECT   REQ_SYNC

fsync()发起的IO请求使用与O_SYNC编写的相同的提示。虽然如果IO请求已经启动,并且fsync()必须等待现有的请求,但我认为没有调整请求的机制。

Re:努力理解阅读_元,读_同步,写_同步与合作 (2010年),但这留下了一个问题:为什么禁用数据完整性的空闲逻辑->writepage是好的?这将从->fsync或O_SYNC写入调用,并将产生与O_DIRECT写入相同的影响。我们从来没有为这些做过空转。O_SYNC也应该得到很好的提升,它只需要经过基准测试,然后就没有理由不添加它了。我们去年才在提交->writepage a64c8610bd3b “_写_完整_页面:对WBC使用同步写入_同步_所有记帐”(块)中使用任何类型的同步标记

“禁用空闲”是一个不同的提示标志,这一点很难解释。但是,上面引号中链接的commit确认了WRITE_SYNC提示对fsync()的使用。

上述代码已被移动或替换,但“同步”提示的使用在2018年仍应与2016年相同。

因此,我认为是否使用Linux发出请求并不重要。

我注意到O_DIRECT只支持AIO,因此从IO调度程序的角度来看,所有的AIO都应该是“同步”的:-)。至少在4.20版的时候。提议的新的AIO接口支持缓冲(非O_直接) IO。这将通过上述相同的代码,因此提示仍将根据是否使用O_SYNC来设置。

sync_file_range()被设计为允许触发异步写回。当前实现(Linuxv4.20)通过使用写回模式REQ_SYNC避免设置WB_SYNC_NONE。即使当您的程序通过包含标志SYNC_FILE_RANGE_WAIT_AFTER等待写回时,也是如此。但是,v2.6.29和v4.4之间的内核错误地使用了WB_SYNC_ALL,因此对于由sync_file_range()触发的所有写回都使用了REQ_SYNC

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/496855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档