cgroup IO 제어와 (새로운 유형의) Linux AIO

cgroup IO 제어와 (새로운 유형의) Linux AIO

Linux v5.0에서 일부 유형의 비동기 IO가 cgroup IO 컨트롤러를 우회합니까?

편집: 버퍼링된 write() 및 fsync()는 분석하기가 비교적 복잡할 수 있습니다. 여기에서 버퍼링된 쓰기 제어에 대한 흥미로운 게시물을 찾았습니다.https://andrestc.com/post/cgroups-io/. 이 질문이 너무 복잡해 보인다면 아마도 버퍼링된 read()에 대해 질문하는 것부터 시작하는 것이 가장 간단할 것입니다 io_uring.


새로운 AIO 인터페이스에는 io_uringread(), write() 및 fsync()에 해당하는 AIO가 포함되어 있습니다. "버퍼된 IO"(일반적인 캐시 가능한 파일 IO)에 사용하고 IO가 페이지 캐시로 즉시 충족될 수 없는 경우 작업 대기열을 사용하여 비동기적으로 실행됩니다.

io_submit()또한 최근에 원래의 AIO 시스템 호출도 있었습니다.에 대한 지지를 얻었다IOCB_CMD_FSYNC. 이 새로운 명령은 작업 대기열을 사용하여 vfs_fsync()를 호출합니다. (Dave Chinner는 다음과 같이 강력하게 암시합니다.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그에 비해 '' 에 대한 언급은 없다.fs/io_uring.c, 또는 에서도커널/workqueue.c.

구조체 파일특정 cgroup을 직접 가리키지 않습니다. 비록 그것이 다음을 가리키고 있지만구조체 아이노드CONFIG_CGROUP_WRITEBACK, 설정된 경우 "관련 cgroup wb"를 가리킵니다 .

관련 정보