linux磁盘性能测试

 120-test:/# apt-get install hdparm

真实机器120上测试结果:

测试磁盘性能(不cache)

120-test:/home/lai# hdparm -t /dev/sda

/dev/sda:
 Timing buffered disk reads:  346 MB in  3.02 seconds = 114.65 MB/sec

测试磁盘性能(带cache)

120-test:/home/lai# hdparm -T /dev/sda

/dev/sda:
 Timing cached reads:   2786 MB in  2.00 seconds = 1393.80 MB/sec

 

 

真实机器121上测试结果:

121:~# hdparm -t /dev/sda

/dev/sda:
 Timing buffered disk reads:  310 MB in  3.01 seconds = 102.89 MB/sec
121:~# hdparm -T /dev/sda

/dev/sda:
 Timing cached reads:   2578 MB in  2.00 seconds = 1289.01 MB/sec

 

服务器sas硬盘测试结果:

lai@*:~$ sudo hdparm -t /dev/sda

/dev/sda:
 Timing buffered disk reads:  442 MB in  3.01 seconds = 146.89 MB/sec
lai@*:~$ sudo hdparm -T /dev/sda

/dev/sda:
 Timing cached reads:   8306 MB in  2.00 seconds = 4162.04 MB/sec

 

 

虚拟机的测试结果1:

HA:/home/lai# hdparm -t /dev/sda

/dev/sda:
 Timing buffered disk reads:  176 MB in  3.01 seconds =  58.51 MB/sec
HA:/home/lai# hdparm -T /dev/sda

/dev/sda:
 Timing cached reads:   2966 MB in  2.00 seconds = 1483.26 MB/sec

 

虚拟机的测试结果2:

153:/home/lai# hdparm -t /dev/sda

/dev/sda:
 Timing buffered disk reads:  186 MB in  3.00 seconds =  61.93 MB/sec
153:/home/lai# hdparm -T /dev/sda

/dev/sda:
 Timing cached reads:   3012 MB in  2.00 seconds = 1505.78 MB/sec

 

 

hdparm优化硬盘
 
hdparm -tT /dev/hda 测试硬盘速度
hdparm -A1 /dev/hda 开启硬盘取功能
hdparm -c3 /dev/hda 开启硬盘32位
hdparm -d1 /dev/hda 开启DMA
-d 和 -A 参数对IDE硬盘性能影响最大(尤 -d)
关闭预读
121:~# hdparm -A 0 /dev/sda
/dev/sda:
 setting drive read-lookahead to 0 (off)
 look-ahead    =  0 (off)
121:~# hdparm -tT /dev/sda
/dev/sda:
 Timing cached reads:   2454 MB in  2.00 seconds = 1227.17 MB/sec
 Timing buffered disk reads:   26 MB in  3.02 seconds =   8.60 MB/sec
开启预读
121:~# hdparm -A 1 /dev/sda
/dev/sda:
 setting drive read-lookahead to 1 (on)
 look-ahead    =  1 (on)
121:~# hdparm -tT /dev/sda
/dev/sda:
 Timing cached reads:   2586 MB in  2.00 seconds = 1293.30 MB/sec
 Timing buffered disk reads:  312 MB in  3.00 seconds = 103.93 MB/sec
 

dd工具使用重要参数

参数

含义

if

输入设备或者文件

of

输出设备或文件

bs

dd缓冲区。设定dd时一次io拷贝多少数据,它与输入文件和输出文件的block size都没有直接联系。

一般来说,bs越大,拷贝速度越快

skip

设定dd时从输入文件中跳过多少个dd缓冲区开始拷贝数据。一般在裸设备有offset时使用

seek

设定dd时从输出文件中跳过多少个dd缓冲区开始写入数据。一般在裸设备有offset时使用

count

设置ddio数量。如果省略了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一次iobuffer大小

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 来测试磁盘的读写性能

 

读性能:

120-test:/home/lai# time dd if=xiangnai250.f4v of=/dev/null bs=10M       

