本文所有测试使用的均是Oracle公有云OCI上的计算实例的启动盘。
- 第1轮测试使用的是默认的启动盘参数。
- 第2轮测试使用的是自动调整的启动盘参数(如下图),性能更高。
第1轮测试
顺序I/O
运行以下命令5次,dsync表示不使用cache:
dd if=/dev/zero of=/tmp/testfile bs=1G count=1 oflag=dsync
输出为:
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 7.83568 s, 137 MB/s
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 8.65085 s, 124 MB/s
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 8.66759 s, 124 MB/s
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 8.70055 s, 123 MB/s
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 8.68381 s, 124 MB/s
去掉偏差值,均值为124MB/s。
运行以下命令5次:
dd if=/dev/zero of=/tmp/testfile bs=1G count=1
输出为:
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 0.458927 s, 2.3 GB/s
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 7.45019 s, 144 MB/s
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 8.34947 s, 129 MB/s
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 8.33941 s, 129 MB/s
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 8.35338 s, 129 MB/s
去掉偏差值,均值为129MB/s。
随机I/O
运行以下命令5次,dsync表示不使用cache,bs的缺省单位为字节:
dd if=/dev/zero of=/tmp/testfile bs=512 count=1000 oflag=dsync
输出为:
512000 bytes (512 kB, 500 KiB) copied, 1.07545 s, 476 kB/s
512000 bytes (512 kB, 500 KiB) copied, 1.10118 s, 465 kB/s
512000 bytes (512 kB, 500 KiB) copied, 1.08686 s, 471 kB/s
512000 bytes (512 kB, 500 KiB) copied, 1.09063 s, 469 kB/s
512000 bytes (512 kB, 500 KiB) copied, 1.05815 s, 484 kB/s
均值为470kB/s。
运行以下命令5次:
dd if=/dev/zero of=/tmp/testfile bs=512 count=1000
输出为:
512000 bytes (512 kB, 500 KiB) copied, 0.000962132 s, 532 MB/s
512000 bytes (512 kB, 500 KiB) copied, 0.00106197 s, 482 MB/s
512000 bytes (512 kB, 500 KiB) copied, 0.00101837 s, 503 MB/s
512000 bytes (512 kB, 500 KiB) copied, 0.00104263 s, 491 MB/s
512000 bytes (512 kB, 500 KiB) copied, 0.00097197 s, 527 MB/s
均值为500MB/s,有点夸张。
第2轮测试
所有的测试均使用oflag=dsync。
顺序I/O
运行以下命令5次,dsync表示不使用cache:
dd if=/dev/zero of=/tmp/testfile bs=1G count=1 oflag=dsync
输出为:
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 4.89465 s, 219 MB/s
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 5.73426 s, 187 MB/s
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 5.74953 s, 187 MB/s
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 5.7962 s, 185 MB/s
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 5.76396 s, 186 MB/s
去掉偏差值,均值为186MB/s。可见付钱确实可以得到更好的服务。
随机I/O
运行以下命令5次:
dd if=/dev/zero of=/tmp/testfile bs=512 count=1000 oflag=dsync
输出为:
512000 bytes (512 kB, 500 KiB) copied, 1.10471 s, 463 kB/s
512000 bytes (512 kB, 500 KiB) copied, 1.06247 s, 482 kB/s
512000 bytes (512 kB, 500 KiB) copied, 1.08626 s, 471 kB/s
512000 bytes (512 kB, 500 KiB) copied, 1.07502 s, 476 kB/s
512000 bytes (512 kB, 500 KiB) copied, 1.08319 s, 473 kB/s
均值和第一轮的470kB/s相比,其实是差不多的。
一些结论
- dd测试还是要加oflag=dsync选项,结果更准
- dd命令记得指定count选项,特别是当输入是/dev/zero的时候,否则文件会无限生成下去
- 对于本测试,磁盘性能调整后,顺序I/O提升明显,而随机I/O没有提升
- 磁盘调整性能的开关记得关了,是会收费的
参考
- Linux and Unix Test Disk I/O Performance With dd Command
- Linux I/O Performance Tests using dd
- dd(1) — Linux manual page