使用PCIe交換網(wǎng)結(jié)構(gòu)在多主機(jī)系統(tǒng)中優(yōu)化資源部署
2020-10-27
作者:Vincent Haché,,Microchip Technology Inc. 固件工程技術(shù)顧問(wèn)
來(lái)源:Microchip
越來(lái)越多的數(shù)據(jù)中心和其他高性能計(jì)算環(huán)境開始使用GPU,,因?yàn)镚PU能夠快速處理深度學(xué)習(xí)和機(jī)器學(xué)習(xí)應(yīng)用中生成的大量數(shù)據(jù),。不過(guò),,就像許多可提高應(yīng)用性能的新型數(shù)據(jù)中心創(chuàng)新一樣,這項(xiàng)創(chuàng)新也暴露出新的系統(tǒng)瓶頸,。在這些應(yīng)用中,,用于提高系統(tǒng)性能的新興架構(gòu)涉及通過(guò)一個(gè)PCIe?結(jié)構(gòu)在多個(gè)主機(jī)之間共享系統(tǒng)資源。
PCIe標(biāo)準(zhǔn)(特別是其基于樹的傳統(tǒng)層級(jí))會(huì)限制資源共享的實(shí)現(xiàn)方式(和實(shí)現(xiàn)程度),。不過(guò),,可以實(shí)現(xiàn)一種低延時(shí)的高速結(jié)構(gòu)方法,這種方法允許在多個(gè)主機(jī)之間共享大量GPU和NVMe SSD,,同時(shí)仍支持標(biāo)準(zhǔn)系統(tǒng)驅(qū)動(dòng)程序,。
PCIe結(jié)構(gòu)方法采用動(dòng)態(tài)分區(qū)和多主機(jī)單根I/O虛擬化(SR-IOV)共享。各PCIe結(jié)構(gòu)之間可直接路由點(diǎn)對(duì)點(diǎn)傳輸,。這樣便可為點(diǎn)對(duì)點(diǎn)傳輸提供最佳路由,,減少根端口擁塞,并且更有效地平衡CPU資源的負(fù)載,。
傳統(tǒng)上,,GPU傳輸必須訪問(wèn)CPU的系統(tǒng)存儲(chǔ)器,這會(huì)導(dǎo)致端點(diǎn)之間發(fā)生存儲(chǔ)器共享爭(zhēng)用,。 當(dāng)GPU使用其共享的存儲(chǔ)器映射資源而不是CPU存儲(chǔ)器時(shí),,它可以在本地提取數(shù)據(jù),無(wú)需先通過(guò)CPU傳遞數(shù)據(jù),。這消除了跳線和鏈路以及由此產(chǎn)生的延時(shí),,從而使GPU能夠更高效地處理數(shù)據(jù)。
PCIe的固有限制
PCIe主層級(jí)是一個(gè)樹形結(jié)構(gòu),,其中的每個(gè)域都有一個(gè)根聯(lián)合體,,從該點(diǎn)可擴(kuò)展到“葉子”,這些“葉子”通過(guò)交換網(wǎng)和橋接器到達(dá)端點(diǎn),。鏈路的嚴(yán)格層級(jí)和方向性給多主機(jī),、多交換網(wǎng)系統(tǒng)帶來(lái)了成本高昂的設(shè)計(jì)要求。
圖1——多主機(jī)拓?fù)?/p>
以圖1所示的系統(tǒng)為例,。要符合PCIe的層級(jí),,主機(jī)1必須在交換網(wǎng)1中有一個(gè)專用的下行端口,該端口連接到交換網(wǎng)2中的專用上行端口,。它還需要在交換網(wǎng)2中有一個(gè)專用的下行端口,,該端口連接到交換網(wǎng)3中的專用上行端口,依此類推,。主機(jī)2和主機(jī)3也有類似的要求,,如圖2所示。
圖2——每個(gè)主機(jī)的層級(jí)要求
即使是基于PCIe樹形結(jié)構(gòu)的最基本系統(tǒng),,也需要各交換網(wǎng)之間有三個(gè)鏈路專用于每個(gè)主機(jī)的PCIe拓?fù)?。而且,,由于主機(jī)之間無(wú)法共享這些鏈路,因此系統(tǒng)會(huì)很快變得極為低效,。
此外,,符合PCIe的典型層級(jí)只有一個(gè)根端口,而且盡管“多根I/O虛擬化和共享”規(guī)范中支持多個(gè)根,,但它會(huì)使設(shè)計(jì)更復(fù)雜,,并且當(dāng)前不受主流CPU支持。結(jié)果會(huì)造成未使用的PCIe設(shè)備(即端點(diǎn))滯留在其分配到的主機(jī)中,。不難想象,,這在采用多個(gè)GPU、存儲(chǔ)設(shè)備及其控制器以及交換網(wǎng)的大型系統(tǒng)中會(huì)變得多么低效,。
例如,,如果第一個(gè)主機(jī)(主機(jī)1)已經(jīng)消耗了所有計(jì)算資源,而主機(jī)2和3未充分利用資源,,則顯然希望主機(jī)1訪問(wèn)這些資源,。但主機(jī)1無(wú)法這樣做,因?yàn)檫@些資源在它的層級(jí)域之外,,因此會(huì)發(fā)生滯留,。非透明橋接(NTB)是這種問(wèn)題的一個(gè)潛在解決方案,但由于每種類型的共享PCIe設(shè)備都需要非標(biāo)準(zhǔn)驅(qū)動(dòng)程序和軟件,,因此這同樣會(huì)使系統(tǒng)變得復(fù)雜,。更好的方法是使用PCIe結(jié)構(gòu),這種結(jié)構(gòu)允許標(biāo)準(zhǔn)PCIe拓?fù)淙菁{多個(gè)可訪問(wèn)每個(gè)端點(diǎn)的主機(jī),。
實(shí)施方法
系統(tǒng)使用一個(gè)PCIe結(jié)構(gòu)交換網(wǎng)(本例中為Microchip Switchtec? PAX系列的成員)在兩個(gè)獨(dú)立但可透明互操作的域中實(shí)現(xiàn):即包含所有端點(diǎn)和結(jié)構(gòu)鏈路的結(jié)構(gòu)域以及每個(gè)主機(jī)專用的主機(jī)域(圖3),。主機(jī)通過(guò)在嵌入式CPU上運(yùn)行的PAX交換網(wǎng)固件保留在單獨(dú)的虛擬域中,,因此,,交換網(wǎng)將始終顯示為具有直連端點(diǎn)的標(biāo)準(zhǔn)單層PCIe設(shè)備,而與這些端點(diǎn)出現(xiàn)在結(jié)構(gòu)中的位置無(wú)關(guān),。
圖3——每個(gè)結(jié)構(gòu)的獨(dú)立域
來(lái)自主機(jī)域的事務(wù)會(huì)在結(jié)構(gòu)域中轉(zhuǎn)換為ID和地址,,反之,結(jié)構(gòu)域中通信的非分層路由也是如此,。這樣,,系統(tǒng)中的所有主機(jī)便可共享連接交換網(wǎng)和端點(diǎn)的結(jié)構(gòu)鏈路。交換網(wǎng)固件會(huì)攔截來(lái)自主機(jī)的所有配置平面通信(包括PCIe枚舉過(guò)程),,并使用數(shù)量可配置的下行端口虛擬化一個(gè)符合PCIe規(guī)范的簡(jiǎn)單交換網(wǎng),。
當(dāng)所有控制平面通信都路由到交換網(wǎng)固件進(jìn)行處理時(shí),數(shù)據(jù)平面通信直接路由到端點(diǎn),。其他主機(jī)域中未使用的GPU不再滯留,,因?yàn)樗鼈兛梢愿鶕?jù)每個(gè)主機(jī)的需求動(dòng)態(tài)分配,。結(jié)構(gòu)內(nèi)支持點(diǎn)對(duì)點(diǎn)通信,這使其能夠適應(yīng)機(jī)器學(xué)習(xí)應(yīng)用,。當(dāng)以符合PCIe規(guī)范的方式向每個(gè)主機(jī)提供功能時(shí),,可以使用標(biāo)準(zhǔn)驅(qū)動(dòng)程序。
操作方法
為了解這種方法的工作原理,,我們以圖4中的系統(tǒng)為例,,該系統(tǒng)由兩個(gè)主機(jī)(主機(jī)1采用Windows?系統(tǒng),主機(jī)2采用Linux?系統(tǒng)),、四個(gè)PAX PCIe結(jié)構(gòu)交換網(wǎng),、四個(gè)Nvidia M40 GPGPU和一個(gè)支持SR-IOV的Samsung NVMe SSD組成。在本實(shí)驗(yàn)中,,主機(jī)運(yùn)行代表實(shí)際機(jī)器學(xué)習(xí)工作負(fù)載的通信,,包括Nvidia的CUDA點(diǎn)對(duì)點(diǎn)通信基準(zhǔn)測(cè)試實(shí)用程序和訓(xùn)練cifar10圖像分類的TensorFlow模型。嵌入式交換網(wǎng)固件處理交換網(wǎng)的低級(jí)配置和管理,,系統(tǒng)由Microchip的ChipLink調(diào)試和診斷實(shí)用程序管理,。
圖4:雙主機(jī)PCIe結(jié)構(gòu)引擎
四個(gè)GPU最初分配給主機(jī)1,PAX結(jié)構(gòu)管理器顯示在結(jié)構(gòu)中發(fā)現(xiàn)的所有設(shè)備,,其中GPU綁定到Windows主機(jī),。但是,主機(jī)上的結(jié)構(gòu)不再?gòu)?fù)雜,,所有GPU就像直接連接到虛擬交換網(wǎng)一樣,。隨后,結(jié)構(gòu)管理器將綁定所有設(shè)備,,Windows設(shè)備管理器將顯示GPU,。主機(jī)將交換網(wǎng)視為下行端口數(shù)量可配置的簡(jiǎn)單物理PCIe交換網(wǎng)。
一旦CUDA發(fā)現(xiàn)了四個(gè)GPU,,點(diǎn)對(duì)點(diǎn)帶寬測(cè)試就會(huì)顯示單向傳輸速率為12.8 GBps,,雙向傳輸速率為24.9 GBps。這些傳輸直接跨過(guò)PCIe結(jié)構(gòu),,而無(wú)需通過(guò)主機(jī),。如果運(yùn)行用于訓(xùn)練Cifar10圖像分類算法的TensorFlow模型并使工作負(fù)載分布在全部四個(gè)GPU上,則可以將兩個(gè)GPU釋放回結(jié)構(gòu)池中,,將它們與主機(jī)解除綁定,。這樣可以釋放其余兩個(gè)GPU來(lái)執(zhí)行其他工作負(fù)載。與Windows主機(jī)一樣,,Linux主機(jī)也將交換網(wǎng)視為簡(jiǎn)單的PCIe交換網(wǎng),,無(wú)需自定義驅(qū)動(dòng)程序,而CUDA也可以發(fā)現(xiàn)GPU,,并在Linux主機(jī)上運(yùn)行P2P傳輸,。性能類似于使用Windows主機(jī)實(shí)現(xiàn)的性能,,如表1所示。
表1:GPU點(diǎn)對(duì)點(diǎn)傳輸帶寬
下一步是將SR-IOV虛擬功能連接到Windows主機(jī),,PAX將此類功能以標(biāo)準(zhǔn)物理NVM設(shè)備的形式提供,,以便主機(jī)可以使用標(biāo)準(zhǔn)NVMe驅(qū)動(dòng)程序。此后,,虛擬功能將與Linux主機(jī)結(jié)合,,并且新的NVMe設(shè)備將出現(xiàn)在模塊設(shè)備列表中。本實(shí)驗(yàn)的結(jié)果是,,兩個(gè)主機(jī)現(xiàn)在都可以獨(dú)立使用其虛擬功能,。
務(wù)必注意的是,虛擬PCIe交換網(wǎng)和所有動(dòng)態(tài)分配操作都以完全符合PCIe規(guī)范的方式呈現(xiàn)給主機(jī),,以便主機(jī)能夠使用標(biāo)準(zhǔn)驅(qū)動(dòng)程序,。嵌入式交換網(wǎng)固件提供了一個(gè)簡(jiǎn)單的管理接口,這樣便可通過(guò)成本低廉的外部處理器來(lái)配置和管理PCIe結(jié)構(gòu),。設(shè)備點(diǎn)對(duì)點(diǎn)事務(wù)默認(rèn)情況下處于使能狀態(tài),,不需要外部結(jié)構(gòu)管理器進(jìn)行額外配置或管理。
總結(jié)
PCIe交換網(wǎng)結(jié)構(gòu)是一種能夠充分利用CPU巨大性能的絕佳方法,,但PCIe標(biāo)準(zhǔn)本身存在一些障礙,。不過(guò),可以通過(guò)使用動(dòng)態(tài)分區(qū)和多主機(jī)單根I/O虛擬化共享技術(shù)來(lái)解決這些難題,,以便可以將GPU和NVMe資源實(shí)時(shí)動(dòng)態(tài)分配給多主機(jī)系統(tǒng)中的任何主機(jī),,從而滿足機(jī)器學(xué)習(xí)工作負(fù)載不斷變化的需求。