旧的cfq-iosched.txt在几个地方提到了“异步”或“异步”请求。
CFQ为请求I/O操作(同步请求)的进程维护每个进程队列。在异步请求的情况下,来自所有进程的所有请求都根据进程的I/O优先级分批在一起。
从用户空间的角度来看,我们应该如何确切地理解这个文档中的区别?我不清楚,因为有几个名为同步/异步的区别:
read()/write()调用,V.S.LinuxAIO (io_submit()/io_getevents)。O_SYNC标志,可以在open()文件时设置。(注意,据我所知,上述关于IO优先级的引号不适用于简单缓冲写入.。IO优先权对这类请求没有影响。
发布于 2019-01-26 14:38:46
Linux调度程序处理的请求的形式,在它们上设置了各种“提示”。其中之一是“同步”提示。
在Linux中,所有IO都是异步处理的。这对于后台写入很好,但是对于等待完成的读或写,我们希望通知块层和IO调度程序,以便他们知道这一点。这样他们就可以做出更好的调度决策。因此,当下面的引用“同步”和“异步”时,它引用了这个优先级提示。- 包含/linux/fs.h (2016-11-01)
读取请求总是被视为同步的。
区块:不要使用REQ_同步读取_同步定义 (2016-11-01)读取每个定义都是同步的,不要为其添加另一个标志。
O_DIRECT和O_SYNC写操作都被视为同步的。
#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。
https://unix.stackexchange.com/questions/496855
复制相似问题