2011-11-18 51 views
1

鑑於我想創建自己的數據庫存儲,文件應該以多大的大小以避免碎片和文件系統開銷,尤其是在「新」SSD的情況下?什麼是避免SSD碎片的甜蜜點?

例如,很多64kbyte的文件都可以嗎?或者會以驚人的速度使用文件(inode)條目?

使用大文件並只在6​​4k字節的邊界內訪問它會更好嗎?

(我用的是64K字節作爲一個例子,也許4K字節是一個神奇的大小?還告訴我,如果我東拉西扯,或者如果我做了我點的對面。)

+0

實際上,對於ssd驅動器來說碎片並不重要,在任何磁盤上都沒有讀取頭,實際上建議關閉ssd驅動器的碎片整理。 –

+0

@AndersK,aha,thansk。 –

+1

這是一個如何設計軟件的存儲訪問模式的問題。請不要關閉它。 – dmeister

回答

3

好問題。

現代SSD中的閃存通常(!)結構如下:頁面大小爲2K或4K,可寫入的頁面大小和256K擦除塊大小。如果不刪除頁面,則無法覆蓋頁面。但擦除操作僅適用於完整擦除塊。但是,每次擦除操作需要很長時間(與其他IO操作相比),並慢慢磨損SSD。

稱爲FTL(閃存轉換層)的SSD控制器的一個組件用於提供類似HDD的塊設備對閃存語義的錯覺。固態硬盤可以像HDD一樣使用,但爲了充分利用它(並且需要很長時間),結合存儲知識的軟件IO設計效果最佳。

但是,SSD控制器邏輯通常是未知的。所以它可能會有所不同,從SSD到SSD,但這裏有幾條經驗法則:

如果可能,我會將我的IO模式和文件大小對齊到完全擦除塊(或其倍數)。因此,編寫一個256K的文件會使用完整的擦除塊,而不會有任何內部碎片。較小的文件,如64K只會使用它的一部分。將數據寫入塊的其餘部分可能會導致讀取 - 修改 - 寫入週期。這意味着完整的塊被讀取,修改並寫入另一個位置。非常貴。

當SSD爲空時(因爲控制器有足夠的未使用的塊),這不是問題,但如果SSD已滿並且使用率很高,則可能會出現問題。或者如果IO模式通常非常小寫入,並且SSD變成碎片。所以FTL很難找到連續的免費flash頁面。

作爲備註:系統管理員應該將文件系統與SSD擦除塊邊界對齊,這非常重要。

2

由於系統的這變得更加糟糕任何現代磁盤的視圖都不匹配物理設備上的實際位置。現代磁盤,包括SSD和旋轉磁盤,都將扇區放在他們想要的地方。

由於SSD具有磨損調平扇區27,可能沒有接近扇區28的任何地方,並且即使它們開始「接近」在一起寫入後可能不會接近。另外,當然,由於沒有尋找時間,因此使用SSD「關閉」的概念是一種奇怪的概念。

如果設計簡單且只有較少的大文件,那麼我會避開任何具有加載和加載文件的設計。另一方面,如果你發現你自己編寫了一個文件系統的文件系統來映射到單個大文件中的塊,那麼除非你的問題具有非常特定的功能,否則利用所有的時間和想法可能會更好已經進入現有的文件系統設計。