测试环境信息:
CPU:48核, Intel(R) Xeon(R) CPU E5-2670 v3 @ 2.30GHz
MEMORY:502G
DISK: product: MR9361-8i, vendor: LSI(只能看到这些)
(接近空载)
测试数据:
数据总大小:16G
文件个数:1、128
测试范围,分别对fileio的两个参数filo_io_mode和file_extra_flags进行组合测试,验证在相同文件大小的条件下,1个文件和128个文件时,不同模式组合下的读写IOPS,测试脚本如下:
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 |
sysbench="/data/tools/sysbench/sysbench-master/src/sysbench" file_size="16G" for ftype in "ext4" "xfs" "btrfs" do cd /mnt/${ftype} for filenum in "1" "128" do info=$(${sysbench} fileio --file-num=${filenum} --file-total-size=${file_size} prepare) for fileiomode in "sync" "async" "mmap" do for fileextraflags in "sync" "dsync" "direct" do printf "file_type: %s, file_num: %s, filo_io_mode: %s, file_extra_flags: %s\n" $ftype $filenum $fileiomode $fileextraflags info=$(${sysbench} fileio --file-num=${filenum} --file-total-size=${file_size} --file-test-mode=rndrw --file-rw-ratio=1 --file-io-mode=${fileiomode} --file-extra-flags=${fileextraflags} --file-fsync-freq=0 --time=30 run) echo $info | grep -oP "read:.*?\(.*?\)" echo $info | grep -oP "write:.*?\(.*?\)" echo $info | grep -oP "fsync: .*? " done done info=$(${sysbench} fileio --file-num=${filenum} --file-total-size=${file_size}--file-test-mode=rndrw --file-rw-ratio=1 cleanup) done done |
测试结果如下:
从结果来看,xfs在sync+sync组合下1文件和128文件的IPOS都略微高于ext4,在128个文件时,direct模式的IOPS则略微低于ext4,mmap这种模式使用的比较少,从数据显示来来看不同模式下差别是非常大的。
而btrfs的整体数据都偏小,这里就只作为一个对比来参考。
备注:
1、sysbench的--file-io-mode参数是指在测试过程中对文件读写的上层同步模式, --file-extra-flags是指在打开文件时使用的mode模式,通过sb_file.c中的代码片段简单印证:
1 2 3 4 5 6 7 8 9 10 |
/* In async mode stats will me updated on AIO requests completion */ if(file_io_mode != FILE_IO_MODE_ASYNC) { SB_THREAD_MUTEX_LOCK(); read_ops++; bytes_read += file_req->size; SB_THREAD_MUTEX_UNLOCK(); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
if (convert_extra_flags(file_extra_flags, &flags)) return 1; sb_timer_init(&t); sb_timer_start(&t); for (i=0; i < num_files; i++) { snprintf(file_name, sizeof(file_name), "test_file.%d",i); fd = open(file_name, O_CREAT | O_WRONLY | flags, S_IRUSR | S_IWUSR); if (fd < 0) { log_errno(LOG_FATAL, "Can't open file"); return 1; } |
2、MiB和MB的换算单位是不同的,MiB=1024*1024,MB=1000*1000,这个网站可以转换IOPS和读写速率
https://wintelguy.com/iops-mbs-gbday-calc.pl
3、测试原始数据
https://docs.qq.com/sheet/DWmpUc3FPQ2xlYXBu