Hi, Yexuan Yang <1182282462@xxxxxxxxxxx> writes: >> Over the 432 benchmark configurations, the relative performance of the Rust >> driver to the C driver (in terms of IOPS) is between 6.8 and -11.8 percent with >> an average of 0.2 percent better for reads. For writes the span is 16.8 to -4.5 >> percent with an average of 0.9 percent better. >> >> For each measurement the drivers are loaded, a drive is configured with memory >> backing and a size of 4 GiB. C null_blk is configured to match the implemented >> modes of the Rust driver: `blocksize` is set to 4 KiB, `completion_nsec` to 0, >> `irqmode` to 0 (IRQ_NONE), `queue_mode` to 2 (MQ), `hw_queue_depth` to 256 and >> `memory_backed` to 1. For both the drivers, the queue scheduler is set to >> `none`. These measurements are made using 30 second runs of `fio` with the >> `PSYNC` IO engine with workers pinned to separate CPU cores. The measurements >> are done inside a virtual machine (qemu/kvm) on an Intel Alder Lake workstation >> (i5-12600). > > Hi All! > I have some problems about your benchmark test. > In Ubuntu 22.02, I compiled an RFL kernel with both C null_blk driver and Rust > null_blk_driver as modules. For the C null_blk driver, I used the `modprobe` > command to set relevant parameters, while for the Rust null_blk_driver, I simply > started it. I used the following two commands to start the drivers: > > ```bash > sudo modprobe null_blk \ > queue_mode=2 irqmode=0 hw_queue_depth=256 \ > memory_backed=1 bs=4096 completion_nsec=0 \ > no_sched=1 gb=4; > sudo modprobe rnull_mod > ``` > > After that, I tested their performance in `randread` with the fio command, specifying the first parameter as 4 and the second parameter as 1: > > ```bash > fio --filename=/dev/nullb0 --iodepth=64 --ioengine=psync --direct=1 --rw=randread --bs=$1k --numjobs=$2 --runtime=30 --group_reporting --name=test-rand-read --output=test_c_randread.log > fio --filename=/dev/rnullb0 --iodepth=64 --ioengine=psync --direct=1 --rw=randread --bs=$1k --numjobs=$2 --runtime=30 --group_reporting --name=test-rand-read --output=test_rust_randread.log > ``` > > The test results showed a significant performance difference between the two > drivers, which was drastically different from the data you tested in the > community. Specifically, for `randread`, the C driver had a bandwidth of > 487MiB/s and IOPS of 124.7k, while the Rust driver had a bandwidth of 264MiB/s > and IOPS of 67.7k. However, for other I/O types, the performance of the C and > Rust drivers was more similar. Could you please provide more information about > the actual bandwidth and IOPS data from your tests, rather than just the > performance difference between the C and Rust drivers? Additionally, if you > could offer possible reasons for this abnormality, I would greatly appreciate > it! Thanks for trying out the code! I am not sure why you get these numbers. I am currently out of office, but I will rerun the benchmarks next week when I get back in. Maybe I can provide you with some scripts and my kernel configuration. Hopefully we can figure out the difference in our setups. Best regards, Andreas