zoukankan      html  css  js  c++  java
  • 【Linux】磁盘读写 测试

    一、如何查看当前磁盘的IO使用情况

    使用命令:iotop

    Total DISK READ: 3.89 K/s | Total DISK WRITE: 0.00 B/s 
      TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND                                                                                                                       
    14060 be/2 root        3.89 K/s    0.00 B/s  0.00 %  0.09 % AliYunDun
    14695 be/4 www         0.00 B/s   89.42 K/s  0.00 %  0.00 % nginx: worker process
    14697 be/4 www         0.00 B/s  256.61 K/s  0.00 %  0.00 % nginx: worker process
    14698 be/4 www         0.00 B/s   38.88 K/s  0.00 %  0.00 % nginx: worker process
    14699 be/4 www         0.00 B/s   66.10 K/s  0.00 %  0.00 % nginx: worker process
        1 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % init
        2 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kthreadd]
        3 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/0]
        4 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ksoftirqd/0]
        5 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [stopper/0]
        6 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [watchdog/0]
        7 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/1]
        8 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [stopper/1]
        9 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ksoftirqd/1]
       10 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [watchdog/1]
       11 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/2]
       12 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [stopper/2]
       13 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ksoftirqd/2]
       14 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [watchdog/2]
       15 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/3]
       16 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [stopper/3]
       17 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ksoftirqd/3]
       18 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [watchdog/3]
       19 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/4]
       20 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [stopper/4]
    

    使用命令sar

    [root@test ~]# sar -b 1 10
    Linux 2.6.32-573.22.1.el6.x86_64 (test)         01/08/2019      _x86_64_        (8 CPU)
    
    06:10:37 PM       tps      rtps      wtps   bread/s   bwrtn/s
    06:10:38 PM    273.47      4.08    269.39     32.65  10195.92
    06:10:39 PM      4.08      2.04      2.04     16.33     16.33
    06:10:40 PM      4.12      2.06      2.06     16.49     16.49
    06:10:41 PM      3.09      3.09      0.00     24.74      0.00
    06:10:42 PM     12.00      4.00      8.00     32.00    560.00
    06:10:43 PM    263.92      2.06    261.86     16.49  10169.07
    06:10:44 PM      4.17      4.17      0.00    125.00      0.00
    06:10:45 PM      3.09      3.09      0.00     49.48      0.00
    06:10:46 PM      2.08      2.08      0.00     16.67      0.00
    06:10:47 PM      3.09      2.06      1.03     16.49    404.12
    Average:        57.45      2.88     54.57     34.53   2141.83

    说明:

    • tps: 每秒向磁盘设备请求数据的次数,包括读、写请求,为rtps与wtps的和。出于效率考虑,每一次IO下发后并不是立即处理请求,而是将请求合并(merge),这里tps指请求合并后的请求计数。

    • rtps: 每秒向磁盘设备的读请求次数

    • wtps: 每秒向磁盘设备的写请求次数

    • bread: 每秒从磁盘读的bytes数量

    • bwrtn: 每秒向磁盘写的bytes数量

    二、磁盘读写速率测试

    1、获取blocksize

    [root@test ~]# blockdev --getbsz /dev/vda1
    4096
    

    blocksize是4KB大小

    [root@iZ23e3f2jdcZ ~]# time dd if=/dev/zero  of=test.dbf bs=4K  count=50000  oflag=direct 
    50000+0 records in
    50000+0 records out
    204800000 bytes (205 MB) copied, 35.9065 s, 5.7 MB/s
    
    real    0m35.908s
    user    0m0.099s
    sys     0m1.797s
    
    [root@iZ23e3f2jdcZ ~]# time dd if=/dev/zero  of=test.dbf bs=4K  count=50000
    50000+0 records in
    50000+0 records out
    204800000 bytes (205 MB) copied, 1.09874 s, 186 MB/s
    
    real    0m1.103s
    user    0m0.025s
    sys     0m0.254s
    
    [root@iZ23e3f2jdcZ ~]# time dd if=/dev/vda1 of=/dev/null bs=4K  count=50000 
    50000+0 records in
    50000+0 records out
    204800000 bytes (205 MB) copied, 1.49831 s, 137 MB/s
    
    real    0m1.500s
    user    0m0.021s
    sys     0m0.180s
    
    [root@test ~]# hdparm -Tt /dev/vda1
    /dev/vda1:
     Timing cached reads:   19468 MB in  1.99 seconds = 9766.52 MB/sec
     Timing buffered disk reads: 384 MB in  3.00 seconds = 127.88 MB/sec
    

      

    2、工具介绍

    使用hdparm命令

    这是一个是用来获取ATA/IDE硬盘的参数的命令,是由早期Linux IDE驱动的开发和维护人员 Mark Lord开发编写的( hdparm has been written by Mark Lord <mlord@pobox.com>, the primary developer and maintainer of the (E)IDE driver for Linux, with suggestions from many netfolk).该命令应该也是仅用于Linux系统,对于UNIX系统,ATA/IDE硬盘用的可能比较少,一般大型的系统都是使用磁盘阵列的

    使用方法很简单

    hdparm -Tt /dev/vda1

    可以看到,2秒钟读取了19468MB的缓存,约合9766.52MB/sec,在3.11秒中读取了384MB磁盘(物理读),读取速度约合127.88 MB/sec

    使用dd命令

    这不是一个专业的测试工具,不过如果对于测试结果的要求不是很苛刻的话,平时可以使用来对磁盘的读写速度作一个简单的评估,另外由于这是一个免费软件,基本上×NIX系统上都有安装,对于Oracle裸设备的复制迁移,dd工具一般都是首选.

    首先了解两个特殊设备

    • /dev/null 伪设备,回收站.写该文件不会产生IO

    • /dev/zero 伪设备,会产生空字符流,对它不会产生IO

    测试方法:

    a.测试磁盘的IO写速度

     time dd if=/dev/zero of=test.dbf bs=4k count=300000   # 如果要测试实际速度 还要在末尾加上 oflag=direct测到的才是真实的IO速度

     b.测试磁盘的IO读速度

    dd if=test.dbf bs=4k count=300000 of=/dev/null  #表示 每次写入/读取8k的数据,执行300000次

    dd语法

    功能说明:读取,转换并输出数据。

    语法:dd [bs=<字节数>][cbs=<字节数>][conv=<关键字>][count=<区块数>][ibs=<字节数>][if=<文件>][obs=<字节数>][of=<文件>][seek=<区块数>][skip=<区块数>][--help][--version]

    补充说明:dd可从标准输入或文件读取数据,依指定的格式来转换数据,再输出到文件,设备或标准输出。

    参数:

    • bs=<字节数> 将ibs( 输入)与obs(输出)设成指定的字节数。

    • cbs=<字节数> 转换时,每次只转换指定的字节数。

    • conv=<关键字> 指定文件转换的方式。

    • count=<区块数> 仅读取指定的区块数。

    • ibs=<字节数> 每次读取的字节数。

    • if=<文件> 从文件读取。

    • obs=<字节数> 每次输出的字节数。

    • of=<文件> 输出到文件。

    • seek=<区块数> 一开始输出时,跳过指定的区块数。

    • skip=<区块数> 一开始读取时,跳过指定的区块数。

    • --help 帮助。

    • --version 显示版本信息。

    dd常用参数详解

    • if=xxx 从xxx读取,如if=/dev/zero,该设备无穷尽地提供0,(不产生读磁盘IO)

    • of=xxx 向xxx写出,可以写文件,可以写裸设备。如of=/dev/null,"黑洞",它等价于一个只写文件. 所有写入它的内容都会永远丢失. (不产生写磁盘IO)

    • bs=8k 每次读或写的大小,即一个块的大小。

    • count=xxx 读写块的总数量。

    避免操作系统“写缓存”干扰测试成绩,使用sync、fsync、fdatasync

  • 相关阅读:
    DirectUI的初步分析转
    win32中调用Atl控件
    win32 DirectUI控件开发与调用指南
    sqlite in qt
    Visual Studio2010中使用IE调试Atl
    silveright使用配置文件转
    Windows phone app 商店认证注意事项简要认证规范指南
    Silverlight桌面部署器及其使用
    Lua语言如何调用自己编写的C DLL 转
    使用Visual Leak Detector for Visual C++ 捕捉内存泄露
  • 原文地址:https://www.cnblogs.com/chenpingzhao/p/10240966.html
Copyright © 2011-2022 走看看