一種pcie ssd優(yōu)化的方法
【專利說明】 —種PC IE SSD優(yōu)化的方法
[0001]
技術(shù)領(lǐng)域
[0002]本發(fā)明涉及Linux系統(tǒng)下固態(tài)硬盤技術(shù)領(lǐng)域,具體地說是一種PCIE SSD優(yōu)化的方法。
【背景技術(shù)】
[0003]閃存(Flash memory)誕生于20世紀(jì)80年代末,它是一種存取高速、抗震性強、體積小、容量大、功耗低、掉電數(shù)據(jù)不丟失的存儲介質(zhì)。閃存在近十年來不斷發(fā)展,已經(jīng)被廣泛應(yīng)用于手機、數(shù)碼相機、游戲機等各種便捷式設(shè)備和嵌入式系統(tǒng)中。與傳統(tǒng)硬盤相比,閃存在抗震性和數(shù)據(jù)的存儲速度上具有明顯優(yōu)勢,因而已經(jīng)成為替代磁盤的首選存儲介質(zhì)。閃存對突發(fā)I/O的響應(yīng)時間也只有傳統(tǒng)硬盤的百分之一,直接將現(xiàn)有數(shù)據(jù)庫系統(tǒng)部署在閃存上,聯(lián)機事務(wù)的處理能力有大約5?10倍的提升,響應(yīng)時間也有大幅改善。此外,閃存比傳統(tǒng)硬盤可靠性更高,MTBF (平均故障間隔時間)優(yōu)于傳統(tǒng)硬盤。閃存的這些優(yōu)勢使它非常適合用于存儲數(shù)據(jù)庫,提高數(shù)據(jù)庫的存取效率和降低能耗。
[0004]以NAND閃存為代表的半導(dǎo)體存儲容量密度增大,而且越來越便宜。當(dāng)那個拐點的時間到來,人們發(fā)現(xiàn)用小小的SSD能頂上幾十甚至上百塊硬盤的性能。在企業(yè)級SSD發(fā)展初期,更多的應(yīng)用形式是安裝在EMC等存儲系統(tǒng)廠商的陣列中,替代磁盤的SAS SSD ;或者服務(wù)器里面使用的SATA SSD0它們能夠與傳統(tǒng)硬盤控制器良好兼容,但當(dāng)時主流的SATA和SAS接口帶寬只有3Gb/s或者6Gb/s (300_600MB/s),如今12Gb/s SAS還沒有普及,而x8PCIe 2.0的理論帶寬已經(jīng)達(dá)到4GB/s,PCIe 3.0更是翻了一倍。因此PCIE SSD采用標(biāo)準(zhǔn)PCIE接口直連CPU,其速度是傳統(tǒng)采用SATA/SAS接口十倍以上。
[0005]PCIE SSD (固態(tài)硬盤)采用NVMe控制接口,該接口是一種為企業(yè)級、客戶端系統(tǒng)所用的而專門設(shè)計的高性能、可擴展主機控制接口。它具有以下優(yōu)點:
1.低延遲,因為AHCI標(biāo)準(zhǔn)本身就是為高延遲的機械硬盤而設(shè),雖然SSD發(fā)展至今,主流產(chǎn)品依然沿用了機械硬盤時代的那一套,但已經(jīng)開始不能滿足性能的高速發(fā)展,特別是在延遲方面。而面向PCIe SSD產(chǎn)品的NVMe標(biāo)準(zhǔn),降低存儲時出現(xiàn)的高延遲,就是其要解決的問題之一。造成硬盤存儲時延遲的三大因素,存儲介質(zhì)本身、控制器,以及軟件接口標(biāo)準(zhǔn)。比起AHCI,NVMe可以大幅度降低控制器和軟件接口部分的延遲,NVMe面向的是PCIe SSD,原生PCIe主控與CPU直接相連,而不是傳統(tǒng)方式,通過南橋控制器中轉(zhuǎn),再連接CPU,并且NVMe精簡了調(diào)用方式,執(zhí)行命令時不需要讀取寄存器;而AHCI每條命令則需要讀取4次寄存器,一共會消耗8000次CPU循環(huán),從而造成2.5 μ s的延遲。
[0006]2.1OPS性能提升,NVMe的另一個重點則是提高SSD的1PS (每秒讀寫次數(shù))性能。如果我們有詳細(xì)了解過SSD的主控參數(shù),應(yīng)該知道會有隊列深度這個參數(shù)。理論上,1PS=隊列深度/ 1延遲,故1PS的性能,與隊列深度有較大的關(guān)系(但1PS并不與隊列深度成正比,因為實際應(yīng)用中,隨著隊列深度的增大,1延遲也會提高)。市面上性能不錯的SATA接口 SSD,在隊列深度上都可以達(dá)到32,然而這也是AHCI所能做到的極限。但目前高端的企業(yè)級PCIe SSD,其隊列深度可能要達(dá)到128,甚至是256才能夠發(fā)揮出最高的1PS性能。而NVMe標(biāo)準(zhǔn)下,最大的隊列深度可達(dá)64000。此外,NVMe的隊列數(shù)量也從AHCI的1,提高了 64000。
[0007]3.驅(qū)動適用性廣,NVMe標(biāo)準(zhǔn)的也解決了不同PCIe SSD之間的驅(qū)動適用性問題。此前的PCIe SSD,均需要安裝驅(qū)動程序后才能正常使用,而不同的廠商又各自為政,每個廠商產(chǎn)品都有自己的驅(qū)動,SSD也不能作為引導(dǎo)使用。但支持NVMe標(biāo)準(zhǔn)之后,PCIe SSD就可適用于多個不同平臺,也不需要廠商獨立提供驅(qū)動支持。目前Windows、Linux、Solaris、Unix、VMware、UEFI 等都加入了對 NVMe SSD 的支持。
[0008]
【發(fā)明內(nèi)容】
本發(fā)明的技術(shù)任務(wù)是提供一種PCIE SSD優(yōu)化的方法。
[0009]本發(fā)明的技術(shù)任務(wù)是按以下方式實現(xiàn)的,該方法包括三個步驟:
步驟I)關(guān)閉irqbalance服務(wù);
在紅帽6.5中的NVMe驅(qū)動會自動把全部的中斷向量綁定到coreO上,如果有多個SSD,coreO將會成為瓶頸;irqbalance用于優(yōu)化中斷分配,自動收集系統(tǒng)數(shù)據(jù)以分析使用模式,并依據(jù)系統(tǒng)負(fù)載狀況將工作狀態(tài)置于Performance mode或Power-save mode ;
步驟2)確定Nvme中斷向量,取得新的IRQ與外設(shè)的對應(yīng)關(guān)系,確定新的中斷向量與外設(shè)的對應(yīng)關(guān)系;
中斷向量與IRQ對應(yīng)關(guān)系是在OS中固定不動的,而IRQ與1/0外設(shè)的對應(yīng)關(guān)系會應(yīng)外設(shè)變動而變動;外設(shè)變動后,重啟系統(tǒng),重建IRQ與1/0外設(shè)的對應(yīng)關(guān)系,進(jìn)而重建中斷向量與外設(shè)的映射關(guān)系;
步驟3)讓設(shè)備都在一個node上面;
Linux中用一個struct pg_data_t表不一個numa節(jié)點,Linux內(nèi)核支持numa調(diào)度,并實現(xiàn)CPU的負(fù)載均衡;查看是否支持:dmesg | grep _i numa,要查看具體的numa信息用numastat ;根據(jù)需求將PCIE SSD插入僅僅一個CPU的PCIE插槽或者平均插到每個CPU的PCIE插槽,使用usenumactl命令確保PCIE SSD所在node與上面運行的程序node號一致從而獲取最佳性能。
[0010]所述的步驟I)中工作狀態(tài)置于Performance mode時,irqbalance會將中斷盡可能均勻地分發(fā)給各個CPU core,以充分利用CPU多核,提升性能;
置于Power-save mode時,irqbalance會將中斷集中分配給第一個CPU,以保證其它空閑CPU的睡眠時間,降低能耗;irqbalance根據(jù)系統(tǒng)中斷負(fù)載的情況,自動迀移中斷保持中斷的平衡。
[0011]所述的步驟2)中重啟系統(tǒng)時,執(zhí)行一個硬件協(xié)議,外設(shè)宣布準(zhǔn)備使用哪些中斷線,然后協(xié)商一個最終的值以盡可能的減少沖突;一旦外設(shè)有了變動后,IRQ線不再對應(yīng)原來的外設(shè)后,這個通過IRQ線建立與外設(shè)對應(yīng)關(guān)系的中斷向量不再有效;必須重啟系統(tǒng),執(zhí)行硬件協(xié)議,取得新的IRQ與外設(shè)的對應(yīng)關(guān)系,從而也就確定新的中斷向量與外設(shè)的對應(yīng)關(guān)系O
[0012]本發(fā)明的一種PCIE SSD優(yōu)化的方法和現(xiàn)有技術(shù)相比,解決了存儲時出現(xiàn)的高延遲的問題,有效的縮短了延遲時間;使得SSD的1PS (每秒讀寫次數(shù))性能得到明顯提高;該方法也解決了不同PCIe SSD之間的驅(qū)動適用性問題,不需要廠商獨立提供驅(qū)動支持,PCIeSSD就可適用于多個不同平臺。
【具體實施方式】
[0013]實施例1:
該PCIE SSD優(yōu)化的方法包括三個步驟:
步驟I)關(guān)閉irqbalance服務(wù);
在紅帽6.5中的NVMe驅(qū)動會自動把全部的中斷向量綁定到coreO上,如果有多個SSD,coreO將會成為瓶頸;irqbalance用于優(yōu)化中斷分配,自動收集系統(tǒng)數(shù)據(jù)以分析使用模式,并依據(jù)系統(tǒng)負(fù)載狀況將工作狀態(tài)置于Performance mode或Power-save mode ;
步驟2)確定Nvme中斷向量,取得新的IRQ與外設(shè)的對應(yīng)關(guān)系,確定新的中斷向量與外設(shè)的對應(yīng)關(guān)系;
中斷向量與IRQ對應(yīng)關(guān)系是在OS中固定不動的,而IRQ與I/O外設(shè)的對應(yīng)關(guān)系會應(yīng)外設(shè)變動而變動;外設(shè)變動后,重啟系統(tǒng),重建IRQ與I/O外設(shè)的對應(yīng)關(guān)系,進(jìn)而重建中斷向量與外設(shè)的映射關(guān)系;
步驟3)讓設(shè)備都在一個node上面;
Linux中用一個struct pg_data_t表不一個numa節(jié)點,Linux內(nèi)核支持numa調(diào)度,并實現(xiàn)CPU的負(fù)載均衡;查看是否支持:dmesg | grep _i numa,要查看具體的numa信息用numastat ;根據(jù)需求將PCIE SSD插入僅僅一個CPU的PCIE插槽或者平均插到每個CPU的PCIE插槽,使用usenumactl命令確保PCIE SSD所在node與上面運行的程序node號一致從而獲取最佳性能。
[0014]實施例2:
該PCIE SSD優(yōu)化的方法包括三個步驟:
步驟I)關(guān)閉irqbalance服務(wù);
在紅帽6.5中的NVMe驅(qū)動會自動把全部的中斷向量綁定到coreO上,如果有多個SSD,coreO將會成為瓶頸;irqbalance用于優(yōu)化中斷分配,自動收集系統(tǒng)數(shù)據(jù)以分析使用模式,并依據(jù)系統(tǒng)負(fù)載狀況將工作狀態(tài)置于Performance mode或Power-save mode ;
工作狀態(tài)置于Performance mode時,irqbalance會將中斷盡可能均勾地分發(fā)給各個CPU core,以充分利用CPU多核,提升性能;
置于Power-save mode時,irqbalance會將中斷集中分配給第一個CPU,以保證其它空閑CPU的睡眠時間,降低能耗;irqbalance根據(jù)系統(tǒng)中斷負(fù)載的情況,自動迀移中斷保持中斷的平衡,同時會考慮到省電因素等等。但是在實時系統(tǒng)中