PCEVA,PC绝对领域,探寻真正的电脑知识
打印 上一主题 下一主题
开启左侧

【转】实战SSD优化之NTFS分区闪存块的对齐

[复制链接]
跳转到指定楼层
1#
antixie 发表于 2010-11-20 00:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
点击数:6617|回复数:4
本帖最后由 antixie 于 2010-11-20 01:00 编辑

发现论坛里有朋友在纠结SDD分区对齐的问题,正好搜到就转过来了




本文来自:http://www.51nb.com/forum/viewthread.php?tid=924167

看了论坛上SSD优化之NTFS分区256K对齐这个帖子之后,仔细想了想,感觉确实有一定的道理,于是就自己实验了一下。
http://www.51nb.com/forum/viewth ... &highlight=ntfs

提速的原理应该是通过调整第一个NTFS分区的起始位置来保证不会出现NTFS的簇跨越NAND闪存的块(block),从而提高数据读写的效率。

具体来说是这样的,SLC闪存芯片的页/块大小是2KB/128KB,MLC的页/块大小是2KB/256KB或4KB/512KB(再早的MLC还有512B/32KB的,不过现在很少见了)。
也就是意味着每次可以分别以2KB/2KB/4KB为单位来写入数据,但是每次擦除必须要以128KB/256KB/512KB来擦除数据。
因为平衡写入算法的存在,用了一段时间之后的SSD每次写入数据时都必然是先擦除再写入这样一个过程。
如果按照XP之前的起始位置放在LBA63(起始位置之前保留512Bx63=31.5KB)的分区方式,将会导致NTFS分区每32(或64或128)个簇(以现在硬盘的大小,NTFS分区几乎全是4KB/簇),
就会有一个簇跨越了两个闪存块,当系统正好对跨块的簇进行操作时,就会导致需要擦除两个块之后才能写入数据,或是要分别从两个块来读取这些4KB簇的数据,这就降低了读写数据的效率。
通过调整NTFS分区的起始位置,我们就可以避免这种每隔一些簇就有一个跨过闪存块的情况,从而提高读写的效率。

这个开始位置应该放在哪里呢?
如果只是单通道的闪存设备,只要NTFS分区的开始位置前面空出512KB,也就是开始位置放在LBA1024处,就可以保证128KB/256KB/512KB块大小的闪存芯片都可以实现NTFS分区对齐了。
但事实上,几乎所有的SSD都不是单通道的,比如最常见的JM602方案是8通道的,Intel X25-M是10通道的,Intel X25-V是5通道的,这时候应该空出多少呢?
实际上,多通道的闪存设备也是把数据拆成一个一个的块,然后分别对每个通道进行读写操作,这个块的大小和所使用的闪存芯片的块的大小是一样的。
(关于这一点,大家可以从Intel X25-M和X25-V的4KB写入速度看出端倪。
Intel的主控对写入进行了优化,随机4KB写入并不是即时写入,而是在缓存中积累达到256KB(正好是Intel使用的闪存芯片的块大小)后再一次性写入。
如果这256KB数据会再进一步拆分然后才写到各个通道的话,10通道的X25-M必然会比5通道的X25-V要快,但实际上却是相差无几,这就说明多通道写入时最小的数据单位也是闪存块的大小。)
因此,我们完全可以不考虑设备是几通道的,直接把第一个分区的起始位置设在512KB之后的那个簇,也就是LBA1024处即可。
这个操作,XP之前的操作系统自带的分区工具是无法完成的,必须借助第三方工具;但是Vista/Win7的磁盘管理工具和光盘安装的分区界面进行分区时,
会自动把第一个分区设在LBA2048处,正好是1024的倍数,因此直接使用Vista/Win7来分区就自动完成了NTFS分区对齐闪存块的操作。
PS: 当然也可以根据自己固态硬盘的闪存类型来设置,比如SLC(2KB/128KB)的设在LBA256,MLC(2KB/256KB)的设在LBA512处,MLC(4KB/512KB)的设在LBA1024处等。
不过这说起来就麻烦了,建议怕麻烦的直接把硬盘挂在装好Vista/Win7的机器上,使用磁盘管理工具来分一下区就可以了。


原理说完了,Vista/Win7的下分区这边不废话了,现在来看看如何使用第三方工具来操作以及实际效果如何。
由于这是对分区进行操作,务必要先备份要进行操作的分区中的数据。
只是对第一个分区做操作,可以用WINPE启动计算机,先使用Ghost把第一个分区做个镜像存到后面的分区中去,改好了再Ghost回来即可。
因为Windows自带的分区工具无法实现根据LBA地址来分区的操作,这里要使用第三方分区工具,这里推荐DiskGenius。
大家可以去其官网下载:
http://www.diskman.cc/download.htm

我这里的操作和测试都是以自己手中的一个16GB的U盘为例的,另外也在自己的Sandisk SSD上试过了,确实有所改善。
1. 打开主界面,左侧选中要操作的磁盘,右边可以看到当前的第一个分区是从0-1-1开始的,也就是LBA63,右键点击把它删除掉。





2. 在删除后得到的空闲空间上右键点击来建立新分区。



3. 在建立新分区界面中点开详细参数,把起始磁头设为8,起始扇区设为9,
这时下面的起始扇区号会自动变为512,这个512其实就是指LBA512,确认后点击确定即可创建分区。
如果是四通道的NAND存储设备,可以进一步调整起始磁头和起始扇区,让起始扇区号显示为1024即可。




4. 回到主界面可以看到,此时第一个分区的起始柱面/磁头/扇区已经变成0-8-9了,点击应用更改保存设置。



5. 因此第一个分区的起始位置变了,建议大家重建MBR一下,以防出现不能启动的问题。
在DiskGenius中点一下刚才创建的分区,然后在硬盘菜单中点重建主引导纪录(MBR),并确认执行即可。
特别提醒的是,重建MBR后,如果之前MBR中有写入过的诸如WIN7 OEM破解信息等都会被去掉,需要重新使用相应的工具来重新写入。




最后上一下修改前后的ATTO测试成绩,都是在格式化后U盘里没有任何数据的情况下来进行的。
左:起始柱面/磁头/扇区为0-1-1(LBA63)时的测试成绩;右:起始柱面/磁头/扇区为0-8-9(LBA512)时的测试成绩:


2#
antixie  楼主| 发表于 2010-11-20 01:01 | 只看该作者
本帖最后由 antixie 于 2010-11-20 01:02 编辑

前面的道理论坛里的大大也苦口婆心说了n次了哈哈

另外DG自带了一个备份分区到镜像和回复分区的功能,不知道用着功能恢复后的SSD分区是否能对齐呢?
3#
linkabc 发表于 2010-11-20 08:41 | 只看该作者
图全是X!!!
4#
neeyuese 发表于 2010-11-20 09:13 | 只看该作者
这几天抽空正想写哪,既然你转了省的我写了。
5#
antixie  楼主| 发表于 2010-11-20 12:20 | 只看该作者
回复 4# neeyuese


    毕竟是人家的东西,而且还是有不少误导的
还是大大写个权威点的吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部