• Jan Kara's avatar
    cfq-iosched: Allow parent cgroup to preempt its child · 3984aa55
    Jan Kara authored
    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: default avatarTejun Heo <tj@kernel.org>
    Signed-off-by: default avatarJan Kara <jack@suse.com>
    Signed-off-by: default avatarJens Axboe <axboe@fb.com>
    3984aa55
cfq-iosched.c 124 KB