阿里云SSD云盘性能测试:每GB空间30个IOPS

作者:简简单单 2015-09-21

正 文:
 
   由于服务器需要高并发高IO,所以入手了阿里云的SSD云盘+IO优化的ECS实例。
   阿里云SSD云盘:单盘最高提供20000随机读写IOPS、256MB/s吞吐量的存储性能。采用分布式三副本机制,提供99.9999999%的数据可靠性。
    SSD云盘基于全SSD存储介质、利用阿里云飞天分布式存储技术,提供数据可靠性99.9999999%的高性能存储;该产品具备以下特点:
高性能:单个SSD云盘最高提供20000随机读写IOPS、256MB/s吞吐量的存储性能;
高可靠性:SSD云盘采用分布式三副本机制,提供99.9999999%的数据可靠性;
每GB提供30 IOPS:SSD云盘采用每GB空间30个IOPS的策略,30GB的SSD云盘拥有900 IOPS的性能、100GB的SSD云盘拥有3000 IOPS的性能、667GB的SSD云盘拥有最高20000 IOPS的性能
单块SSD云盘容量:单块SSD云盘最大提供1024GB存储空间;
    【SSD云盘和本地SSD盘 、普通云盘有啥区别? 】
如您对IO性能要求高、同时对数据可靠性要求也高,建议您选择SSD云盘,详细对比如下:
阿里云SSD云盘性能测试:每GB空间30个IOPS
    【为什么我购买的SSD云盘性能效果不明显?】
    SSD云盘采用每GB空间30个IOPS的策略,30GB的SSD云盘拥有900 IOPS的性能、100GB的SSD云盘拥有3000 IOPS的性能、667GB的SSD云盘拥有最高20000 IOPS的性能;
    如果SSD云盘在用户原有的ECS实例上使用,性能最多能发挥出1000 IOPS的能力;如果想要1000以上的IOPS性能,SSD云盘必须与I/O优化的实例配合使用;
    购买后,我该如何测试磁盘性能?
linux环境使用FIO做性能测试,测试命令:
fio -direct=1  -iodepth=64  -rw=randwrite  -ioengine=libaio  -bs=16k  -size=10G  -numjobs=1  -runtime=1000  -group_reporting  -name=/storage/iotest

这段测试的含义是测试随机写,每次写入大小16K,文件大小为10G,ioengine=libaio,运行1000秒(runtime),跳过buffer,其中 -name 指向到你想测试的磁盘上的文件。
上面这点代码比较耗时,我们可以缩减测试文件的大小和运行时间,改为:
fio -direct=1  -iodepth=64  -rw=randwrite  -ioengine=libaio  -bs=16k  -size=256M  -numjobs=1  -runtime=100  -group_reporting  -name=/storage/iotest
    下面以20G的ssd云盘(系统默认盘)测试,每秒写速bw=9456KB/s,IOPS=591。


    下面以50G的ssd云盘测试,每秒写速bw=23731KB/s,IOPS=1483。确实如介绍的那样每1GB空间30个IOPS,50G就是50x30=1500IOPS:

阿里云SSD云盘性能测试:每GB空间30个IOPS


    我们再对比下购买阿里云的普通云盘的性能  bw=16284KB/s, iops=1017 :

阿里云SSD云盘性能测试:每GB空间30个IOPS


    普通云盘的性能 和磁盘大小无关,一般固定在16MB/s吞吐量、1000IOPS随机读写上下。
    我们再来对比下腾讯云的普通云硬盘的性能,每秒写速bw=41341KB/s,IOPS=2583:

阿里云SSD云盘性能测试:每GB空间30个IOPS


    我只能呵呵了,腾讯云的普通云硬盘达到了2500随机读写IOPS、41MB/s吞吐量,是阿里云普通云盘的性能的2倍以上。。


    注意,新的磁盘需要先挂载:Linux VPS如何挂载硬盘


windows环境下使用AnvilPro工具做性能测试;


也许有人说最高提供20000随机读写IOPS、256MB/s吞吐量的存储性能 也不咋样啊?
飘易就举例说明下:我们家用机械盘在小I/O情况下,读写时随机IOPS也就是80~100左右、吞吐量10MB/s左右;如果是拷贝大的压缩包时,由于有OS的pagecache,吞吐量能达到100MB/s以上,但这只能是拷贝大应用时,对于企业级应用根本达不到这样。


    为什么我用FIO测试性能时,会导致实例宕机?   

  
     FIO这个测试工具支持裸盘分区、文件系统两种方式测试I/O性能;如果是直接测试裸盘分区,可能导致裸盘分区中的文件系统元数据被破坏掉,访问该裸盘分区中的文件时会失败,导致实例宕机;使用FIO的文件系统方式测试性能时,不存在上述问题,因此我们推荐使用FIO文件系统的方式测试I/O性能;

    【补充:】
dd命令测试硬盘的读写速度


写速度:
time dd if=/dev/zero of=/var/test bs=8k count=1000000

读速度:
time dd if=/var/test of=/dev/null bs=8k count=1000000

 
    FIO是测试IOPS的非常好的工具,用来对硬件进行压力测试和验证,支持13种不同的I/O引擎,包括:sync,mmap, libaio, posixaio, SG v3, splice, null, network, syslet, guasi, solarisaio 等等。 


    一,FIO安装
wget http://brick.kernel.dk/snaps/fio-2.0.7.tar.gz
yum install libaio-devel
tar -zxvf fio-2.0.7.tar.gz
cd fio-2.0.7
make
make install
 
    二,随机读测试:


随机读:
fio -filename=/dev/sdb1 -direct=1 -iodepth 1 -thread -rw=randread -ioengine=psync -bs=16k -size=200G -numjobs=10 -runtime=1000 -group_reporting -name=mytest

说明:


filename=/dev/sdb1 测试文件名称,通常选择需要测试的盘的data目录。
direct=1 测试过程绕过机器自带的buffer。使测试结果更真实。
rw=randwrite 测试随机写的I/O
rw=randrw 测试随机写和读的I/O
bs=16k 单次io的块文件大小为16k
bsrange=512-2048 同上,提定数据块的大小范围
size=5g 本次的测试文件大小为5g,以每次4k的io进行测试。
numjobs=30 本次的测试线程为30.
runtime=1000 测试时间为1000秒,如果不写则一直将5g文件分4k每次写完为止。
ioengine=psync io引擎使用pync方式
rwmixwrite=30 在混合读写的模式下,写占30%
group_reporting 关于显示结果的,汇总每个进程的信息。
此外
lockmem=1g 只使用1g内存进行测试。
zero_buffers 用0初始化系统buffer。
nrfiles=8 每个进程生成文件的数量。
顺序读:
fio -filename=/dev/sdb1 -direct=1 -iodepth 1 -thread -rw=read -ioengine=psync -bs=16k -size=200G -numjobs=30 -runtime=1000 -group_reporting -name=mytest

随机写:
fio -filename=/dev/sdb1 -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=psync -bs=16k -size=200G -numjobs=30 -runtime=1000 -group_reporting -name=mytest

顺序写:
fio -filename=/dev/sdb1 -direct=1 -iodepth 1 -thread -rw=write -ioengine=psync -bs=16k -size=200G -numjobs=30 -runtime=1000 -group_reporting -name=mytest

混合随机读写:
fio -filename=/dev/sdb1 -direct=1 -iodepth 1 -thread -rw=randrw -rwmixread=70 -ioengine=psync -bs=16k -size=200G -numjobs=30 -runtime=100 -group_reporting -name=mytest -ioscheduler=noop

相关文章

精彩推荐