硬盤讀寫會消耗大量CPU?什么硬盤,什么樣的讀寫情景,什么CPU,大量有多大?CPU性能對讀寫性能影響很大有多大?題目加了NAS和RAID關鍵字,那么是硬RAID還是軟RAID?哪個級別的RAID?如果是軟RAID,是主板驅動的軟RAID還是操作系統/文件系統的軟RAID?
分幾個情況簡述一下吧:
普通機械硬盤讀寫:
早期的硬盤讀寫都是通過CPU指令執行,這種讀寫方式叫PIO,(Programmed input/output,可編程輸入輸出),大概流程是程序發起讀取指令,CPU找到硬盤映射的地址D1,然后發出指令,說需要從地址D1讀取若干字節寫入目標地址D2;硬盤控制器根據這個指令從硬盤讀取若干數據,并寫入內存地址D2后,告知CPU指令執行完畢;然后CPU從內存D1讀取若干字節數據——期間CPU一直在等待硬盤控制器的返回,并不能執行其它指令,除非有更高優先級的中斷。很顯然,這種讀寫模式非常占用CPU資源。在老式電腦上,PIO方式的硬盤讀寫往往會消耗30%甚至更多的CPU資源。
之后為了解決這個問題,硬盤讀寫使用了DMA模式。和PIO模式相比,只要硬盤控制器向CPU確認收到讀寫指令了,CPU就可以執行其它指令,直到硬盤控制器完成從硬盤讀取數據到內存D2后發起中斷,CPU再去處理D2里面的數據,這個過程對CPU資源的消耗很小——很顯然,和PIO相比,這就是I/O方面的硬件加速:大部分的讀寫操作由硬盤控制器實現。當然,文件系統是軟件層面的,假設我們要讀取十個1MB大小的文件,不考慮目錄結構的讀取和文件碎片的情況下,會比讀取一個10MB的文件消耗將近10倍的CPU資源——因為CPU需要發起10次讀取指令。通常情況下,DMA方式讀寫數據消耗的CPU資源在3%以下甚至更低。
新一代的NVMe SSD,因為通常使用4x PCI-E通道,新一代的NVMe SSD是要求PCI-E 3.0(1x帶寬8GT/s, 4x帶寬32GT/s,除掉檢驗位是4*985MB/s=3940MB/s);而舊平臺(Intel六代之前)只支持PCI-E 2.0(1x帶寬5GT/s,4x帶寬20GT/s,除掉校驗位是4*500MB/s=2000MB/s),對于部分高端NVMe SSD來說已經形成帶寬瓶頸了,自然會導致硬盤讀寫性能下降。另外,更高速的讀寫速度自然也會消耗更多的CPU性能——一秒鐘時間就能向CPU提供3GB+的數據等待CPU進行處理,顯然和機械硬盤一秒鐘才能讀取到200+MB數據消耗的CPU資源不同。
然后是軟RAID的情況:
這個要分不同的RAID級別來說。最簡單的是RAID 1,CPU需要把一份寫入指令復制成兩份同時寫入兩個硬盤,顯然對CPU資源的消耗起碼要多一倍的。
然后復雜一點的是RAID 0,CPU需要按照RAID設置的條帶寬度,把一份數據截成若干段,D1、D4、D7寫入磁盤1,D2、D5、D8寫入磁盤2,D3、D6、D9寫入磁盤3(假設這是一個三個硬盤組成的RAID 0)。根據不同的RAID驅動或者緩存設置,不算截短數據所需的計算量,可能需要3倍到9倍的CPU資源消耗。組成RAID 0的磁盤越多,消耗的CPU資源也越多。
再復雜一點的是RAID 5,CPU需要根據D1、D2、D3的內容做XOR算出一個P1, D4、D5、D6算出一個P2,D7、D8、D9算出一個P3,然后D1、D4、D7寫入磁盤1,D2、D5、P3寫入磁盤2,D3、P2,D8寫入磁盤3,P1、D6、D9寫入磁盤4。這個過程中,P1、P2、P3的計算會消耗大量的CPU資源,和RAID 0類似,組成RAID 5的硬盤越多,消耗的CPU資源也越多。
更復雜的是RAID 6,除了P1、P2、P3外,CPU還要用另外一種算法計算出來另外三個校驗數據Q1、Q2、Q3,并且和D1-D9、P1-P3打散寫入到不同的磁盤上,CPU資源進一步被消耗——這就是為什么軟RAID 5還算常見,但軟RAID 6很少見的原因。當然,現在四核甚至更多的核心的CPU也很常見,很多面向存儲的操作系統/文件系統都開始支持RAID 6或者類似的RAID級別:ZFS的RAIDZ2,Linux的mdadm,Windows的雙校驗存儲池。但很顯然,和單個硬盤存儲相比,讀寫同樣的數據,會消耗數十倍甚至上百倍的CPU資源。如果CPU性能太差,例如使用了老式的CPU,或者使用低功耗平臺(例如ATOM),并且往往在NAS中,CPU還要同時提供其他服務,這個時候讀寫性能是非常可能會受到CPU性能影響的。
最后,上面所提到的幾個RAID級別,都可以通過購買硬件RAID卡實現硬件加速——所有提到的這些需要增加CPU負擔的工作都由RAID卡上的主控芯片完成,對于CPU來說,整個RAID陣列和一個普通硬盤并沒有任何區別——除了需要加載RAID卡驅動而不是加載硬盤控制器驅動,自然也不會消耗額外的CPU性能。
作者:木頭龍
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。