提公升磁碟IO效能的幾個技巧

2021-05-28 09:12:46 字數 1016 閱讀 1796

目前磁碟都是機械方式運作的,主要體現在磁碟讀寫前尋找磁軌的過程。磁碟自帶的讀寫快取大小,對於磁碟讀寫速度至關重要。讀寫速度快的磁碟,通常都帶有較大的讀寫快取。磁碟的尋道過程是機械方式,決定了其隨機讀寫速度將明顯低於順序讀寫。在我們做系統設計和實現時,需要考慮到磁碟的這一特性。

fastdfs是乙個開源的高效分布式檔案系統,它最初的實現,檔案是按hash方式隨機分布到多個目錄中的,後來增加了順序存放的做法。通過對比測試,發現檔案按目錄順序儲存,寫檔案io效率明顯高於按目錄隨機儲存。

目前磁碟順序讀取的速度並不差,比如普通硬碟的io可以達到每秒40~60mb,好一些的硬碟可以達到每秒100mb左右。在多程序或多執行緒併發讀取磁碟的情況下,隨著併發數的增加,磁碟io效率將大大下降。主要是因為每次讀寫,磁軌可能存在較大的偏移,磁軌定址時間加大,導致磁碟io效能急劇下降。對於這種場景,優化方案是盡可能減少併發讀寫的程序數或執行緒數。可以用鎖的機制,也可以採用專門的磁碟io執行緒來對磁碟進行讀寫。fastdfs 2.x版本,磁碟讀寫就採用了專門的執行緒來完成。

為了充分發揮多塊磁碟的效率,不建議使用傳統的raid方式。比較好的做法是每塊磁碟單獨mount,通過程式來控制對多塊磁碟進行併發讀寫。採用單盤mount,檔案的備份和冗餘可以通過多台機器實現。

檔案數多了之後,比如達到上千萬個檔案,當隨機訪問眾多檔案時,檔案系統的效能會急劇下降。業界流行的做法是將多個小檔案合併儲存到乙個大檔案中的方式來降低檔案數。fastdfs 3.0支援將多個小檔案合併儲存到乙個較大檔案中,目前開發進展比較順利,預計5月份可以發布3.0版本。

提公升磁碟io的另外乙個技巧,一次盡可能多寫入或多讀取。也就是說,將程式的讀寫buffer設定得盡可能大一些。例如日誌或者redo log的寫入,不是每次呼叫都直接寫磁碟,而是先快取到記憶體中,等buffer滿了再寫入磁碟,也可以定時寫入磁碟。

作業系統和c庫函式通常會對寫入的檔案內容做快取,以減少實際寫檔案的次數。直接呼叫系統函式fsync或c函式fflush將使系統的快取機制失效,此時將強制把內容刷到磁碟上。除非必需,否則不要執行強制刷盤操作。

注:如果沒有特別說明,文中說的磁碟指的是硬碟。

提公升磁碟IO效能的幾個技巧

目前磁碟都是機械方式運作的,主要體現在磁碟讀寫前尋找磁軌的過程。磁碟自帶的讀寫快取大小,對於磁碟讀寫速度至關重要。讀寫速度快的磁碟,通常都帶有較大的讀寫快取。磁碟的尋道過程是機械方式,決定了其隨機讀寫速度將明顯低於順序讀寫。在我們做系統設計和實現時,需要考慮到磁碟的這一特性。fastdfs是乙個開源...

提公升磁碟IO效能的幾個技巧

目前磁碟都是機械方式運作的,主要體現在磁碟讀寫前尋找磁軌的過程。磁碟自帶的讀寫快取大小,對於磁碟讀寫速度至關重要。讀寫速度快的磁碟,通常都帶有較大的讀寫快取。磁碟的尋道過程是機械方式,決定了其隨機讀寫速度將明顯低於順序讀寫。在我們做系統設計和實現時,需要考慮到磁碟的這一特性。fastdfs是乙個開源...

提公升磁碟IO效能的幾個技巧

目前磁碟都是機械方式運作的,主要體現在磁碟讀寫前尋找磁軌的過程。磁碟自帶的讀寫快取大小,對於磁碟讀寫速度至關重要。讀寫速度快的磁碟,通常都帶有較大的讀寫快取。磁碟的尋道過程是機械方式,決定了其隨機讀寫速度將明顯低於順序讀寫。在我們做系統設計和實現時,需要考慮到磁碟的這一特性。fastdfs是乙個開源...