• Shaohua Li's avatar
    block/loop: make loop cgroup aware · d4478e92
    Shaohua Li authored
    loop block device handles IO in a separate thread. The actual IO
    dispatched isn't cloned from the IO loop device received, so the
    dispatched IO loses the cgroup context.
    
    I'm ignoring buffer IO case now, which is quite complicated.  Making the
    loop thread aware cgroup context doesn't really help. The loop device
    only writes to a single file. In current writeback cgroup
    implementation, the file can only belong to one cgroup.
    
    For direct IO case, we could workaround the issue in theory. For
    example, say we assign cgroup1 5M/s BW for loop device and cgroup2
    10M/s. We can create a special cgroup for loop thread and assign at
    least 15M/s for the underlayer disk. In this way, we correctly throttle
    the two cgroups. But this is tricky to setup.
    
    This patch tries to address the issue. We record bio's css in loop
    command. When loop thread is handling the command, we then use the API
    provided in patch 1 to set the css for current task. The bio layer will
    use the css for new IO (from patch 3).
    Acked-by: default avatarTejun Heo <tj@kernel.org>
    Signed-off-by: default avatarShaohua Li <shli@fb.com>
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    d4478e92
loop.c 51.5 KB