歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> 影響IO性能的request queue

影響IO性能的request queue

日期:2017/3/3 16:20:23   编辑:關於Linux

最近一段時間在做IO性能對比測試分析的時候發現Linux-3.2的IO性能要比Linux-2.6.23差。在內核中,並發順序讀的情況下(繞過設備的buffer cache),Linux-3.2的性能比Linux-2.6.23有很大差別,性能降低了15%左右。這是為什麼呢?

首先看一下 Linux-3.2中測試的IO Stack模型,如下圖所示:

這個IO Stack由DM設備和SD設備堆疊而成,DM設備完成multipath的功能,SD設備是一個SCSI塊設備。從這個模型中可以看出Linux-3.2的DM-Multipath設備層擁有一個磁盤SD設備相同的request Queue,BIO達到該層之後需要進行IO的調度處理。這個request Queue是Linux-3.2與Linux-2.6.23不同的地方。Linux-2.6.23中的device mapper機制僅僅起到轉發BIO的作用,具體功能由device mapper的target完成。不同之處在於Linux-3.2中的device mapper機制提供了兩種類型的轉發機制:一種是REQUEST_BASED的轉發機制;另一種是BIO_BASED的轉發機制。這兩種轉發機制的差別在於REQUEST_BASED類型會采用request queue進行IO調度,然後統一處理request中的BIO。BIO_BASED類型和傳統的device mapper中的轉發機制是一樣的。

在一般的存儲設備上,如果在DM層再做一層request queue進行IO調度,必然會導致讀請求處理比Linux-2.6.23中的延遲長,因此,會導致讀IO性能的劇降。我的測試結果是在並發多流順序讀的情況下,Linux-3.2內核的讀性能降低了15%左右。寫性能的影響並不十分明顯,但是,如果調度算法選擇不好,寫性能還是有一定影響。

由於我采用的是系統默認的DM-multipath驅動,在Linux-3.2中該multipath只支持REQUEST_BASED類型,因此,如果想要把這一層的request Queue移除,那麼只能修改Linux-3.2中的代碼將DM-multipath改成BIO_BASED類型。個人認為Linux中的Multipath驅動應該保留BIO_BASED的模式,這樣對基於磁盤的multipath應用會有一定的性能提升。

Copyright © Linux教程網 All Rights Reserved