代码之家  ›  专栏  ›  技术社区  ›  n-alexander

在Linux中将请求流从用户空间写入设备?

  •  1
  • n-alexander  · 技术社区  · 16 年前

    在Linux中,当我从用户空间发出一个写操作时,我对会发生什么感到困惑。什么是满流,向下到存储设备?假设我使用cfq和一个仍然使用pdflush的内核。

    据称,cfq将请求放入sync和a-sync队列。例如,写操作是A-Sync,因此它们将根据IO优先级进入A-Sync队列。队列将根据CFQ时间片、过期设置等获得CPU。很好。

    同时,写脏页。写脏页是由vm设置触发的,并在pdfush线程的上下文中完成,pdfush线程运行一个background_writeout()的副本,该副本调用writeback_nodes()。当发生这种情况时,写入pdflush肯定是同步的。

    这是否意味着对于相同或类似的写请求,我们有两个可能发生的相互竞争的写操作——一个由cfq队列机制控制,另一个由vm子系统触发?

    这是否意味着当我们遇到脏的背景比时,虚拟机子系统会有效地破坏cfq规则,因为pdflush与请求进程不具有相同的IO优先级?

    一旦我们达到脏比率,cfq设置就会或多或少地过时,因为所有的写操作都是同步的?

    我已经阅读了很多关于这两个子系统的具体信息,但是我还没有理解整个写请求流程。交互式Linux内核映射不包括IO调度程序。

    任何指向整张照片的指针都会受到赞赏。

    谢谢, 亚历克斯

    1 回复  |  直到 8 年前
        1
  •  1
  •   ScottStonehouse    8 年前

    从那以后我就找到了。基本上,是的,PDFLUSH和WRITE缓存通常会中断写操作的IO优先级。读操作仍然可以从CFQ中获益,因为它们是同步的,同步请求具有优先级,但是对于要服从IO优先级的写操作,它们必须是直接的。