Linux下测试磁盘I/O性能

来源:互联网 发布:mac虚拟机能玩游戏吗 编辑:程序博客网 时间:2024/05/16 10:16

1.hdparm

hdparm -tT /dev/sda 测试硬盘速度
hdparm -A1 /dev/sda 开启硬盘预读取功能
hdparm -c3 /dev/sda 开启硬盘32位
hdparm -d1 /dev/sda 开启DMA

-d 和 -A 参数对IDE硬盘读写性能影响最大(尤 -d)

2.dd

dd工具使用重要参数
参数
 含义
 
if
 输入设备或者文件
 
of
 输出设备或文件
 
bs
 dd缓冲区。设定dd时一次io拷贝多少数据,它与输入文件和输出文件的block size都没有直接联系。

一般来说,bs越大,拷贝速度越快
 
skip
 设定dd时从输入文件中跳过多少个dd缓冲区开始拷贝数据。一般在裸设备有offset时使用
 
seek
 设定dd时从输出文件中跳过多少个dd缓冲区开始写入数据。一般在裸设备有offset时使用
 
count
 设置dd的io数量。如果省略了count,表示完全拷贝输入文件到输出文件上
 

dd参数适用范围
备份源
 备份目的地
 适用参数
 
裸设备
 裸设备
 if of bs skip seek count
 
裸设备
 文件系统
 if of bs skip count
 
文件系统
 裸设备
 if of bs seek
 
文件系统
 文件系统
 if of bs
 

dd拷贝oracle数据文件需要考虑的因素
因素
 含义
 
block size 
 dd一次io的buffer大小
 
offset
 只适用于裸设备,有些操作系统在裸设备上保留一定的空间给内部使用,拷贝时要跳过这部分内容
 
block 0
 每一个oracle数据文件的头都包含一个与数据文件所在表空间的blocksize的相等的block

这个block是不计算入oracle数据文件的bytes的,但在操作系统中,它是会占用空间的。
 

测试磁盘速度?
首先要了解两个特殊的设备:

/dev/null:回收站、无底洞

/dev/zero:产生字符

Ø 测试磁盘写能力

time dd if=/dev/zero of=/test.dbf bs=8k count=300000

因为/dev//zero是一个伪设备,它只产生空字符流,对它不会产生IO,所以,IO都会集中在of文件中,of文件只用于写,所以这个命令相当于测试磁盘的写能力。

Ø 测试磁盘读能力

time dd if=/dev/sdb1 of=/dev/null bs=8k

因为/dev/sdb1是一个物理分区,对它的读取会产生IO,/dev/null是伪设备,相当于黑洞,of到该设备不会产生IO,所以,这个命令的IO只发生在/dev/sdb1上,也相当于测试磁盘的读能力。

Ø 测试同时读写能力

time dd if=/dev/sdb1 of=/test1.dbf bs=8k

这个命令下,一个是物理分区,一个是实际的文件,对它们的读写都会产生IO(对/dev/sdb1是读,对/test1.dbf是写),假设他们都在一个磁盘中,这个命令就相当于测试磁盘的同时读写能力。

 

可以通过使用dd if=/dev/zero of=/file 来测试磁盘的纯写入性能

使用dd if=/file of=/dev/null 来测试磁盘的纯读取性能

使用dd if=/file1 of=/file2 来测试磁盘的读写性能

 

3.iozone


4.iozone和hdparm的区别

iozone文件系统的表现是pagecache和磁盘性能的综合体, 在用iozone的时候, 如果文件大小在pagecache的容量之内, 你所看到的高性能通常是pagecache的性能, 也就是内存访问的速度. 如果想利用iozone测试真正的磁盘访问能力, 文件大小需要远大于内存容量. 比方说, 512M内存的机器, 可以用2G-4G的文件进行测试, 这样可以在统计上消除pagecache带来的噪音. 
HDparam是直接访问块设备, 所以本身没有受到cache的影响. 17MB/sec是你硬盘的真正顺序访问的吞吐能力

0 0
原创粉丝点击