cgroup中blkio子系統的主要功能是實現對磁盤IO帶寬的可定製化控制,目前支持的控制策略只要有兩種:基於weight權重方式和基於流量方式(iops,bps)。weight方式依賴於內核原生的CFQ IO調度算法(其工作與IO調度層);流量方式即IO throttle工作在通用塊層。
IO throttle: iops/bpsl
CFS:weight/iops
正常提交IO的流程(部分):
submit_bio
-> generic_make_request
->1, generic_make_request_checks
->blkcg_bio_issue_check
->blk_throtl_bio
->2, blk_queue_bio
被throttle的IO的後續提交流程:
kworker(kthrotld)
-> blk_throtl_dispatch_work_fn
-> generic_make_request(還要經過造請求函數提交)
測試IO throttle,限制sda盤每秒IOPS爲50:
使用systemtap探測,dd產生的IO 被throttle: