(一)、方式一:通过dd
1.测试磁盘读写速度(拷贝/k8s/k8s-images.tar文件到/tmp/1):
time dd if=/k8s/k8s-images.tar of=/tmp/1 bs=64k
2.测试读速度(/k8s/k8s-images.tar文件到黑洞):
time dd if=/k8s/k8s-images.tar of=/dev/null bs=8k
3.测试写速度(拷贝临时文件到/tmp/2)
time dd if=/dev/zero of=/tmp/2 bs=8k count=30000000
[root@k8s-master ~]# time dd if=/k8s/k8s-images.tar of=/tmp/1 bs=64k
12807+1 records in
12807+1 records out
839344128 bytes (839 MB) copied, 1.60792 s, 522 MB/s
real 0m1.633s
user 0m0.014s
sys 0m1.615s
[root@k8s-master ~]# time dd if=/k8s/k8s-images.tar of=/dev/null bs=8k
102459+0 records in
102459+0 records out
839344128 bytes (839 MB) copied, 0.496839 s, 1.7 GB/s
real 0m0.499s
user 0m0.071s
sys 0m0.427s
[root@k8s-master ~]# time dd if=/dev/zero of=/tmp/2 bs=8k count=30000000
dd: error writing ‘/tmp/2’: No space left on device
2642083+0 records in
2642082+0 records out
21643935744 bytes (22 GB) copied, 24.4622 s, 885 MB/s
real 0m25.123s
user 0m1.924s
sys 0m22.979s
①、time 有计时作用,dd 用于复制,从 if 读出,写到 of;
②、if=/dev/zero 不产生 IO,因此可以用来测试纯写速度;
③、同理 of=/dev/null 不产生 IO,可以用来测试纯读速度;
④、将/tmp/test 拷贝到/var 则同时测试了读写速度;
⑤、bs 是每次读或写的大小,即一个块的大小,count 是读写块的数量。
(二)、方式二专业磁盘性能测试软件 fio(http://brick.kernel.dk/snaps/ )
fdisk -lu
sudo yum install libaio libaio-devel fio -y
随机写IOPS:
fio -direct=1 -iodepth=128 -rw=randwrite -ioengine=libaio -bs=4k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=/dev/sda2 -name=Rand_Write_Testing
随机读IOPS:
fio -direct=1 -iodepth=128 -rw=randread -ioengine=libaio -bs=4k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=/dev/sda2 -name=Rand_Read_Testing
顺序写吞吐量:
fio -direct=1 -iodepth=64 -rw=write -ioengine=libaio -bs=1024k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=/dev/sda2 -name=Write_PPS_Testing
顺序读吞吐量:
fio -direct=1 -iodepth=64 -rw=read -ioengine=libaio -bs=1024k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=/dev/sda2 -name=Read_PPS_Testing
随机写时延:
fio -direct=1 -iodepth=1 -rw=randwrite -ioengine=libaio -bs=4k -size=1G -numjobs=1 -group_reporting -filename=/dev/sda2 -name=Rand_Write_Latency_Testing
随机读时延:
fio -direct=1 -iodepth=1 -rw=randread -ioengine=libaio -bs=4k -size=1G -numjobs=1 -group_reporting -filename=/dev/sda2 -name=Rand_Read_Latency_Testing
FIO参数取值说明
下表以测试云盘随机写IOPS(randwrite
参数 | 说明 |
---|---|
-direct=1 | 表示测试时忽略I/O缓存,数据直写。 |
-iodepth=128 | 表示使用异步I/O(AIO)时,同时发出I/O数的上限为128。 |
-rw=randwrite | 表示测试时的读写策略为随机写(random writes)。其它测试可以设置为:randread(随机读random reads)read(顺序读sequential reads)write(顺序写sequential writes)randrw(混合随机读写mixed random reads and writes) |
-ioengine=libaio | 表示测试方式为libaio(Linux AIO,异步I/O)。应用程序使用I/O通常有两种方式:同步同步的I/O一次只能发出一个I/O请求,等待内核完成才返回。这样对于单个线程iodepth总是小于1,但是可以透过多个线程并发执行来解决。通常会用16~32根线程同时工作将iodepth塞满。异步异步的I/O通常使用libaio这样的方式一次提交一批I/O请求,然后等待一批的完成,减少交互的次数,会更有效率。 |
-bs=4k | 表示单次I/O的块文件大小为4 KiB。默认值也是4 KiB。测试IOPS时,建议将bs设置为一个较小的值,如4k。测试吞吐量时,建议将bs设置为一个较大的值,如1024k。 |
-size=1G | 表示测试文件大小为1 GiB。 |
-numjobs=1 | 表示测试线程数为1。 |
-runtime=1000 | 表示测试时间为1000秒。如果未配置,则持续将前述**-size指定大小的文件,以每次-bs**值为分块大小写完。 |
-group_reporting | 表示测试结果里汇总每个进程的统计信息,而非以不同job汇总展示信息。 |
-filename=/dev/your_device | 指定的云盘设备名,例如/dev/your_device。 |
-name=Rand_Write_Testing | 表示测试任务名称为Rand_Write_Testing,可以随意设定。 |