83. fio benchmark¶
通常,我们认为普通机械硬盘的吞吐量是100MB/s [参考],固态硬盘的吞吐量是200MB/s ## x86服务器
83.1. cpu¶
ubuntu@ubuntu:~$ lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 64
On-line CPU(s) list: 0-63
Thread(s) per core: 2
Core(s) per socket: 16
Socket(s): 2
NUMA node(s): 2
Vendor ID: GenuineIntel
CPU family: 6
Model: 79
Model name: Intel(R) Xeon(R) CPU E5-2697A v4 @ 2.60GHz
Stepping: 1
CPU MHz: 2598.100
CPU max MHz: 2600.0000
CPU min MHz: 1200.0000
BogoMIPS: 5188.28
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 40960K
NUMA node0 CPU(s): 0-15,32-47
NUMA node1 CPU(s): 16-31,48-63
83.2. 硬盘¶
=== START OF INFORMATION SECTION ===
Vendor: HUAWEI
Product: HWE32SS3008M001N
Revision: 2774
Compliance: SPC-4
User Capacity: 800,166,076,416 bytes [800 GB]
Logical block size: 512 bytes
Physical block size: 4096 bytes
LU is resource provisioned, LBPRZ=1
Rotation Rate: Solid State Device
Form Factor: 2.5 inches
Logical Unit id: 0x5d0efc1ec8047002
Serial number: 2102311TNB10J8000371
Device type: disk
Transport protocol: SAS (SPL-3)
Local Time is: Fri Mar 15 18:00:41 2019 CST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled
Temperature Warning: Enabled
不确定raid卡是否对测试有影响:
SAS3108
SAS 12G
支持条带大小范围是 64 KB ~ 1 MB
两个硬盘,都是raid0,分别添加到两个逻辑盘当中
83.3. 软件¶
OS: 18.04.2 LTS (Bionic Beaver)
内核: Linux ubuntu 4.15.0-46-generic
fio: fio-3.13
83.4. 测试结果¶
使用如下命令,仅改变filename、numbjobs、iodepth、rw、bs
fio --ramp_time=5 --runtime=15 --size=20g --ioengine=libaio --filename=/dev/sdb --name=4k-read-64-64 --numjobs=64 --iodepth=64 --rw=read --bs=4k --direct=1 --group_report
测试脚本如下:
这个测试还有影响测试的因素,一个前后两个测试之间还有影响, 导致手动执行时结果更好。 测试时间较短,可靠行不足。 可以考虑绑核以提升性能
指定--size 20g
或者10g,测试结果偏好,应该只指定runtime更接近真实情况。
83.5. 绑核的影响¶
绑核性能可以提升一倍。 测试命令
numactl -C 0-7 -m 0 fio -name=iops -rw=read -bs=4k -runtime=1000 -iodepth=64 -numjobs=8 -filename=/dev/sdc -ioengine=libaio -direct=1 -group_reporting
fio -name=iops -rw=read -bs=4k -runtime=1000 -iodepth=64 -numjobs=8 -filename=/dev/sdc -ioengine=libaio -direct=1 -group_reporting
83.6. numa的影响¶
使用如下命令观察numactl设置对测试结果的影响
numactl -C 0-7 -m 0 fio --name=iops --rw=read --bs=4k --runtime=60 --iodepth=64 --numjobs=8 --filename=/dev/sdc --ioengine=libaio --direct=1 --group_reporting
numactl -C 48-56 -m 1 fio --name=iops --rw=read --bs=4k --runtime=60 --iodepth=64 --numjobs=8 --filename=/dev/sdc --ioengine=libaio --direct=1 --group_reporting
测试结果,前面的CPU测试结果偏好,内存区域0测试结果较好
32-40 -m 0 674
32-40 -m 1 665
32-40 -m 2 655
32-40 -m 3 630
48-56 -m 0 515
48-56 -m 1 543
48-56 -m 2 495
48-56 -m 3 540
83.7. 选项--size
的影响¶
不建议设置size,因为fio会尝试对指定size的文件或者硬盘进行这个区域内的循环读写。裸盘测试不建议设置size。
83.8. hdparm -t可以简单对硬盘进行测试,测试结果待分析¶
sudo hdparm -t /dev/sdc
/dev/sdc:
Timing buffered disk reads: 782 MB in 3.01 seconds = 260.07 MB/sec