Chinaunix首页 | 论坛 | 博客
  • 博客访问: 857989
  • 博文数量: 150
  • 博客积分: 5123
  • 博客等级: 大校
  • 技术积分: 1478
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-06 10:03
文章分类

全部博文(150)

文章存档

2011年(2)

2010年(139)

2009年(9)

分类: LINUX

2010-02-25 10:11:08

我们知道intel MLC SSD硬盘随着使用会产生很碎片,随着碎片的增加性能会大大降低。intel的工程师介绍可以使用HPA技术保留一部分空间给SSD硬盘内部使用,这样可以有效的降低碎片。
先介绍一下什么是HPA:
HPA是"host protected area"的缩写,通俗的理解就是设置读取的硬盘最大的扇区号,从而把高端的内容隐藏起来,这个最大的扇区号能够写在硬盘的某个地方,因此即使你把这个硬盘挂到其它机器上,正常情况下你也看不到隐藏的内容,fdisk,pqmaigc之类的工具也把这个硬盘当做一个稍小容量的硬盘。HPA是ATA的标准,ATA-4就包含了HPA,这个标准需要在HDD的 Firmware支持的。
在Linux下使用新版本的hdparm工具可以设置HPA,Rhel5.X下自带的hdparm工具版本太低了,不能设置HPA。可以从sourceforge网站上下载hdparm工具:,我下载的版本是hdparm-9.27.tar.gz,下载后放在/usr/src目录下:
#cd /usr/src
#tar zxvf hdparm-9.27.tar.gz
#cd hdparm-9.27
#make
#make install
这样就安装好了新版本的hdparm,
检查hdparm的版本是否是新版本:
#hdparm -V
hdparm v9.27
注意设置HPA会导致硬盘上原先的数据被破坏。
查看HPA的设置:
#hdparm -N /dev/sdh
/dev/sdh:
 max sectors   = 312581808/312581808, HPA is disabled
可以看到HPA是关闭的。
设置HPA,160G的SSD盘按2^30bytes/GB的话,大小为149GB,我们的的硬盘大小设置为120GB,留29GB给内部使用。
 
注意:设置HPA时必须保证硬盘没有被使用,同时设置完HPA后需要重新启动机器才能生效。如果设置完后,又需要重新设置HPA,需要把硬盘断电后,再设置,否能可能会设置失败。
#hdparm -N p251658240 /dev/sdh
/dev/sdh:
 setting max visible sectors to 251658240 (permanent)
Use of -Nnnnnn is VERY DANGEROUS.
You have requested reducing the apparent size of the drive.
This is a BAD idea, and can easily destroy all of the drive's contents.
Please supply the --yes-i-know-what-i-am-doing flag if you really want this.
Program aborted.
由于这个操作是会导致盘上的数据全部丢失,所以hdparm会警告你,需要加 --yes-i-know-what-i-am-doing ,才会真正设置HPA。
 
#hdparm -N p251658240 --yes-i-know-what-i-am-doing /dev/sdh
 
命令中的pNNNNNNN中的P表明是持久化设置。
 
 
重新启动Linux。
检查设置是否成功:
#hdparm -N /dev/sdh
/dev/sdh:
 max sectors   = 251658240/312581808, HPA is enabled
#blockdev --getsize /dev/sdh
251658240
blockdev返回的大小应是设置后的大小。
 
我测试的160G的intel MLC SSD硬盘的型号为SSDSA2M160,firmware版本为: 02G9,通过设置HPA后,对硬盘进行十几个小时后的8k大小的随机写后得到的硬盘的写IOPS如下:
硬盘的大小  149G  140G  130G  120G  110G  100G  90G
硬盘的写IOPS  310  350  850  2400  2700  3050  4100
 
阅读(3739) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~