文/王愛梅 胡澤志 鄭洪濤
隨著U.2 NVMeSSD固態(tài)硬盤的普及,如何能夠?qū)崿F(xiàn)方便地插拔硬盤而不會導(dǎo)致拔除硬盤的信號干擾CPU的正常工作而導(dǎo)致服務(wù)器藍(lán)屏或死機(jī),成為行業(yè)發(fā)展的需求。特別是針對數(shù)據(jù)中心業(yè)務(wù),在服務(wù)器運(yùn)行過程中,需要頻繁的拔除或者安裝硬盤,而為了保證業(yè)務(wù)的持續(xù)運(yùn)行,服務(wù)器不能關(guān)機(jī)。如果不能很好的解決熱插拔問題將嚴(yán)重影響數(shù)據(jù)中心的持續(xù)穩(wěn)定運(yùn)行。本文將探討一種避免藍(lán)屏死機(jī)的方案。我們先來認(rèn)識下何為U.2 NVMe SSD固態(tài)硬盤,U.2 NVMe SSD固態(tài)硬盤指的是采用U.2接口支持NVMe協(xié)議的固態(tài)硬盤,而U.2是一種硬盤的接口形式,如圖1和圖2所示。U.2的接口相比其它的M.2/SATA/SAS接口插拔比較方便。
圖1
圖2
隨著U.2 NVMe SSD的普及,為了插拔硬盤操作的方便性,NVMe SSD可以插在機(jī)箱的前面板安裝有背板的槽位中,因此U.2需要像以前SATA/SAS硬盤一樣方便地插拔,也就是要求支持熱插拔功能。另外由于硬盤位于服務(wù)器機(jī)箱前面板上,數(shù)據(jù)線比較長,隨著數(shù)據(jù)線的增長,信號傳遞過程中會衰減,這時候需要解決信號增強(qiáng)問題,retimer和switch都具有增強(qiáng)信號的功能。而由于硬盤位于前面板上,為了能夠方便地拔除,需要有支持熱插拔的功能。目前有支持熱插拔同時能增強(qiáng)信號的方案是采用NVMeswitch卡,但是NVMeswitch卡的價格非常昂貴,限制了該方案的普及。而目前采用便宜的retimer卡對信號進(jìn)行增強(qiáng)的方案又存在熱插拔的局限性,因為retimer卡的方案不支持surprise hotplug,只能支持software managed hot plug,surprise hotplug是通過硬件管理的方式實現(xiàn)的熱插拔;而software managed hot plug是通過軟件管理方式,需要通過人為干預(yù),首先需要通過操作應(yīng)用軟件完成reject,才能進(jìn)行熱插拔操作。如果熱插拔都需要先進(jìn)行軟件操作的reject步驟,之后才能拔除硬盤的操作過程,又限制了操作的便捷性。而本文是致力于尋找一種采用便宜的retime卡來增強(qiáng)和調(diào)節(jié)信號,但又能支持surprise hotplug的方案。
下面我們來介紹下該方案的實現(xiàn)原理和過程。
眾所周知PCIe作為高速信號,隨著鏈路長度的增加,信號中的高頻分量會急劇損耗,這會導(dǎo)致信號幅度和上升沿的退化、信號帶寬的降低,引起碼間干擾從而導(dǎo)致眼圖的閉合及抖動增加,最終在接收端產(chǎn)生誤碼,而安裝鏈接retimer卡可以解決信號傳輸質(zhì)量下降的問題,retimer卡是內(nèi)部具有CDR(數(shù)據(jù)時鐘恢復(fù))的IC,實現(xiàn)數(shù)據(jù)的恢復(fù)之后再按照串行通道把信號發(fā)送出去,這樣可以減輕信號的抖動。retimer 卡可有效提高數(shù)據(jù)吞吐量和擴(kuò)展性,適用于數(shù)據(jù)密集型應(yīng)用。其信號在經(jīng)過retimer的時候,通過內(nèi)部的時鐘重構(gòu)信號,使其信號傳輸能量增加,然后再繼續(xù)傳輸。而且,retimer卡價格便宜,利于普及。
NVMe SSD作為一種新的高性能SSD極大地提升了存儲介質(zhì)的讀寫速度,同時縮短了CPU與存儲介質(zhì)之間的訪問時間。對于U.2的NVMeSSD在提供熱插拔的時候帶來了使用上的方便,但是目前支持NVMeSSD的熱插拔方案有兩大類,一類是基于IntelPurleyCPU的VMD模塊的;一類是基于CPUBios的?;贗ntelVMD的方式雖然使用上相對比較簡單,但是熱插拔靈活性上卻需要受IntelVMDdrive和操作系統(tǒng)驅(qū)動的限制,有很多自定義的功能和方式就很難實現(xiàn)。
圖3
基于CPUBios的方式相對比較靈活,主要是通過SMbus管理來實現(xiàn)NVMeSSD的熱插拔,這種方式在實現(xiàn)模式上主要是通過NVMe背板和主板CPU之間搭建直連的SMbus通道來實現(xiàn)。但是通過通用的PCIeslot實現(xiàn)比較麻煩,因為PCIeslot上的SMbus總線不是直接連到CPU上的,這樣時效性上會有限制。另外,基于CPU Bios的熱插拔方案還存在的問題是NVMeSSD的突然熱插拔需要CPU在很短的時間內(nèi)知道是否需要釋放PCIe資源,如果在一定時間內(nèi)沒有釋放,而且這時候又發(fā)生了NVMeSSD的突然拔出,很可能導(dǎo)致PCIe的中斷干擾CPU的正常工作而出現(xiàn)服務(wù)器藍(lán)屏或死機(jī)現(xiàn)象。
針對上述熱插拔方案的問題,我們下面來探討一種新的方案。還是基于CPUBios實現(xiàn)熱插拔的方式,我們嘗試對主板電路進(jìn)行修改,通過在主板上設(shè)計PCIeSlot和CPU之間的直接SMbus總線,從而方便實現(xiàn)NVMeSSD的熱插拔的管理。實現(xiàn)方式是在主板上增加一個I2C mux一分二的開關(guān),其中一路還是通向BMC,作為默認(rèn)路徑,插入普通卡的時候就是用這個通道。當(dāng)PCIe插槽上插入retimer卡時熱插拔的信號則經(jīng)過FPGA通往CPU,而一分二開關(guān)在不同模式下的切換通過FPGA的IO來控制。如圖3所示。
圖3展示的熱移除過程是:當(dāng)U2NVMe SSD從機(jī)箱背板上拔除時,拔除信號通過I2C信號線傳遞給Retimer卡,通過一分二的控制開關(guān)傳遞到FPGA,F(xiàn)PGA將拔除信號告知CPU這個信號只是發(fā)生了熱移除,無需CPU進(jìn)行處理,從而避免熱拔除硬盤的信號不能被CPU及時處理,而大量信號的堆積容易導(dǎo)致CPU處理不過來,而出現(xiàn)藍(lán)屏或死機(jī)的情況。
而文章開頭時提到的采用NVMe Switch卡來實現(xiàn)熱插拔的方案,相比retimer卡只有對信號提供增強(qiáng)不能對信號進(jìn)行處理功能的限制,switch卡本身具有處理信號的能力,因此硬盤被熱移除的信號,可以被switch卡處理掉,不會將干擾信號傳遞給CPU。但是缺點(diǎn)是switch卡的成本很高,是采用普通retimer卡的方案的10倍以上,因此難于被普及。
本文提供了一種價格便宜,簡單易行,便與普及的實現(xiàn)服務(wù)器U.2 NVMe SSD固態(tài)硬盤熱插拔的方案,希望對U.2 NVMe SSD熱插拔方案在服務(wù)器上的應(yīng)用推廣起到一定的幫助。