summaryrefslogtreecommitdiff
path: root/test/system/180-blkio.bats
blob: 7999c9ec5b80d1ffd6c19cda749fbb73bf7b4596 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#!/usr/bin/env bats   -*- bats -*-
#
# podman blkio-related tests
#

load helpers

function teardown() {
    lofile=${PODMAN_TMPDIR}/disk.img
    if [ -f ${lofile} ]; then
        run_podman '?' rm -t 0 --all --force --ignore

        while read path dev; do
            if [[ "$path" == "$lofile" ]]; then
                losetup -d $dev
            fi
        done < <(losetup -l --noheadings --output BACK-FILE,NAME)

        rm ${lofile}
    fi
    basic_teardown
}

@test "podman run --blkio-weight-device" {

    skip_if_rootless "cannot create devices in rootless mode"

    # create loopback device
    lofile=${PODMAN_TMPDIR}/disk.img
    fallocate -l 1k  ${lofile}
    losetup -f ${lofile}

    run losetup -l --noheadings --output BACK-FILE,NAME,MAJ:MIN
    is "$output" ".\+" "Empty output from losetup"

    lodevice=$(awk "\$1 == \"$lofile\" { print \$2 }" <<<"$output")
    lomajmin=$(awk "\$1 == \"$lofile\" { print \$3 }" <<<"$output")

    is "$lodevice" ".\+" "Could not determine device for $lofile"
    is "$lomajmin" ".\+" "Could not determine major/minor for $lofile"

    # use bfq io scheduler
    run grep -w bfq /sys/block/$(basename ${lodevice})/queue/scheduler
    if [ $status -ne 0 ]; then
        skip "BFQ scheduler is not supported on the system"
    fi
    echo bfq > /sys/block/$(basename ${lodevice})/queue/scheduler

    # run podman
    if is_cgroupsv2; then
        if [ ! -f /sys/fs/cgroup/system.slice/io.bfq.weight ]; then
            skip "Kernel does not support BFQ IO scheduler"
        fi
        run_podman run --device ${lodevice}:${lodevice} --blkio-weight-device ${lodevice}:123 --rm $IMAGE \
            /bin/sh -c "cat /sys/fs/cgroup/\$(sed -e 's/0:://' < /proc/self/cgroup)/io.bfq.weight"
        is "${lines[1]}" "${lomajmin}\s\+123"
    else
        if [ ! -f /sys/fs/cgroup/blkio/system.slice/blkio.bfq.weight_device ]; then
            skip "Kernel does not support BFQ IO scheduler"
        fi
        if [ $(podman_runtime) = "crun" ]; then
            # As of crun 1.2, crun doesn't support blkio.bfq.weight_device
            skip "crun doesn't support blkio.bfq.weight_device"
        fi
        run_podman run --device ${lodevice}:${lodevice} --blkio-weight-device ${lodevice}:123 --rm $IMAGE \
            /bin/sh -c "cat /sys/fs/cgroup/blkio/blkio.bfq.weight_device"
        is "${lines[1]}" "${lomajmin}\s\+123"
    fi
}