2013-03-08 67 views
2

我正在使用blktrace來了解具有高IO負載的 多線程IO工作負載中的Block Layer行爲。我可以在塊圖層中觀察到一些 重複的LBA請求。例如,我在原始工作負載中只有一個 寫入請求到LBA 47568。但是,blktrace 顯示121個請求寫入LBA 47568 !!!以下是 blkparse日誌的一部分,它只過濾I事件(插入請求 隊列中的IO)。我試圖理解爲什麼會發生這種現象,以及如何消除這種現象。我在 /sys/block/sdX/nomerge中選擇了noop IO調度程序和值2以避免IO合併。我非常感謝你的幫助 提前。Block Layer中的重複LBA請求

8 240 0  7539  0.07330I WS 47576 + 8 [a] 
    8 240 5  4462  0.073303974 32281 I WS 47568 + 8 [a] 
    8 240 11  4462  0.073306337 32283 I WS 47584 + 8 [a] 
    8 240 6  4462  0.073307970 32284 I WS 47592 + 8 [a] 
    8 240 10  4462  0.073309010 32285 I WS 47600 + 8 [a] 
    8 240 5  4466  0.073311526 32281 I WS 47568 + 8 [a] 
    8 240 5  4469  0.073316215 175 I WS 47568 + 8 [kworker/5:1] 
    8 240 7  4462  0.073352932 32286 I WS 47608 + 8 [a] 
    8 240 7  4466  0.073354061 32286 I WS 47568 + 8 [a] 
    8 240 8  4468  0.073358935 32280 I WS 47624 + 8 [a] 
    8 240 4  4468  0.073360550 32279 I WS 47616 + 8 [a] 
    8 240 8  4472  0.073362145 32280 I WS 47568 + 8 [a] 
    8 240 5  4473  0.073362711 32281 I WS 47632 + 8 [a] 
    8 240 5  4477  0.073364177 32281 I WS 47568 + 8 [a] 
    8 240 0  7545  0.073407427 32282 I WS 47640 + 8 [a] 
    8 240 0  7549  0.073409589 32282 I WS 47568 + 8 [a] 

回答

2

好吧,我要回答我的問題。事實證明,工作負載中的突出IO數量大於通用設備驅動程序隊列大小(/sys/block/sdX/device/queue_depth)。因此,一些請求在隊列滿了時就無法插入隊列中並導致這種現象。