CFQ - “如果是异步请求,来自所有进程的所有请求都会根据其进程的 I/O 优先级一起批处理”

CFQ - “如果是异步请求,来自所有进程的所有请求都会根据其进程的 I/O 优先级一起批处理”

我认为以下关于CFQ的说法是相互矛盾的:

  1. “如果是异步请求,来自所有进程的所有请求都会一起批处理根据进程的 I/O 优先级”。
  2. IO 调度程序认为异步的唯一请求是常规“缓冲”写入
  3. ionice不会降低异步写入 IO 的优先级”。

哪些说法是不正确的?或者如果它们都是正确的,为什么它们不互相矛盾呢?

答案1

我认为陈述2和3是不正确的。

用户进程可以使用 生成异步写入 IO sync_file_range()。由于这些 IO 是由调用进程直接提交的,因此它们可能会受到进程 IO 优先级的影响。

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

我猜想如果在异步 write() 调用期间必须执行“直接回收”,则进程 IO 优先级也可能会被使用。据说那是2011年被摆脱

相关内容