阿里云主机SSD实例磁盘测试及IO调度算法调整

it2022-05-09  54

测试背景及环境说明

阿里云ECS

主机配置:

  4C8G

root@zabbix-master:~# grep -i "model name" /proc/cpuinfo model name : Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz model name : Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz model name : Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz model name : Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz root@zabbix-master:~# root@zabbix-master:~# free -m total used free shared buffers cached Mem: 8008 7863 144 0 209 6666 -/+ buffers/cache: 987 7020 Swap: 0 0 0 root@zabbix-master:~#

系统盘: SSD优化实例 20GB

数据盘: SSD 300GB

root@zabbix-master:~# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT vda 254:0 0 20G 0 disk ├─vda1 254:1 0 20G 0 part / └─vda2 254:2 0 1M 0 part vdb 254:16 0 300G 0 disk /data sr0 11:0 1 1024M 0 rom root@zabbix-master:~#

操作系统:Debian 8.2

root@zabbix-master:~# cat /etc/debian_version 8.2 root@zabbix-master:~#

测试目的

测试阿里云SSD的IO性能(主要是写入),并选取合适的IO调度算法

测试步骤

查看系统支持的IO调度算法

root@zabbix-master:~# dmesg |grep -i scheduler [ 0.489195] io scheduler noop registered [ 0.489196] io scheduler deadline registered [ 0.489447] io scheduler cfq registered (default) root@zabbix-master:~#

测试系统盘vda

查看vda使用IO调度算法,是cfq

root@zabbix-master:/tmp# cat /sys/block/vda/queue/scheduler noop deadline [cfq] root@zabbix-master:/tmp#

测试cfq下vda的写入

root@zabbix-master:/tmp# dd bs=1M count=1024 if=/dev/zero of=/tmp/test.w conv=fdatasync 记录了1024+0 的读入 记录了1024+0 的写出 1073741824字节(1.1 GB)已复制,17.1651 秒,62.6 MB/秒 root@zabbix-master:/tmp# root@zabbix-master:/tmp# du -sh test.w 1.1G test.w root@zabbix-master:/tmp#

将调整为noop进行测试

root@zabbix-master:/tmp# echo noop > /sys/block/vda/queue/scheduler root@zabbix-master:/tmp# cat /sys/block/vda/queue/scheduler [noop] deadline cfq root@zabbix-master:/tmp# root@zabbix-master:/tmp# rm -f test.w root@zabbix-master:/tmp# root@zabbix-master:/tmp# dd bs=1M count=1024 if=/dev/zero of=/tmp/test.w conv=fdatasync 记录了1024+0 的读入 记录了1024+0 的写出 1073741824字节(1.1 GB)已复制,17.5197 秒,61.3 MB/秒 root@zabbix-master:/tmp#

测试数据盘vdb

查看vdb使用IO调度算法,是cfq

root@zabbix-master:/data/dd_test# cat /sys/block/vdb/queue/scheduler noop deadline [cfq] root@zabbix-master:/data/dd_test#

测试cfq下vdb的写入

root@zabbix-master:/data/dd_test# dd bs=1M count=1024 if=/dev/zero of=/data/dd_test/test.w conv=fdatasync 记录了1024+0 的读入 记录了1024+0 的写出 1073741824字节(1.1 GB)已复制,5.5823 秒,192 MB/秒 root@zabbix-master:/data/dd_test# root@zabbix-master:/data/dd_test# du -sh test.w 1.1G test.w root@zabbix-master:/data/dd_test#

调整为noop进行测试

root@zabbix-master:/data/dd_test# echo noop > /sys/block/vdb/queue/scheduler root@zabbix-master:/data/dd_test# cat /sys/block/vdb/queue/scheduler [noop] deadline cfq root@zabbix-master:/data/dd_test# root@zabbix-master:/data/dd_test# rm -f test.w root@zabbix-master:/data/dd_test# root@zabbix-master:/data/dd_test# dd bs=1M count=1024 if=/dev/zero of=/data/dd_test/test.w conv=fdatasync 记录了1024+0 的读入 记录了1024+0 的写出 1073741824字节(1.1 GB)已复制,5.73825 秒,187 MB/秒 root@zabbix-master:/data/dd_test#

调整为deadline进行测试

root@zabbix-master:/data/dd_test# echo deadline > /sys/block/vdb/queue/scheduler root@zabbix-master:/data/dd_test# cat /sys/block/vdb/queue/scheduler noop [deadline] cfq root@zabbix-master:/tmp# root@zabbix-master:/data/dd_test# du -sh test.w 1.1G test.w root@zabbix-master:/data/dd_test# root@zabbix-master:/data/dd_test# rm -f test.w root@zabbix-master:/data/dd_test# root@zabbix-master:/data/dd_test# dd bs=1M count=1024 if=/dev/zero of=/data/dd_test/test.w conv=fdatasync 记录了1024+0 的读入 记录了1024+0 的写出 1073741824字节(1.1 GB)已复制,5.63042 秒,191 MB/秒 root@zabbix-master:/data/dd_test#

顺便测试跨盘(vda-->vdb)读写

root@zabbix-master:/data/dd_test# dd if=/dev/vda1 of=/data/dd_test/test.w bs=1M count=1024 conv=fdatasync 记录了1024+0 的读入 记录了1024+0 的写出 1073741824字节(1.1 GB)已复制,18.1907 秒,59.0 MB/秒 root@zabbix-master:/data/dd_test#

测试结果

①:虽然阿里云的系统盘声称也是SSD,但是系统盘的读写速度明显不及数据盘. ②:系统盘和数据盘的写入速度(1M)在noop下和cfq还有deadline下没有明显的差异

疑问

跨盘读写测试中的瓶颈的出现在哪里?     vda读?     vdb写?     网络? PS:或许这个疑问的解答需要详细的准备测试计划进行测试,同时测试1K,4K,8K,1M等数据大小;并分别测试读,写,双向跨盘读写.

最终IO调度算法的选择

    系统盘: 仍然是cfq     数据盘: 选用deadline

参考调优准则:

  Deadline对数据库环境(ORACLE RAC,MYSQL等)是最好的选择,由于数据盘主要是作为MySQL数据库的数据目录来使用,遵从此准则进行调整.

原因:

  Deadline确保了在一个截止时间内服务请求,这个截止时间是可调整的,而默认读期限短于写期限.这样就防止了写操作因为不能被读取而饿死的现象.  

将IO调度算法的配置持久化写入

我没有使用修改grub的方式,而是将调整调度算法的操作写到rc.local中        root@zabbix-master:/data/dd_test# grep scheduler /etc/rc.local echo deadline > /sys/block/vdb/queue/scheduler root@zabbix-master:/data/dd_test#

 

--此致--

转载于:https://www.cnblogs.com/thatsit/p/5134266.html

相关资源:数据结构—成绩单生成器

最新回复(0)