at 25.11-pre 2.0 kB view raw
1import ./make-test-python.nix ( 2 { 3 pkgs, 4 ... 5 }: 6 let 7 qemu-img = pkgs.lib.getExe' pkgs.vmTools.qemu "qemu-img"; 8 empty = pkgs.runCommand "empty.qcow2" { } '' 9 ${qemu-img} create -f qcow2 "$out" 32M 10 ''; 11 in 12 { 13 name = "iosched"; 14 meta.maintainers = with pkgs.lib.maintainers; [ mvs ]; 15 16 nodes.machine = { 17 virtualisation.qemu.options = [ 18 "-drive" 19 "id=sda,if=none,format=qcow2,readonly=on,file=${empty}" 20 "-drive" 21 "id=sdb,if=none,format=qcow2,readonly=on,file=${empty}" 22 "-drive" 23 "id=nvme0n1,if=none,format=qcow2,readonly=on,file=${empty}" 24 "-drive" 25 "id=mmcblk0,if=none,format=qcow2,file=./mmcblk0.qcow2" 26 "-device" 27 "virtio-scsi-pci,id=scsi0" 28 "-device" 29 "sdhci-pci" 30 "-device" 31 "scsi-hd,rotation_rate=1,bus=scsi0.0,drive=sda" 32 "-device" 33 "scsi-hd,rotation_rate=7200,bus=scsi0.0,drive=sdb" 34 "-device" 35 "sd-card,drive=mmcblk0" 36 "-device" 37 "nvme,serial=deadbeef,drive=nvme0n1" 38 ]; 39 40 hardware.block = { 41 defaultScheduler = "none"; 42 defaultSchedulerRotational = "mq-deadline"; 43 scheduler = { 44 "nvme[0-9]*" = "kyber"; 45 "mmcblk[0-9]*" = "bfq"; 46 }; 47 }; 48 }; 49 50 testScript = '' 51 import subprocess 52 53 def check_scheduler(dev, scheduler): 54 machine.succeed("grep -F -q '[{}]' /sys/block/{}/queue/scheduler".format(scheduler, dev)) 55 56 subprocess.check_call([ 57 "${qemu-img}", "create", "-f", "qcow2", "vm-state-machine/mmcblk0.qcow2", "32M" 58 ]) 59 60 machine.start() 61 machine.succeed("udevadm verify --no-style") 62 check_scheduler("sda", "none") 63 check_scheduler("sdb", "mq-deadline") 64 check_scheduler("nvme0n1", "kyber") 65 check_scheduler("mmcblk0", "bfq") 66 67 machine.succeed("tmp=\"$(mktemp)\"; losetup /dev/loop0 \"$tmp\"") 68 check_scheduler("loop0", "none") 69 ''; 70 } 71)