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

2021-09-08 03:15:19 字數 1021 閱讀 9377

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

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是乙個開源...