一個影響IO performance的問題

最近寫了一個driver,將一個文件虛擬成SCSI DISK。該驅動程序本質上就是一個HBA driver。在驅動性能測試的時候,發現IO performance很低,在大量數據寫的時候只達到了4MB/s的吞吐量,在少許數據寫的時候,性能很高。該驅動的IO模型以下圖所示:ide

 

在驅動中對queuecommand的流程進行了打印分析,發現SCSI Middle Layer發送請求的速度很慢。這就代表SCSI command的queue已經滿了,因此SML沒法dispatch command。經過分析,問題聚焦在:爲何virtual HBA驅動寫文件的速度這麼慢呢?難道在內核中訪問文件的性能有問題?工具

仔細分析IO path,結合測試發現,該驅動的性能問題在於內存資源。採用dd工具進行測試時,訪問scsi_device的數據會被push到buffer cache,buffer cache中的數據刷新到磁盤時經過virtual HBA驅動抵達page cache中。這種IO關係就會致使scsi device和file對內存資源進行競爭,若是應用存在大量的寫數據,那麼file將會很可貴到page cache,因此IO performance就會很低。
爲了驗證這個想法,對Linux自帶的loop device進行了測試,發如今大量數據寫時,loop device一樣存在performance劇降的問題。
相關文章
相關標籤/搜索