![cgroup IO 제어 및 (신규) Linux AIO](https://linux55.com/image/154549/cgroup%20IO%20%EC%A0%9C%EC%96%B4%20%EB%B0%8F%20(%EC%8B%A0%EA%B7%9C)%20Linux%20AIO.png)
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()를 호출합니다. (Dave Chiner가 크게 암시함)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
이에 비해 '' 에 대해서는 언급이 없다.파일 시스템/io_uring.c, 여기도 아니야커널/workqueue.c.
구조 파일특정 cgroup을 직접 가리키지 않습니다. 비록 그것이구조 인덱스 노드CONFIG_CGROUP_WRITEBACK
, 설정된 경우 "연관된 cgroup wb"를 가리킵니다.