一、修改默认的固态硬盘(SSD)柱面大小
提升Linux下固态硬盘的使用率,在安装Linux操作系统前就应该做相关工作。系统会先在磁盘上创建分区,通常创建的分区包含固定数量的柱面,而默认情况下,每个柱面由16065512个字节的扇区组成。
现在的问题是,当默认柱面空间大小被完全使用后,固态硬盘就不能发挥最佳性能。因为要固态硬盘读这个操作需要使用4KB的字节块,而固态硬盘控制器删除操作则需要512KB的字节块。问题是,有了通常用于Linux上的默认分区,分区的开始没必要也是一个4KB新分区的开始。结果,一次读取或写入操作也许需要SSD设备上的两个不同的区块,这也减缓了SSD磁盘的性能。
为了避免这种问题,可以采用fdisk方式来创建分区,配置三个选项来指定使用柱面及拍面大小。具体的命令如下:
fdisk -H 32 -C 32 –c /dev/sdb
二、配置固态硬盘(SSD)的Ext 4
接着需要关注的就是文件系统。想要优化文件系统删除字节区块的效率,就必须确保小于512K的文件分布在不同的删除字节区块上。要做到这一点,必须确保在创建可扩展文件系统时指定了需要使用的条带的宽度和幅度。这些值在页面中指定,默认大小为4KB。要创建一个最佳的可扩展文件系统,应该使用如下命令:
mkfs.ext4 -E stride=128,stripe-width=128 /dev/sda1
如果要修改现有的文件系统的参数,可以使用tune2fs实用程序:
tune2fs -E stride=128,stripe-width=128
/dev/sda1
三、配置固态硬盘(SSD)的I/O调度程序
优化的第三个部分涉及到I/O调度程序。该模块是一个决定如何处理I/O请求的核心组件。默认情况下就是非常公平的排队,对于普通的磁盘驱动器来说,这是很好的方案,但对于以期限调度为优势的固态硬盘来说,这并不是最好的。
如果你想在系统中对所有磁盘采用期限调度,可以在内核加载时把elevator=deadline这句话加入到系统引导管理器(GURB)中;如果你只是想针对某一个磁盘,就应该在rc.local文件中加入类似如下实例的一句话,那么每次当系统重启,期限调度就会应用到指定的磁盘。如下实例将会对/dev/sdb磁盘采用期限调度。
echo deadline > /sys/block/xvda/queue/scheduler
给IO的算法修改成
noop,操作系统本身不做处理,让 ssd 本身处理.
echo noop >
/sys/block/sda/queue/scheduler
四、清理固态硬盘(SSD)中的数据块
最后一个重要的步骤称为“清理”,该操作可以确保在删除文件后相应的数据块真正清空,然后在创建新的文件时才能有可用的数据块。如果没有清理操作,一旦数据块空间填满,固态硬盘的性能就会下降。如果使用丢弃挂载选项,当文件删除后,数据块也会被相应地清除,这样可以显著提高固态硬盘的性能。2.6.33以上的内核已经支持清理操作。
要启用清理功能,需要在固态硬盘的/etc/fstab配置中为挂载文件系统添加丢弃选项。示例中的命令为挂载的根逻辑卷启用了清理操作。
/dev/system/root/ext4 discard,errors=remount-ro,noatime 0 1
使用起来相当容易,就是在
mount 的时候,加一个参数 discard 来启用这个功能
修改 atime 的功能,让 ssd 少操作,没有必要要这个信息.
该命令同时也添加了Noatime选项,该选项保证了文件的访问时间不会因为每次读取而更新,从而降低对文件系统的写入次数。
在fasab配置文件中完成对文件系统的这些修改后,重启计算机,或者通知文件系统重新读取其配置,然后使用/etc/fstab文件中包含的mount
-o
remount命令重新安装每个文件系统。
%E4%BC%98%E5%8C%96/
IDF2012针对数据中心应用优化固态硬盘的性能
阅读(1046) | 评论(0) | 转发(0) |