<ins id='4zqrf'></ins>

<acronym id='4zqrf'><em id='4zqrf'></em><td id='4zqrf'><div id='4zqrf'></div></td></acronym><address id='4zqrf'><big id='4zqrf'><big id='4zqrf'></big><legend id='4zqrf'></legend></big></address>

  • <i id='4zqrf'></i>
  • <tr id='4zqrf'><strong id='4zqrf'></strong><small id='4zqrf'></small><button id='4zqrf'></button><li id='4zqrf'><noscript id='4zqrf'><big id='4zqrf'></big><dt id='4zqrf'></dt></noscript></li></tr><ol id='4zqrf'><table id='4zqrf'><blockquote id='4zqrf'><tbody id='4zqrf'></tbody></blockquote></table></ol><u id='4zqrf'></u><kbd id='4zqrf'><kbd id='4zqrf'></kbd></kbd>

        <fieldset id='4zqrf'></fieldset>
        <i id='4zqrf'><div id='4zqrf'><ins id='4zqrf'></ins></div></i>

          <code id='4zqrf'><strong id='4zqrf'></strong></code>
          <span id='4zqrf'></span>
          <dl id='4zqrf'></dl>

            测试磁盘读写速度

            • 时间:
            • 浏览:11
            • 来源:124软件资讯网

            怎样提高系统的性能是所有Linux系统工程师都要思量的问题  ,尤其对于大数据处置惩罚  ,不得不思量系统的读写性能  。要知道读写性能 ,前面博客中提到/O性能 ,可以看到每个I/O的状态  ,现在需要知道一个磁盘每秒读写数据的速率到底可以到达几多  ?

            可以使用hdparm工具 ,需要注重的是这个下令是用来获取或者设置SATA/IDE装备参数的下令  。其下令的使用花样如下:

             

            hdparm [flag] [device]   ...
            有关这个下令详细的使用参数可以使用man举行检察 。这里我们使用下面的下令举行磁盘读写速率的检察:

             

             

            hdparm -Tt  /dev/sda
            这里的T表现直接从Linux的缓存区而不通过磁盘读取数据的速率  ,t表现读取磁盘数据的速率  ,可以看到下面的效果:

             

             

            /dev/sda:
            Timing cached reads: 6676 MB in 2.00 seconds = 3340.18 MB/sec
            Timing buffered disk reads: 218 MB in 3.11 seconds = 70.11 MB/sec
            
            以上只是早期的Linux工程师为了测试磁盘的读写状态而写的一个下令  。但现实中有IDE、SATA、SCSI、光纤 ,这四种类型的磁盘接口  ,前两种比力普遍 ,主要使用与家用装备  ,一些服务器上也使用;SCSI主要用于服务器接口且支持热插拔  ,其具有多使命、带宽大、CPU的占用率低等特点;光纤则用于高端服务器接口 ,它也具有热插拔、高速带宽、远程毗连、可毗连装备多等特点  。使用这个下令  ,只是能解决前面两种  ,后面两种无法解决  ,这种情形下只能另寻出路了  。

             

            Linux系统有个下令  ,df与dd  。我们可以首先使用df检察一下系统中可用的磁盘容量 ,然后再使用time下令  ,联合dd下令最后得出磁盘的读写速率 ,这样就可以解决上面的问题了  。

            这里需要注重的一点是  ,提取这个time的输出内容的时间要注重  ,我们通过使用man time可以瞥见这么一句话:

            When command finishes ,time writes a message to standard error giving timing statistics about this program run.

            可以得time下令是使用尺度堕落(STDERROR)将法式的运行效果输出 ,以是直接使用管道通过尺度输出获取效果是错误的  。这里我们需要举行重定向  ,可以使用下面两种下令来实现:

             

            (time dd if=/dev/zero of=/opt/hello.txt bs=8k count=100000 conv=fdatasync) 2>&1 | grep 'real'
            上面的下令 ,我们将time作为一个子下令举行运行用()操作  ,然后再使用2>&1将尺度堕落重定向到尺度输出  ,然后再提取出含real字符串的一项 。
            {time dd if=/dev/zero of=/opt/hello.txt bs=8k count=100000 conv=fdatasync; }2>&1 |grep 'real'

             

            上面下令使用{}举行子下令的执行 ,注重末端的}前面有一个空格  ,否则此下令无法执行  。

            可以写一个剧本举行测试:

             

            #!/bin/bash
            testfile=/opt/tempfile.txt
            
            option1=sync
            option2=fsync
            option3=fdatasync
            
            freespace=$(df -m |sed -n '2p' | awk '{print $4}')
            echo $freespace
            if [ $(($freespace > 2048)) ]
            then
            	costtime=$( (time dd if=/dev/zero  of=$testfile bs=8k count=200000 conv=$option3) 2>&1 |grep 'real'|awk '{print $2}')
                echo $costtime
            	min=${costtime%m*}
            	sectemp=${costtime#*m}
            	sec=${sectemp%s*}
            	total_time=$(echo "$min*60+$sec" | bc -l)
            	if [ $(echo "$total_time>0"|bc) -eq 1 ];then
            	    echo "the total time is $total_time secs"
            	    average=$( echo "1638.4/$total_time"|bc -l)
            	    echo "the speed of this disk is $average Mb/s"
            	fi
            	rm -rf $testfile
            fi
            以上剧本测试往磁盘写入1.6G数据的时间磁盘的速率  ,这里在使用dd下令的时间 ,使用了参数conv=fdatasync ,表现直接将数据写入到磁盘  ,这样测得的数据就是现实写入磁盘的速率 ,相识IO同步可以看下本博客中这篇  。