【发布时间】:2010-08-09 16:00:35
【问题描述】:
我很困惑当我在 Linux 中从用户空间发出写入时会发生什么。到存储设备的完整流程是什么?假设我使用 CFQ 和仍然使用 pdflush 的内核。
CFQ 将请求放入同步和异步队列。例如,写入是异步的,因此它们会根据 io 优先级进入异步队列。队列会根据CFQ时间片、过期设置等获取CPU。很好。
同时,写入脏页。写入脏页由 VM 设置触发,并在运行调用 writeback_nodes() 的 background_writeout() 副本的 pdflush 线程的上下文中完成。发生这种情况时,pdflush 所做的写入肯定是同步的。
这是否意味着我们有两个可能针对相同或相似的写入请求进行竞争的写入 - 一个由 CFQ 队列机制控制,另一个由 VM 子系统触发?
这是否意味着一旦我们点击dirty_background_ratio,VM子系统就有效地破坏了CFQ规则,因为pdflush不具有与请求进程相同的io优先级?
一旦我们点击了dirty_ratio CFQ设置就会或多或少地过时,因为所有的写入都变得同步了?
我已经阅读了很多关于这两个子系统的具体信息,但我还没有理解整个写入请求流程。交互式 Linux 内核映射不包括 IO 调度程序。
任何指向整个图片的指针将不胜感激。
谢谢, 亚历克斯
【问题讨论】:
-
我想我找到了我需要的东西
标签: linux-kernel io