zoukankan      html  css  js  c++  java
  • 阿里云主机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#

    --此致--

  • 相关阅读:
    二分+RMQ/双端队列/尺取法 HDOJ 5289 Assignment
    思维题 HDOJ 5288 OO’s Sequence
    树形DP Codeforces Round #135 (Div. 2) D. Choosing Capital for Treeland
    最大流增广路(KM算法) HDOJ 1853 Cyclic Tour
    最大流增广路(KM算法) HDOJ 1533 Going Home
    最大流增广路(KM算法) HDOJ 2255 奔小康赚大钱
    Complete the Word CodeForces
    Gadgets for dollars and pounds CodeForces
    Vasya and Basketball CodeForces
    Carries SCU
  • 原文地址:https://www.cnblogs.com/thatsit/p/5134266.html
Copyright © 2011-2022 走看看