儲存裝置,是電腦三大主要硬件中(CPU/RAM/STORAGE)最慢一環, 傳統物理硬碟(Harddisk)速度, 取決於磁頭數量及磁碟轉速而增加速度, 讀寫速度經過多年改進已達頂點,相對CPU及各管道介面速道增加,儲存裝置的差距被數以百倍地拉開,與CPU之間交換資料是串連式單一序列(SATA and SAS /single queue ),在操作系統(OS) 上因等待儲存裝置讀寫資料,會使用上不同排序配對( io scheduler)。
這些排序配對就如操作系統找一個代理人,付責等待儲存裝置的讀寫回應,因應不同型別的儲存裝置,操作系統安排不同代理人, 不同策略的排序配對就如代理人有不同特性, 有些代理人密集地搬動小量資料, 另一些代理人就搬動大量資料但次數小,因應情況而用不同策略。
到了固態硬碟(SSD)時代,沒有硬碟的物理限制, 讀寫速度爆發式增長,硬體為應對速度上升而使用NVMe介面,NVMe提供多序列(64K queues)傳送資料, 在軟件方面的操作系統, 過往的不同排序配對( io scheduler)是應對串連式單一序列的(single queue ),到了現在的NVMe多序列已不大適用, 所以早期初出NVMe SSD時, 操作系統不使用排序配對,效能上反而較好。
軟件開發家為操作系統,開發了很多的不同的多序列排序配對(multi queue io scheduler), 雖然效能上有顯著提升,但在現今的網絡為主的實際軟件使用上,相對各種硬件及介面速度提升(PCIe, SSD, NVMe, 10G NIC) 的得益,實際使用效能上的得益還有很大差距, 尤其網絡伺服器中的使用更甚。
效益低其中一個主因,發生在操作系統的核心上(kernel), 核心很多時候需要直接的資料搬動抄寫,例如接收網絡資料,傳入儲存裝置或各種軟件使用,又或轉發其他網絡使用者, 這些都要經核心直接抄寫動作,造成多重搬動抄寫,減低了很多效益,未來幾篇再說軟硬應對的改進方法。
Linux 4.12 I/O Scheduler Tests With A HDD & SSD
NVMe PCIe 4.0 Hardware