Loop vs. NBD benchmark =============================================================================== The benchmark compares the performance of the loop block device driver with the network block device driver using qemu-nbd version 4.0.0 and Linux kernel version 5.1.2. The performance was determined by the data throughput of write operations to preallocated disk image files (raw, qcow2) using either the loop device or the nbd driver. The results were mesured on an Intel(R) Core(TM) i5-3570 CPU @ 3.40GHz with SSD storage. =============================================================================== Preparation: ~$ qemu-img create -f raw -o preallocation=full nbd-raw_test.img 100M ~$ qemu-img create -f qcow2 -o preallocation=full nbd-qcow2_test.qcow2 100M ~$ qemu-img create -f raw -o preallocation=full loop-raw_test.img 100M ~$ modprobe nbd ~$ qemu-nbd -c /dev/nbd0 -f raw nbd-raw_test.img ~$ qemu-nbd -c /dev/nbd1 -f qcow2 nbd-qcow2_test.qcow2 ~$ modprobe loop ~$ losetup /dev/loop0 loop-raw_test.img =============================================================================== Results: ~$ dd if=/dev/zero of=/dev/loop0 bs=100M count=1 oflag=direct 1+0 records in 1+0 records out 104857600 bytes (105 MB, 100 MiB) copied, 0.0942829 s, 1.1 GB/s ~$ dd if=/dev/zero of=/dev/nbd0 bs=100M count=1 oflag=direct 1+0 records in 1+0 records out 104857600 bytes (105 MB, 100 MiB) copied, 1.50101 s, 69.9 MB/s ~$ dd if=/dev/zero of=/dev/nbd1 bs=100M count=1 oflag=direct 1+0 records in 1+0 records out 104857600 bytes (105 MB, 100 MiB) copied, 2.02387 s, 51.8 MB/s ------------------------------------------------------------------------------- ~$ dd if=/dev/zero of=/dev/loop0 bs=512 count=1000 oflag=direct 1000+0 records in 1000+0 records out 512000 bytes (512 kB, 500 KiB) copied, 0.0328669 s, 15.6 MB/s ~$ dd if=/dev/zero of=/dev/nbd0 bs=512 count=1000 oflag=direct 1000+0 records in 1000+0 records out 512000 bytes (512 kB, 500 KiB) copied, 0.877605 s, 583 kB/s ~$ dd if=/dev/zero of=/dev/nbd1 bs=512 count=1000 oflag=direct 1000+0 records in 1000+0 records out 512000 bytes (512 kB, 500 KiB) copied, 0.887766 s, 577 kB/s ------------------------------------------------------------------------------- ~$ dd if=/dev/zero of=/dev/loop0 bs=100M count=1 oflag=dsync 1+0 records in 1+0 records out 104857600 bytes (105 MB, 100 MiB) copied, 0.480756 s, 218 MB/s ~$ dd if=/dev/zero of=/dev/nbd0 bs=100M count=1 oflag=dsync 1+0 records in 1+0 records out 104857600 bytes (105 MB, 100 MiB) copied, 1.14004 s, 92.0 MB/s ~$ dd if=/dev/zero of=/dev/nbd1 bs=100M count=1 oflag=dsync 1+0 records in 1+0 records out 104857600 bytes (105 MB, 100 MiB) copied, 1.77562 s, 59.1 MB/s ------------------------------------------------------------------------------- ~$ dd if=/dev/zero of=/dev/loop0 bs=512 count=1000 oflag=dsync 1000+0 records in 1000+0 records out 512000 bytes (512 kB, 500 KiB) copied, 1.27318 s, 402 kB/s ~$ dd if=/dev/zero of=/dev/nbd0 bs=512 count=1000 oflag=dsync 1000+0 records in 1000+0 records out 512000 bytes (512 kB, 500 KiB) copied, 0.88749 s, 577 kB/ ~$ dd if=/dev/zero of=/dev/nbd1 bs=512 count=1000 oflag=dsync 1000+0 records in 1000+0 records out 512000 bytes (512 kB, 500 KiB) copied, 0.934727 s, 548 kB/s