Performance

為什麼儲存的性能會在不同的隊列深度下發生變化?

  • February 19, 2020

我在市場上為我們的伺服器進行儲存升級。我正在查看各種 PCIe SSD 設備的基準測試,在比較中我發現 IOPS 在不同的隊列深度處發生變化。這怎麼可能,為什麼會這樣?我理解事物的方式是:我有一個最大(理論上)100k IOPS 的設備。如果我的工作負載持續產生 100,001 IOPS,我的隊列深度將為 1,對嗎?然而,從我在基準測試中看到的情況來看,一些設備在較低的隊列深度下執行較慢,然後在 4-64 的深度加速,然後在更大的深度再次減速。隊列深度不是作業系統(或者可能是儲存控制器)的屬性,那為什麼會影響 IOPS?

簡短的回答是,如果有多個未完成的 IO 請求,硬碟驅動器會優化數據檢索,這通常會以延遲為代價來增加吞吐量。

NCQ 執行此操作,重新排序 IO 請求以優化吞吐量。

SSD:s 與機械驅動器的工作方式不同,因為它們具有並行快閃記憶體晶片來儲存數據。即,如果您一次發出一個 IO 請求,則延遲(搜尋 + 讀取時間)決定 IOPS。但是,如果您一次發出 4 個請求,ssd 磁碟可能能夠以並行或其他優化方式檢索它們,您可能會獲得 4 倍的吞吐量。

隊列深度越高,在一定程度上優化磁碟的可能性就越大。由於 IOPS 是吞吐量的函式,這會在更高的隊列深度處增加 IOPS。

編輯:

真正的隊列駐留在發出所有請求的作業系統中。也就是說,我推測控制器驅動程序會將一定數量的隊列傳遞給控制器和磁碟,以便它們可以在優化的隊列深度下工作。磁碟必須有自己的隊列才能進行優化。

引用自:https://serverfault.com/questions/459508