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」を指します。