本發(fā)明屬于通信及計(jì)算機(jī),具體涉及一種linux命令空間中共享rdma設(shè)備的方法及系統(tǒng)。
背景技術(shù):
1、遠(yuǎn)程直接內(nèi)存訪問(remote?direct?memory?access,簡稱rdma)網(wǎng)絡(luò)以其極低的延遲、低cpu開銷和高帶寬的優(yōu)異特性,在近年來已經(jīng)成為數(shù)據(jù)中心網(wǎng)絡(luò)的主流。其種類包括了infiniband網(wǎng)絡(luò)和roce(以太網(wǎng)遠(yuǎn)程直接內(nèi)存訪問)網(wǎng)絡(luò)。rdma支持?jǐn)?shù)據(jù)直接從一臺計(jì)算機(jī)的內(nèi)存?zhèn)鬏數(shù)搅硪慌_計(jì)算機(jī)的內(nèi)存,無需雙方操作系統(tǒng)介入。
2、linux的命名空間(namespace)提供了一種內(nèi)核級別的隔離系統(tǒng)資源的方法,通過將系統(tǒng)的全局資源放在不同的namespace中,來實(shí)現(xiàn)資源隔離的目的。不同namespace中的程序,可以享有一份獨(dú)立的系統(tǒng)資源。目前l(fā)inux中提供了六類系統(tǒng)資源的隔離機(jī)制,分別是文件系統(tǒng)掛載點(diǎn)隔離、主機(jī)名和域名信息隔離、進(jìn)程間通信隔離、進(jìn)程id隔離、網(wǎng)絡(luò)資源隔離(以太網(wǎng))、用戶和用戶組id隔離。目前的linux系統(tǒng)中沒有對rdma設(shè)備隔離的原生實(shí)現(xiàn)。
3、infiniband驅(qū)動(dòng)中實(shí)現(xiàn)了兩種在namespace中使用rdma模式,分別是共享模式(shared?mode)和獨(dú)占模式(exclusive?mode)。當(dāng)rdma子系統(tǒng)處于共享模式時(shí),rdma設(shè)備在所有namespace中均可訪問;當(dāng)不需要多個(gè)網(wǎng)絡(luò)命名空間之間的rdma設(shè)備隔離時(shí),可以使用共享模式。當(dāng)rdma子系統(tǒng)處于獨(dú)占模式時(shí),rdma設(shè)備只能在一個(gè)namespace中訪問,在其他namespace中不可見。目前業(yè)界在容器場景中都在采用這兩種模式支持多個(gè)容器中使用rdma設(shè)備,但這兩種模式都存在一定問題。共享模式在一臺服務(wù)器只有一個(gè)rdma設(shè)備的情況下可以正常使用,但是在同時(shí)擁有多個(gè)rdma設(shè)備的服務(wù)器上,所有rdma設(shè)備在所有namespace中可見。在一些場景下(如多numa或多socket),容器用戶需要使用特定rdma設(shè)備以獲得最佳性能,就需要根據(jù)情況手動(dòng)指定,否則就會(huì)默認(rèn)使用第一個(gè)發(fā)現(xiàn)的設(shè)備,導(dǎo)致流量擁塞、使用不均衡,或使用了跨numa或socket的rdma設(shè)備,導(dǎo)致性能降低。獨(dú)占模式可以做到只將最優(yōu)的一塊rdma關(guān)聯(lián)到特定namespace給容器使用,其他rdma設(shè)備在該namespace中不可見。但是,關(guān)聯(lián)到特定namespace中的rdma設(shè)備在其他namespace中也變得不可見。rdma的設(shè)備數(shù)量有限,即使在開啟sr-iov(單根輸入輸出虛擬化)的情況下虛擬出多個(gè)vf(虛擬功能),也只能支持一臺服務(wù)器啟動(dòng)有限數(shù)量的容器,降低了容器的部署密度,造成資源浪費(fèi)。sr-iov的部分配置改動(dòng)需要修改設(shè)備固件,需要對服務(wù)器設(shè)備進(jìn)行重啟,所以,由于場景需求需要修改模式時(shí),有可能需要對服務(wù)器進(jìn)行重啟才能生效配置,操作流程復(fù)雜。
技術(shù)實(shí)現(xiàn)思路
1、本發(fā)明要解決的技術(shù)問題:針對現(xiàn)有技術(shù)的上述問題,提供一種linux命令空間中共享rdma設(shè)備的方法及系統(tǒng),解決了使用共享模式時(shí)無法指定只使用特定rdma設(shè)備的問題,同時(shí)解決獨(dú)占模式下支持的容器數(shù)量受限的問題。
2、為了解決上述技術(shù)問題,本發(fā)明采用的技術(shù)方案為:
3、一種linux命令空間中共享rdma設(shè)備的方法,包括下述步驟:為linux命令空間之間共享rdma設(shè)備的rdma模式在原有的共享模式、獨(dú)占模式的基礎(chǔ)上增加新的部分共享模式,并修改rdma設(shè)備的linux命令空間記錄數(shù)據(jù)結(jié)構(gòu)使其支持一個(gè)rdma設(shè)備同時(shí)關(guān)聯(lián)到多個(gè)指定的linux命令空間,并修改rdma設(shè)備加入linux命令空間、退出linux命令空間的操作使其兼容共享模式、獨(dú)占模式以及新增的部分共享模式。
4、進(jìn)一步的,所述修改rdma設(shè)備的linux命令空間記錄數(shù)據(jù)結(jié)構(gòu)使其支持一個(gè)rdma設(shè)備同時(shí)關(guān)聯(lián)到多個(gè)linux命令空間是指修改rdma設(shè)備的linux命令空間記錄數(shù)據(jù)結(jié)構(gòu)為列表,通過列表來列舉出rdma設(shè)備同時(shí)關(guān)聯(lián)到的指定的linux命令空間信息,從而使得使該rdma設(shè)備支持同時(shí)關(guān)聯(lián)到多個(gè)linux命令空間,以及各個(gè)linux命令空間只能夠根據(jù)所述列表來發(fā)現(xiàn)和使用列表所記錄的rdma設(shè)備。
5、進(jìn)一步的,所述修改rdma設(shè)備加入linux命令空間、退出linux命令空間的操作使其兼容共享模式、獨(dú)占模式以及新增的部分共享模式后,rdma設(shè)備加入linux命令空間的操作包括:
6、s101,生成修改rdma設(shè)備的linux命令空間的網(wǎng)絡(luò)鏈接請求;
7、s102,向linux內(nèi)核驅(qū)動(dòng)發(fā)送網(wǎng)絡(luò)鏈接請求;
8、s103,linux內(nèi)核驅(qū)動(dòng)判斷當(dāng)前l(fā)inux命令空間之間共享rdma設(shè)備的rdma模式,若rdma模式為共享模式則返回錯(cuò)誤代碼,結(jié)束并退出,若為獨(dú)占模式則跳轉(zhuǎn)步驟s104;若為部分共享模式則跳轉(zhuǎn)步驟s105;
9、s104,停止該rdma設(shè)備,修改該rdma設(shè)備的linux命令空間記錄數(shù)據(jù)結(jié)構(gòu),重命名該rdma設(shè)備的設(shè)備名稱,重新創(chuàng)建該rdma設(shè)備的屬性文件,從而使得該rdma設(shè)備進(jìn)入獨(dú)享模式并自動(dòng)退出原來加入的linux命令空間,結(jié)束并退出;
10、s105,修改該rdma設(shè)備的linux命令空間記錄數(shù)據(jù)結(jié)構(gòu),保持原有的linux命令空間不變,增加新的linux命令空間,結(jié)束并退出。
11、進(jìn)一步的,步驟s101中生成的網(wǎng)絡(luò)鏈接請求包括網(wǎng)絡(luò)鏈接請求的設(shè)置命令cmd_set,網(wǎng)絡(luò)鏈接請求對應(yīng)的rdma設(shè)備的索引index以及出linux命令空間的文件描述符fd。
12、進(jìn)一步的,所述修改rdma設(shè)備加入linux命令空間、退出linux命令空間的操作使其兼容共享模式、獨(dú)占模式以及新增的部分共享模式后,rdma設(shè)備退出linux命令空間的操作包括:
13、s201,生成將該rdma設(shè)備從一個(gè)linux命令空間中刪除的網(wǎng)絡(luò)鏈接請求;
14、s202,向linux內(nèi)核驅(qū)動(dòng)發(fā)送網(wǎng)絡(luò)鏈接請求;
15、s203,linux內(nèi)核驅(qū)動(dòng)判斷當(dāng)前l(fā)inux命令空間之間共享rdma設(shè)備的rdma模式,若為共享模式或者獨(dú)享模式則返回錯(cuò)誤代碼,結(jié)束并退出,若為部分共享模式則跳轉(zhuǎn)步驟s204;
16、s204,判斷請求的linux命令空間是否存在于該rdma設(shè)備的linux命令空間記錄數(shù)據(jù)結(jié)構(gòu)中,若不存在于該rdma設(shè)備的linux命令空間記錄數(shù)據(jù)結(jié)構(gòu)中,則返回錯(cuò)誤代碼,結(jié)束并退出,否則,將請求的linux命令空間從該rdma設(shè)備的linux命令空間記錄數(shù)據(jù)結(jié)構(gòu)中刪除,結(jié)束并退出。
17、進(jìn)一步的,步驟s201中生成的網(wǎng)絡(luò)鏈接請求包括網(wǎng)絡(luò)鏈接請求的刪除命令cmd_del,網(wǎng)絡(luò)鏈接請求對應(yīng)的rdma設(shè)備的索引index以及出linux命令空間的文件描述符fd。
18、進(jìn)一步的,所述方法還包括:
19、s301,預(yù)先為各個(gè)linux命令空間分配并配置其對應(yīng)的rdma設(shè)備,并記錄在各個(gè)rdma設(shè)備的linux命令空間記錄數(shù)據(jù)結(jié)構(gòu)的初始值中;
20、s302,在各個(gè)linux命令空間啟動(dòng)后,根據(jù)各個(gè)rdma設(shè)備的linux命令空間記錄數(shù)據(jù)結(jié)構(gòu)的內(nèi)容來實(shí)現(xiàn)對該linux命令空間可使用的rdma設(shè)備進(jìn)行發(fā)現(xiàn)和使用,使得各個(gè)rdma設(shè)備僅被其linux命令空間記錄數(shù)據(jù)結(jié)構(gòu)記錄的linux命令空間使用;
21、s303,在各個(gè)linux命令空間運(yùn)行期間,若需要修改rdma設(shè)備加入linux命令空間或者退出linux命令空間的操作時(shí),則執(zhí)行修改rdma設(shè)備加入linux命令空間或者退出linux命令空間的操作更新rdma設(shè)備的linux命令空間記錄數(shù)據(jù)結(jié)構(gòu)并跳轉(zhuǎn)步驟s303。
22、本發(fā)明還提出一種linux命令空間中共享rdma設(shè)備的系統(tǒng),包括相互連接的微處理器和存儲器,所述微處理器被編程或配置以執(zhí)行所述linux命令空間中共享rdma設(shè)備的方法。
23、本發(fā)明還提出一種計(jì)算機(jī)可讀存儲介質(zhì),該計(jì)算機(jī)可讀存儲介質(zhì)中存儲有計(jì)算機(jī)程序/指令,該計(jì)算機(jī)程序/指令被編程或配置以通過處理器執(zhí)行所述linux命令空間中共享rdma設(shè)備的方法。
24、本發(fā)明還提出一種計(jì)算機(jī)程序產(chǎn)品,包括計(jì)算機(jī)程序/指令,該計(jì)算機(jī)程序/指令被編程或配置以通過處理器執(zhí)行所述linux命令空間中共享rdma設(shè)備的方法。
25、相比現(xiàn)有技術(shù),本發(fā)明的優(yōu)點(diǎn)在于:
26、本發(fā)明修改rdma設(shè)備的linux命令空間記錄數(shù)據(jù)結(jié)構(gòu)為列表,使其支持一個(gè)rdma設(shè)備同時(shí)關(guān)聯(lián)到多個(gè)指定的linux命令空間,對于一個(gè)linux命令空間,可以使用和這個(gè)linux命令空間關(guān)聯(lián)的所有的rdma設(shè)備,對于一個(gè)rdma設(shè)備,可以同時(shí)關(guān)聯(lián)到多個(gè)linux命令空間,解決原有共享模式無法指定只使用特定rdma設(shè)備的問題,同時(shí)解決獨(dú)占模式支持的容器數(shù)量受限的問題,此外,本發(fā)明還在原有的共享模式、獨(dú)占模式的基礎(chǔ)上增加新的部分共享模式,并修改rdma設(shè)備加入linux命令空間、退出linux命令空間的操作使其兼容共享模式、獨(dú)占模式以及新增的部分共享模式,無需在不同場景下對模式進(jìn)行切換,解決更換模式可能需要重啟設(shè)備的問題。