轉(zhuǎn)載:如何提升磁盤IO性能

目前,磁盤是機(jī)械操作的,主要是在讀取和寫入磁盤之前查找磁道的過程中。磁盤附帶的讀寫緩存大小對磁盤讀寫速度至關(guān)重要。具有快速讀寫的磁盤通常具有較大的讀寫緩存。磁盤的查找過程是機(jī)械的,它確定其隨機(jī)讀寫速度將明顯低于順序讀寫。當(dāng)我們進(jìn)行系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)時(shí),我們需要考慮磁盤的這個(gè)特性。

FastDFS是一個(gè)開源且高效的分布式文件系統(tǒng)。它的初始實(shí)現(xiàn),文件以散列模式隨機(jī)分布到多個(gè)目錄,后來又添加了順序存儲(chǔ)實(shí)踐。通過比較測試,發(fā)現(xiàn)文件按目錄順序存儲(chǔ),寫文件的效率明顯高于目錄隨機(jī)存儲(chǔ)的效率。

目前,磁盤順序讀取的速度還不錯(cuò)。例如,普通硬盤的IO可以達(dá)到每秒40~60MB,更好的硬盤可以達(dá)到每秒100MB左右。在多進(jìn)程或多線程并發(fā)讀取磁盤的情況下,隨著并發(fā)數(shù)量的增加,磁盤IO效率將大大降低。主要是因?yàn)槊看巫x取和寫入,軌道可能具有大的偏移,并且軌道尋址時(shí)間增加,導(dǎo)致磁盤IO的性能急劇下降。對于此方案,優(yōu)化方案是最小化并發(fā)讀取和寫入的進(jìn)程或線程的數(shù)量。您可以使用鎖定機(jī)制或?qū)S么疟PIO線程來讀取和寫入磁盤。在FastDFS 2.x版本中,磁盤讀取和寫入是使用專用線程完成的。

為了充分利用多個(gè)磁盤的效率,建議不要使用傳統(tǒng)的RAID方法。一個(gè)好的做法是分別安裝每個(gè)磁盤,并通過程序控制多個(gè)磁盤的并發(fā)讀寫。使用單個(gè)磁盤安裝,可以使用多臺(tái)計(jì)算機(jī)實(shí)現(xiàn)文件備份和冗余。

在大量文件(例如數(shù)千萬個(gè)文件)之后,當(dāng)隨機(jī)訪問許多文件時(shí),文件系統(tǒng)的性能將急劇下降。業(yè)界流行的做法是通過將多個(gè)小文件組合成一個(gè)大文件來減少文件數(shù)量。 FastDFS 3.0支持將多個(gè)小文件合并和存儲(chǔ)到一個(gè)大文件中。發(fā)展進(jìn)度相對平穩(wěn)。預(yù)計(jì)3.0版將于5月發(fā)布。

改進(jìn)磁盤IO的另一個(gè)技巧是盡可能多地寫入或盡可能多的讀取。換句話說,將程序的讀寫緩沖區(qū)設(shè)置得盡可能大。例如,日志或重做日志寫入,不是每次都直接寫入磁盤,而是先緩存到內(nèi)存中,然后在緩沖區(qū)滿時(shí)寫入磁盤,也可以定期寫入磁盤。

操作系統(tǒng)和C庫函數(shù)通常會(huì)緩存寫入文件的內(nèi)容,以減少實(shí)際寫入文件的次數(shù)。直接調(diào)用系統(tǒng)函數(shù)fsync或C函數(shù)fflush將使系統(tǒng)的緩存機(jī)制無效,這將強(qiáng)制將內(nèi)容刷新到磁盤。除非必要,否則不要執(zhí)行強(qiáng)制刷牙操作。如果在操作過程中不慎將重要的數(shù)據(jù)弄丟了,可以用閃靈數(shù)據(jù)恢復(fù)找回?cái)?shù)據(jù);如果有重要的資料不希望別人進(jìn)行查看等操作,可使用閃靈文件夾鎖進(jìn)行加鎖。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容