summaryrefslogtreecommitdiffstats
path: root/block/blk-mq.c
diff options
context:
space:
mode:
authorJan Kara2016-01-12 16:24:19 +0100
committerJens Axboe2016-02-04 17:50:43 +0100
commit3984aa55204e2c3f423a70b013c44c64261788df (patch)
tree3a780ca008fdb70a06ddc8983cfaee289a3b3219 /block/blk-mq.c
parentcfq-iosched: Allow sync noidle workloads to preempt each other (diff)
downloadkernel-qcow2-linux-3984aa55204e2c3f423a70b013c44c64261788df.tar.gz
kernel-qcow2-linux-3984aa55204e2c3f423a70b013c44c64261788df.tar.xz
kernel-qcow2-linux-3984aa55204e2c3f423a70b013c44c64261788df.zip
cfq-iosched: Allow parent cgroup to preempt its child
Currently we don't allow sync workload of one cgroup to preempt sync workload of any other cgroup. This is because we want to achieve service separation between cgroups. However in cases where cgroup preempting is ancestor of the current cgroup, there is no need of separation and idling introduces unnecessary overhead. This hurts for example the case when workload is isolated within a cgroup but journalling threads are in root cgroup. Simple way to demostrate the issue is using: dbench4 -c /usr/share/dbench4/client.txt -t 10 -D /mnt 1 on ext4 filesystem on plain SATA drive (mounted with barrier=0 to make difference more visible). When all processes are in the root cgroup, reported throughput is 153.132 MB/sec. When dbench process gets its own blkio cgroup, reported throughput drops to 26.1006 MB/sec. Fix the problem by making check in cfq_should_preempt() more benevolent and allow preemption by ancestor cgroup. This improves the throughput reported by dbench4 to 48.9106 MB/sec. Acked-by: Tejun Heo <tj@kernel.org> Signed-off-by: Jan Kara <jack@suse.com> Signed-off-by: Jens Axboe <axboe@fb.com>
Diffstat (limited to 'block/blk-mq.c')
0 files changed, 0 insertions, 0 deletions