cgroup IO 控制与(新型)Linux AIO

cgroup IO 控制与(新型)Linux AIO

在 Linux v5.0 中,某些类型的异步 IO 是否绕过 cgroup IO 控制器?

编辑:缓冲 write() 和 fsync() 分析起来可能相对复杂。我在这里发现了一篇关于控制缓冲写入的有趣帖子:https://andrestc.com/post/cgroups-io/。如果这个问题看起来太复杂,也许最简单的方法是首先询问有关io_uring.


新的 AIO 接口io_uring包括 read()、write() 和 fsync() 的 AIO 等效项。当您将其用于“缓冲 IO”(普通可缓存文件 IO),并且页面缓存无法立即满足 IO 时,它会使用工作队列异步运行。

io_submit()最近还有原来的AIO系统调用获得了支持IOCB_CMD_FSYNC。这个新命令使用工作队列来调用 vfs_fsync()。 (戴夫·钦纳强烈暗示IOCB_CMD_FSYNC适用于正常的“缓冲 IO”,所以听起来与io_uring) 非常相似。

IOCB_CMD_FSYNC使用内核默认工作队列。 io_uring略有不同。每个io_uring创建自己的并发管理工作队列(CMWQ)。

我查看了ps -eo pid,user,args,cgroup|grep [[]我的系统。 cgroup 中唯一的内核线程恰好是[vhost-nnn].我发现内核明确地将这些 vhost_worker 线程放置在创建它们的用户进程的 cgroup 中。看vhost_attach_cgroups_work()

相比之下,没有提到cgroup's文件系统/io_uring.c,也不在内核/工作队列.c

结构文件不直接指向特定的cgroup。虽然它确实指出了一个结构索引节点CONFIG_CGROUP_WRITEBACK,如果设置的话则指向“关联的cgroup wb” 。

相关内容