105+1 records in
   105+1 records out
   1104677904 bytes (1.1 GB) copied,9.66456 秒,114 MB/秒

real    0m9.666s
   user    0m0.004s
   sys     0m1.032s
   读写性能:

120-test:/home/lai# dd if=xiangnai250.f4v of=/home/lai/2 bs=10M
   105+1 records in
   105+1 records out
   1104677904 bytes (1.1 GB) copied,24.5128 秒,45.1 MB/秒

 

iozone和hdparm的区别:
iozone 文件系统的表现是pagecache和磁盘性能的综合体, 在用iozone的时候, 如果文件大小在pagecache的容量之内, 你所看到的高性能通常是pagecache的性能, 也就是内存访问的速度. 如果想利用iozone测试真正的磁盘访问能力, 文件大小需要远大于内存容量. 比方说, 512M内存的机器, 可以用2G-4G的文件进行测试, 这样可以在统计上消除pagecache带来的噪音.
HDparam是直接访问块设备, 所以本身没有受到cache的影响. 17MB/sec是你硬盘的真正顺序访问的吞吐能力.
磁盘CACHE的两大功能:预读和回写
 
 
对于磁盘 I/O 来说,如果没有 CACHE ,就直接从硬盘读写;如果有 CACHE ,则首先从 CACHE 读写。
 
CACHE 具有两大功能:
 
1 、预读
 
CACHE 预读提高了计算机系统中的硬盘读的功能,尤其是在读取含有大量文件碎片的文件时。具有良好预读功能的 RAID 卡能在看起来很随机的读访问中,识别出读取磁盘的规律, 通过这个规律提前将系统要读取的数据放在 CACHE 中。
 
预读的两种方式:
 
Read Ahead
 
由于硬盘数据经常是以一族连续的硬盘扇区组织起来的,所以有时侯如把系统所请求的扇区随后的一个扇区里的数据 同时读进来是有价值的。对于数据文件的读取有利 , 特别是系统 CPU 的性能低时。
 
Pre-Fetch
 
RAID 卡发现系统要读的是先前已经读过的数据时,在 这一次,便将这一个数据块的数据写到 CACHE 里。对于程序文件的读取有利 。
 
2 、回写
 
回写是通过暂时将数据存在 CACHE 里,从而推迟将数据写到慢设备(如硬盘、磁带机)的一种工作方式。数据将在随后的时间,硬盘闲置的时候写到硬盘中。写的时候也是统一将 CACHE 内的尚未写出的数据按照数据块的在硬盘中的 BLOCK 序号写入,这样可以提高写的效率。
 
回写需要加电池给 CACHE 供电,以免数据在写到硬盘之前系统断电导致硬盘数据丢失。
 
增加 CACHE 大小对于预读来说,为系统提供了更多的来自 CACHE 的可供读取的记录。 对于回写来说,允许控制卡保存更多的记录留待后期写磁盘。特别是对于电梯式回写,使得连续的回写段之间有更近的间隔,降低硬盘写操作的平均访时间并提高了吞吐率。
 
写策略
 
通写模式下,所有数据在以命令完成状态返回到计算机之前,直接写到硬盘。两种写策略比较来说,写策略由通写改为回写时,可大幅度提高性能。但回写具有一定的数据危险性。在突然断电的情况下,会丢失存于 Cache 尚未写入硬盘的数据。
 
RAID卡 工作在写策略为 THROUGH 时,缓存大小对 RAID卡 的性能影响很小,只有当写策略改为 BACK 时,缓存的作用才会发挥出来。
 
影响 RAID卡 性能的因素很多,其中可调因素主要有 RAID卡 缓存( CACHE )大小、写策略( WRITE POLICY )、读策略( READ POLICY )、条带的大小( STRIPE SIZE )。不同的 RAID卡 虽然说法略有不同,但意思是一样的。很多设置可以在 RAID卡 的配置工具中调整。

你可能感兴趣的:(linux,cache,IO,测试,disk,磁盘)