固態(tài)硬盤(SSD)不是普通的硬盤。文件在固態(tài)硬盤中的處理方式與地普通硬盤中的方式完全不同,如果安裝Linux不同版本時沒有把這些差異考慮進去,就很難充分發(fā)揮固態(tài)硬盤的優(yōu)勢,而且很可能在使用一段時間后造成嚴重的性能下降。
修改默認的固態(tài)硬盤(SSD)柱面大小
提升Linux下固態(tài)硬盤的使用率,在安裝Linux操作系統(tǒng)前就應該做相關(guān)工作。系統(tǒng)會先在磁盤上創(chuàng)建分區(qū),通常創(chuàng)建的分區(qū)包含固定數(shù)量的柱面,而默認情況下,每個柱面由16065512個字節(jié)的扇區(qū)組成。
現(xiàn)在的問題是,當默認柱面空間大小被完全使用后,固態(tài)硬盤就不能發(fā)揮最佳性能。因為要固態(tài)硬盤讀這個操作需要使用4KB的字節(jié)塊,而固態(tài)硬盤控制器刪除操作則需要512KB的字節(jié)塊。問題是,有了通常用于Linux上的默認分區(qū),分區(qū)的開始沒必要也是一個4KB新分區(qū)的開始。結(jié)果,一次讀取或?qū)懭氩僮饕苍S需要SSD設備上的兩個不同的區(qū)塊,這也減緩了SSD磁盤的性能。
為了避免這種問題,可以采用fdisk方式來創(chuàng)建分區(qū),配置三個選項來指定使用柱面及拍面大小。具體的命令如下:
fdisk -H 32 -C 32 –c
這確保了分區(qū)均衡的方式兼容SSD寫入和刪除區(qū)塊。一些最新的Linux版本默認情況下已經(jīng)考慮了這個問題,以FedoraCore 14為例,它的第一個分區(qū)都會自動以第2048個扇區(qū)為開始,這就意味著寫入和刪除字節(jié)區(qū)塊始終在同一個柱面上。
配置固態(tài)硬盤(SSD)的Ext 4
接著需要關(guān)注的就是文件系統(tǒng)。想要優(yōu)化文件系統(tǒng)刪除字節(jié)區(qū)塊的效率,就必須確保小于512K的文件分布在不同的刪除字節(jié)區(qū)塊上。要做到這一點,必須確保在創(chuàng)建可擴展文件系統(tǒng)時指定了需要使用的條帶的寬度和幅度。這些值在頁面中指定,默認大小為4KB.要創(chuàng)建一個最佳的可擴展文件系統(tǒng),應該使用如下命令:
mkfs.ext4 -E stride=128,stripe-width=128 /dev/sda1
如果要修改現(xiàn)有的文件系統(tǒng)的參數(shù),可以使用tune2fs實用程序:
tune2fs -E stride=128,stripe-width=128 /dev/sda1
配置固態(tài)硬盤(SSD)的I/O調(diào)度程序
優(yōu)化的第三個部分涉及到I/O調(diào)度程序。該模塊是一個決定如何處理I/O請求的核心組件。默認情況下就是非常公平的排隊,對于普通的磁盤驅(qū)動器來說,這是很好的方案,但對于以期限調(diào)度為優(yōu)勢的固態(tài)硬盤來說,這并不是最好的。
如果你想在系統(tǒng)中對所有磁盤采用期限調(diào)度,可以在內(nèi)核加載時把elevator=deadline這句話加入到系統(tǒng)引導管理器(GURB)中;如果你只是想針對某一個磁盤,就應該在rc.local文件中加入類似如下實例的一句話,那么每次當系統(tǒng)重啟,期限調(diào)度就會應用到指定的磁盤。如下實例將會對/dev/sdb磁盤采用期限調(diào)度。
echo deadline >/sys/block/sda/queue/scheduler
清理固態(tài)硬盤(SSD)中的數(shù)據(jù)塊
最后一個重要的步驟稱為“清理”,該操作可以確保在刪除文件后相應的數(shù)據(jù)塊真正清空,然后在創(chuàng)建新的文件時才能有可用的數(shù)據(jù)塊。如果沒有清理操作,一旦數(shù)據(jù)塊空間填滿,固態(tài)硬盤的性能就會下降。如果使用丟棄掛載選項,當文件刪除后,數(shù)據(jù)塊也會被相應地清除,這樣可以顯著提高固態(tài)硬盤的性能。2.6.33 以上的內(nèi)核已經(jīng)支持清理操作。
啟用清理功能,需要在固態(tài)硬盤的/etc/fstab配置中為掛載文件系統(tǒng)添加丟棄選項。示例中的命令為掛載的根邏輯卷啟用了清理操作。
/dev/system/root/ext4 discard,errors=remount-ro,noatime 0 1
該命令同時也添加了Noatime選項,該選項保證了文件的訪問時間不會因為每次讀取而更新,從而降低對文件系統(tǒng)的寫入次數(shù)。
在fasab配文件中完成對文件系統(tǒng)的這些修改后,重啟計算機,或者通知文件系統(tǒng)重新讀取其配置,然后使用/etc/fstab文件中包含的mount -o命令重新安裝每個文件系統(tǒng)。