Re: [RFC 0/3] blkcg: add blk-iotrack
From: Weiping Zhang <hidden>
Date: 2020-03-26 15:09:14
Also in:
cgroups
Weiping Zhang [off-list ref] 于2020年3月26日周四 上午12:45写道:
Tejun Heo [off-list ref] 于2020年3月25日周三 下午10:12写道:quoted
On Wed, Mar 25, 2020 at 08:49:24PM +0800, Weiping Zhang wrote:quoted
For this patchset, iotrack can work well, I'm using it to monitor block cgroup for selecting a proper io isolation policy.Yeah, I get that but monitoring needs tend to diverge quite a bit depending on the use cases making detailed monitoring often need fair bit of flexibility, so I'm a bit skeptical about adding a fixed controller for that. I think a better approach may be implementing features which can make dynamic monitoring whether that's through bpf, drgn or plain tracepoints easier and more efficient.I agree with you, there are lots of io metrics needed in the real production system. The more flexible way is export all bio structure members of bio’s whole life to the userspace without re-compiling kernel, like what bpf did. Now the main block cgroup isolation policy: blk-iocost and bfq are weght based, blk-iolatency is latency based. The blk-iotrack can track the real percentage for IOs,kB,on disk time(d2c), and total time, it’s a good indicator to the real weight. For blk-iolatency, the blk-iotrack has 8 lantency thresholds to show latency distribution, so if we change these thresholds around to blk-iolateny.target.latency, we can tune the target latency to a more proper value. blk-iotrack extends the basic io.stat. It just export the important basic io statistics for cgroup,like what /prof/diskstats for block device. And it’s easy programming, iotrack just working like iostat, but focus on cgroup. blk-iotrack is friendly with these block cgroup isolation policies, a indicator for cgroup weight and lantency.
Hi Tejun, I do a testing at cgroup v2 and monitoring them by iotrack, then I compare the fio's output and iotrack's, they can match well. cgroup weight test: /sys/fs/cgroup/test1 /sys/fs/cgroup/test2 test1.weight : test2.weight = 8 : 1 Now I just run randread-4K fio test by these three policy: iocost, bfq, and nvme-wrr For blk-iocost I run "iocost_coef_gen.py" and set result to the "io.cost.model". 259:0 ctrl=user model=linear rbps=3286476297 rseqiops=547837 rrandiops=793881 wbps=2001272356 wseqiops=482243 wrandiops=483037 But iocost_test1 cannot get 8/(8+1) iops, and the total disk iops is 737559 < 79388, even I change rrandiops=637000. test case bw iops rd_avg_lat rd_p99_lat ========================================================== iocost_test1 1550478 387619 659.76 1662.00 iocost_test2 1399761 349940 730.83 1712.00 wrr_test1 2618185 654546 390.59 1187.00 wrr_test2 362613 90653 2822.62 4358.00 bfq_test1 714127 178531 1432.43 489.00 bfq_test2 178821 44705 5721.76 552.00 The detail test report can be found at: https://github.com/dublio/iotrack/wiki/cgroup-io-weight-test
Thanks