本文共 1807 字,大约阅读时间需要 6 分钟。
读性能测试 # time dd iflag=direct,nonblock if=/dev/sda2 of=/dev/null bs=8k count=8388608 因为/dev/sda2是一个物理分区,对它的读取会产生IO,/dev/null是伪设备,相当于黑洞,of到该设备不会产生IO,所以,这个命令的IO只发生在/dev/sdb1上,也相当于测试磁盘的读能力。 写测试 # time dd oflag=direct,nonblock if=/dev/zero f=/opt/iotest bs=8k count=8388608 因为/dev/zero是一个伪设备,它只产生空字符流,对它不会产生IO,所以,IO都会集中在of文件中,of文件只用于写,所以这个命令相当于测试磁盘的写能力。 读写测试 # time dd iflag=direct,nonblock oflag=direct,nonblock if=/dev/sda2 f=/opt/iotest bs=8k count=8388608 注:bs是一次io读的规模,理论上bs越大,所测得性能越高 count是读多少个"bs",也可以写成count=16G 规避掉文件系统cache,直接读写,不使用buffer cache iflag=direct,nonblock oflag=direct,nonblock iflag=cio oflag=cio direct 模式就是把写入请求直接封装成io 指令发到磁盘 非direct 模式,就把数据写入系统缓存,然后就认为io 成功,并由操作系统决定缓存中的数据什么时候被写入磁盘 使用hdparm命令来查看硬盘缓存的读速度。 我建议你运行下面的命令2-3次来对设备读性能进行检测,以作为参照和相互比较: ### 有缓存的硬盘读性能测试——/dev/sda ### hdparm -t /dev/sda1 ## 或者 ## hdparm -t /dev/sda ## Cache读基准——/dev/sda ### hdparm -T /dev/sda1 ## 或者 ## hdparm -T /dev/sda hdparm -Tt /dev/sda 为了获得精确的读测试数据,首先在测试前运行下列命令,来将缓存设置为无效: flush echo 3 | sudo tee /proc/sys/vm/drop_caches time time dd if=/path/to/bigfile of=/dev/null bs=8k ### 带有Cache的Debian系统笔记本吞吐率### dd if=/dev/zero of=/tmp/laptop.bin bs=1G count=1 oflag=direct ###使cache失效### hdparm -W0 /dev/sda ###没有Cache的Debian系统笔记本吞吐率### dd if=/dev/zero of=/tmp/laptop.bin bs=1G count=1 oflag=direct ## 运行这个命令2-3次来获得更好地结果 ### time sh -c "dd if=/dev/zero of=/tmp/testfile bs=100k count=1k && sync" //写 [root@localhost ~]# sync;/usr/bin/time -p bash -c "(dd if=/dev/zero of=test.dd bs=1M count=20000)" 记录了20000+0 的读入 记录了20000+0 的写出 20971520000字节(21 GB)已复制,10.2713 秒,2.0 GB/秒 real 10.27 user 0.00 sys 10.26 //读 [root@localhost ~]# echo 3 > /proc/sys/vm/drop_caches ; /usr/bin/time -p dd if=test.dd of=/dev/null bs=1M 记录了20000+0 的读入 记录了20000+0 的写出 20971520000字节(21 GB)已复制,23.9553 秒,875 MB/秒 real 23.98 user 0.00 sys 5.58 转载地址:http://hjpab.baihongyu.com/