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


    测试背景及环境说明

    阿里云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#

    --此致--

  • 相关阅读:
    Docker的安装、配置及其基本使用
    Java提升七:注解
    Java提升六:泛型
    Java提升五:反射与动态代理
    MySQL中如何将主键默认值设为UUID()
    图解Mybatis框架原理及使用
    Java提升四:Stream流
    Java提升三:函数式接口
    Java提升二:Lambda表达式与方法引用
    java提升一:内部类
  • 原文地址:https://www.cnblogs.com/thatsit/p/5134266.html
Copyright © 2020-2023  润新知