客户在 Azure中建立虚拟机后,通常有磁盘性能测试的需求。
针对基Azure 上 Centos Linux虚拟机环境进行磁盘性能测试。
在Azure中建立Linux虚拟机后,可以看见两个磁盘分别为sda和sdb,其中sda为系统盘,sdb为临时盘。临时盘为虚拟机所在物理服务器的本地存储,在Windows Azure执行计划内或计划外维护时,虚拟机会移动到其他宿主服务器,所以会造成临时盘的内容丢失。除系统盘和临时盘外,Windows Azure还允许用户挂载数据盘。对于Linux虚拟机,系统盘才30G的空间,所以在实际应用场景中需要挂载数据盘存储应用数据。在azure linux虚拟机中,对于A7类型的虚拟机最多允许挂载16个数据磁盘,提供16TB的存储空间并且这些磁盘支持通过Raid机制获得更好的读/写性能。
1. 安装磁盘测试工具
Fio是常见的磁盘IOPS测试工具。首先在Centos中安装Fio:
yum install gcc libaio-devel –y
下载Fio 并安装:
wgethttp://brick.kernel.dk/snaps/fio-2.1.6.1.tar.gz
tar -zxvf fio-2.1.6.1.tar.gz
cd fio-2.1.6.1
make&& make install
2. 查看当前磁盘信息
fdisk -l
可以看见当前系统盘和临时盘
3. 附件数据磁盘
在Windows Azure的管理portal中,为测试虚拟机新增数据磁盘。
输入磁盘大小,附加成功后查看磁盘信息:
Sudo grep scsi /var/log/messages
对新磁盘执行分区操作:
sudo fdisk /dev/sdc
分区完成后创建文件系统:
sudo mkfs -t ext4 /dev/sdc1
创建挂载点
sudo mkdir /datadrive
sudo mount /dev/sdc1 /datadrive
为下次重启能自动挂载,需要修改/etc/fstab文件
执行sudo -i blkio 获取新磁盘的uuid,并添加到fstab文件
`UUID=33333333-3b3b-3c3c-3d3d-3e3e3e3e3e3e/datadrive ext4 defaults 1 2`
4. 执行测试
对系统盘执行随机写测试
fio -filename=/dev/sda1 -direct=1 -iodepth1 -thread -rw=randwrite -ioengine=psync-bs=16k -size=20G -numjobs=30-runtime=1000 -group_reporting -name=test
测试结果的iops为478,与windows Azure每磁盘500IOPS较为一致。
接下来执行随机读和随机读写测试:
随机读测试
fio -filename=/dev/sda1 -direct=1 -iodepth1-thread -rw=randread -ioengine=psync -bs=16k -size=2G -numjobs=10-runtime=1000-group_reporting-name=test
随机读写测试
fio -filename=/dev/sda1 -direct=1 -iodepth1 -thread -rw=randrw-rwmixread=70 -ioengine=psync -bs=16k -size=20G -numjobs=30-runtime=100-group_reporting -name=test1
用以上方法对数据盘/dev/sdc1进行测试。
参数说明:
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=psyncio引擎使用pync方式
rwmixwrite=30在混合读写的模式下,写占30%
group_reporting关于显示结果的,汇总每个进程的信息。
此外
lockmem=1g只使用1g内存进行测试。
zero_buffers用0初始化系统buffer。
nrfiles=8每个进程生成文件的数量
部署RAID的想法特别对在Windows Azure上创建的 Linux VM,在VM上部署MySQL等服务,同时希望能够获得性能更高的磁盘读/写访问,得到更好的数据安全、支持更多的并发访问会更好
对于Azure上的Linux虚拟机,可以采用以下的步骤,来创建RAID:
1. 在一个虚拟机上附加多个数据盘。
不同尺寸的虚拟机可以附加的数据盘的数量也不一样:其中8核的XL和A7最多可以增加16块1T的数据盘,即每个虚拟机最多可提供16TB。
这一工作可以在 Azure管理门户(Management Portal)上来完成,也可以用PowerShell脚本等方式来添加。
需要注意的是,对于数据磁盘,主机缓存默认首选项为“无”,这样对于数据库的应用,保证数据不丢而言更为有利。
2. 在Linux虚拟机中,利用root权限,执行下面的创建RAID、文件系统及磁盘安装命令:
mdadm --create/dev/md0 --level=0 --raid-devices=4 /dev/sdc /dev/sdd /dev/sde /dev/sdf
mkfs.ext3/dev/md0
mount /dev/md0/raid0
例如,利用4块数据磁盘,部署RAID-0。
不同的RAID等级,可以满足用户针对磁盘读/写性能、数据校验等方面的要求。