一種提升應(yīng)用交付通訊平臺(tái)多進(jìn)程程序性能的方法
【專利摘要】本發(fā)明公開了一種提升應(yīng)用交付通訊平臺(tái)多進(jìn)程程序性能的方法,所述方法包括:根據(jù)源IP將數(shù)據(jù)包哈希到網(wǎng)卡隊(duì)列;綁定所述網(wǎng)卡隊(duì)列中的數(shù)據(jù)包到相應(yīng)的CPU核;將所述CPU核上接收的數(shù)據(jù)包綁定相應(yīng)的進(jìn)程進(jìn)行處理;為每個(gè)進(jìn)程分別創(chuàng)建服務(wù)程序,設(shè)置所述服務(wù)進(jìn)程為REUSEPORT選項(xiàng),并綁定IP和端口;運(yùn)行修改后的服務(wù)程序,根據(jù)服務(wù)進(jìn)程的數(shù)量調(diào)整多隊(duì)列網(wǎng)卡啟用的隊(duì)列數(shù);所述每個(gè)服務(wù)進(jìn)程分別綁定在一個(gè)CPU核上。本發(fā)明能夠均衡網(wǎng)卡硬中斷、軟中斷,保證接收和發(fā)送數(shù)據(jù)包的CPU核是同一個(gè)CPU核,從而提高CPU的緩存命中率。
【專利說明】一種提升應(yīng)用交付通訊平臺(tái)多進(jìn)程程序性能的方法
【技術(shù)領(lǐng)域】
[0001 ] 本發(fā)明涉及計(jì)算機(jī)網(wǎng)絡(luò)技術(shù),尤其涉及一種提升應(yīng)用交付通訊平臺(tái)多進(jìn)程程序性能的方法。
【背景技術(shù)】
[0002]CPU緩存是位于CPU與內(nèi)存之間的臨時(shí)存儲(chǔ)器,主要是為了解決CPU運(yùn)算速度與內(nèi)存讀寫速度不匹配的矛盾。CPU緩存按照數(shù)據(jù)讀取順序與CPU結(jié)合的緊密程度,可分為一級(jí)緩存、二級(jí)緩存。其中,一級(jí)緩存又可以分為數(shù)據(jù)緩存和指令緩存,用來存放數(shù)據(jù)及對(duì)執(zhí)行這些數(shù)據(jù)的指令進(jìn)行及時(shí)解碼。
[0003]通常多核處理器的每個(gè)核有一個(gè)較小的獨(dú)立的一級(jí)緩存,另外所有的核共享一個(gè)較大的二級(jí)緩存。程序訪問數(shù)據(jù)的速度如下:
[0004]如果程序訪問的數(shù)據(jù)在本核的一級(jí)緩存中,則訪問該數(shù)據(jù)的速度最快。
[0005]如果程序訪問的數(shù)據(jù)在二級(jí)緩存中,則訪問該數(shù)據(jù)較快。
[0006]如果程序訪問的數(shù)據(jù)不在一、二級(jí)緩存中,因CPU運(yùn)算速度比內(nèi)存讀寫速度快,CPU需花費(fèi)很長時(shí)間來從內(nèi)存調(diào)取數(shù)據(jù),訪問很慢。
[0007]同一個(gè)數(shù)據(jù)存儲(chǔ)在多個(gè)核的一級(jí)緩存上時(shí),有一個(gè)核修改該數(shù)據(jù),會(huì)導(dǎo)致其他核上的該數(shù)據(jù)的緩存失效。
[0008]目前,多核處理器環(huán)境下,單隊(duì)列網(wǎng)卡和多隊(duì)列網(wǎng)卡都有不同程度上提高CPU緩存命中率的機(jī)制。
[0009]單隊(duì)列網(wǎng)卡下提高CPU緩存命中率的機(jī)制
[0010]單隊(duì)列網(wǎng)卡機(jī)制采用RPS (Receive Packet Steering接收數(shù)據(jù)包轉(zhuǎn)向)+RFS (Receive Flow Steering接收數(shù)據(jù)流轉(zhuǎn)向)機(jī)制優(yōu)化數(shù)據(jù)流。RPS實(shí)現(xiàn)了數(shù)據(jù)流的哈希歸類,同時(shí)把軟中斷負(fù)載均衡到各個(gè)CPU。由于RPS只是單純的把同一流的數(shù)據(jù)包分發(fā)給同一個(gè)CPU核來處理,可能會(huì)造成分發(fā)數(shù)據(jù)流的CPU核和執(zhí)行處理該數(shù)據(jù)流的應(yīng)用程序的核不是同一個(gè),此時(shí),數(shù)據(jù)包均衡到不同的CPU,應(yīng)用程序所在的CPU和軟中斷處理的CPU不同,嚴(yán)重影響CPU緩存效率。RFS解決了該問題,它把接收到的數(shù)據(jù)包送達(dá)應(yīng)用所在的CPU上,提高CPU緩存命中率。其中,RPS與RFS的示意圖如圖1a和圖1b所示。
[0011]單隊(duì)列網(wǎng)卡機(jī)制的RPS、RFS雖然能均衡網(wǎng)卡軟中斷處理,但硬中斷會(huì)成為系統(tǒng)性能的瓶頸。
[0012]多隊(duì)列網(wǎng)卡下提高CPU緩存命中率的機(jī)制
[0013]多隊(duì)列網(wǎng)卡機(jī)制米用RSS(Receive-side Scaling 接收端擴(kuò)展)、XPS(TransmitPacket Steering發(fā)送數(shù)據(jù)包轉(zhuǎn)向)、REUSEP0RT (端口重用)等方法優(yōu)化數(shù)據(jù)流。多網(wǎng)卡下,有多個(gè)收、發(fā)隊(duì)列。網(wǎng)卡收到數(shù)據(jù)包后,使用網(wǎng)絡(luò)層RSS哈希算法(基于IP的算法)或者傳輸層RSS哈希算法(基于端口的算法)把數(shù)據(jù)包發(fā)到各個(gè)隊(duì)列,然后發(fā)送中斷信號(hào)到隊(duì)列中處理隊(duì)列中斷的CPU核上,從而使得該核執(zhí)行驅(qū)動(dòng)指令,收取數(shù)據(jù)包到系統(tǒng)。RSS原理如圖2所示。
[0014]XPS機(jī)制中,為每個(gè)CPU準(zhǔn)備一個(gè)發(fā)送隊(duì)列映射表,表示該CPU發(fā)送的數(shù)據(jù)包,只能用該發(fā)送隊(duì)列映射表上設(shè)置的隊(duì)列發(fā)送,用戶可以設(shè)置每個(gè)CPU的發(fā)送隊(duì)列映射表。通過限定CPU發(fā)送隊(duì)列的數(shù)量,相當(dāng)于綁定CPU到發(fā)送隊(duì)列,提高了 CPU緩存效率。圖3是XPS的實(shí)例圖,圖中每個(gè)處理器只能用一個(gè)隊(duì)列發(fā)送數(shù)據(jù)包。
[0015]傳統(tǒng)的多進(jìn)程模型中,這些進(jìn)程共享服務(wù)器socket (套接字)??蛻舳苏?qǐng)求到達(dá)時(shí),各個(gè)進(jìn)程競爭獲得該請(qǐng)求,此時(shí)客戶端請(qǐng)求由哪個(gè)進(jìn)程處理是不確定的。為了解決這一問題,為創(chuàng)建的socket設(shè)置REUSEP0RT (端口重用)選項(xiàng),使得多個(gè)進(jìn)程可同時(shí)綁定同一個(gè)IP和端口,客戶端請(qǐng)求根據(jù)(源IP,源端口,目的IP,目的端口)哈希到達(dá)服務(wù)器進(jìn)程,消除了 accept (接收)驚群問題,提高了系統(tǒng)效率。圖4所示REUSEP0RT的實(shí)例圖,4個(gè)進(jìn)程綁定相同的IP和端口對(duì)客戶端外提供服務(wù)。
[0016]在多核處理器、多隊(duì)列網(wǎng)卡環(huán)境下,采用以上方法雖然能提高程序的處理效率,但確不能保證接收數(shù)據(jù)包的CPU核和發(fā)送數(shù)據(jù)包的CPU核是同一個(gè)CPU核,會(huì)導(dǎo)致CPU緩存效率低,系統(tǒng)性能下降。
【發(fā)明內(nèi)容】
[0017]為解決上述技術(shù)問題,本發(fā)明的目的是提供一種多核處理器、多隊(duì)列網(wǎng)卡環(huán)境下提升應(yīng)用交付通訊平臺(tái)多進(jìn)程程序性能的方法,應(yīng)用交付通訊平臺(tái)中處理網(wǎng)卡隊(duì)列硬中斷、軟中斷、協(xié)議棧收發(fā)數(shù)據(jù)包、應(yīng)用程序處理等在一個(gè)核上完成,并通過集中數(shù)據(jù)包的處理,提高系統(tǒng)CPU緩存效率,最終提高整個(gè)系統(tǒng)的性能。
[0018]本發(fā)明的目的通過以下的技術(shù)方案來實(shí)現(xiàn):
[0019]一種提升應(yīng)用交付通訊平臺(tái)多進(jìn)程程序性能的方法,該方法包括:
[0020]根據(jù)源IP將數(shù)據(jù)包哈希到網(wǎng)卡隊(duì)列;
[0021]綁定所述網(wǎng)卡隊(duì)列中的數(shù)據(jù)包到相應(yīng)的CPU核;
[0022]將所述CPU核上接收的數(shù)據(jù)包綁定相應(yīng)的進(jìn)程進(jìn)行處理;
[0023]為每個(gè)進(jìn)程分別創(chuàng)建服務(wù)程序,設(shè)置所述服務(wù)進(jìn)程為REUSEP0RT選項(xiàng),并綁定IP和端口 ;
[0024]運(yùn)行修改后的服務(wù)程序,根據(jù)服務(wù)進(jìn)程的數(shù)量調(diào)整多隊(duì)列網(wǎng)卡啟用的隊(duì)列數(shù);所述每個(gè)服務(wù)進(jìn)程分別綁定在一個(gè)CPU核上。
[0025]與現(xiàn)有技術(shù)相比,本發(fā)明的一個(gè)或多個(gè)實(shí)施例可以具有如下優(yōu)點(diǎn):
[0026]能夠均衡網(wǎng)卡硬中斷、軟中斷,保證接收和發(fā)送數(shù)據(jù)包的CPU核是同一個(gè)CPU核,從而提高CPU的緩存命中率。
【專利附圖】
【附圖說明】
[0027]圖1a和圖1b是現(xiàn)有技術(shù)提供的RPS/RFS和RPS結(jié)構(gòu)示意圖;
[0028]圖2是現(xiàn)有技術(shù)提供的RSS結(jié)構(gòu)原理圖;
[0029]圖3是現(xiàn)有技術(shù)提供的XPS實(shí)例圖;
[0030]圖4是現(xiàn)有技術(shù)提供的REUSEP0RT實(shí)例結(jié)構(gòu)圖;
[0031]圖5是本發(fā)明提供的方法流程圖;
[0032]圖6是本發(fā)明建立連接時(shí)的示意圖;
[0033]圖7是本發(fā)明建立連接后的示意圖。
【具體實(shí)施方式】
[0034]為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合實(shí)施例及附圖對(duì)本發(fā)明作進(jìn)一步詳細(xì)的描述。
[0035]如圖5所示,為提升應(yīng)用交付通訊平臺(tái)多進(jìn)程程序性能的方法,該方法包括:
[0036]步驟10根據(jù)源IP將數(shù)據(jù)包哈希到網(wǎng)卡隊(duì)列;
[0037]為了保證同一個(gè)源IP的數(shù)據(jù)包硬中斷、軟中斷都交由同一個(gè)處理器核處理,替換Linux內(nèi)核網(wǎng)卡驅(qū)動(dòng)模塊中默認(rèn)基于源IP、源端口、目的IP、目的端口的RSS哈希算法為源IP地址哈希算法。
[0038]步驟20綁定所述網(wǎng)卡隊(duì)列中的數(shù)據(jù)包到相應(yīng)的CPU核;
[0039]第N個(gè)網(wǎng)卡隊(duì)列上的網(wǎng)卡硬中斷、軟中斷交給第N個(gè)CPU處理。設(shè)置網(wǎng)卡的第N個(gè)隊(duì)列的硬中斷到第N個(gè)CPU核;軟中斷默認(rèn)與硬中斷運(yùn)行在同一個(gè)CPU核上。
[0040]步驟30將所述CPU核上接收的數(shù)據(jù)包綁定相應(yīng)的進(jìn)程進(jìn)行處理;
[0041]第N個(gè)CPU上接收的數(shù)據(jù)包交給第N個(gè)進(jìn)程處理。修改REUSEP0RT哈希算法,使其哈希的結(jié)果與步驟10中哈希算法的哈希結(jié)果相同。
[0042]步驟40為每個(gè)進(jìn)程分別創(chuàng)建服務(wù)程序,設(shè)置所述服務(wù)進(jìn)程為REUSEP0RT選項(xiàng),并綁定IP和端口 ;然后調(diào)用accept等待客戶端連接。
[0043]步驟50運(yùn)行修改后的服務(wù)程序,根據(jù)服務(wù)進(jìn)程的數(shù)量調(diào)整多隊(duì)列網(wǎng)卡啟用的隊(duì)列數(shù);所述每個(gè)服務(wù)進(jìn)程分別綁定在一個(gè)CPU核上。
[0044]在修改后的Linux系統(tǒng)上運(yùn)行修改后的服務(wù)程序,假設(shè)進(jìn)程數(shù)量為N,則調(diào)整多隊(duì)列網(wǎng)卡所啟用隊(duì)列數(shù)為N,且每個(gè)服務(wù)器進(jìn)程分別綁定在一個(gè)核上。
[0045]建立連接時(shí)的處理情況,如圖6所示:系統(tǒng)上有N個(gè)核,每個(gè)核上運(yùn)行一個(gè)服務(wù)器進(jìn)程,多隊(duì)列網(wǎng)卡啟用了 N個(gè)隊(duì)列;當(dāng)客戶端請(qǐng)求到達(dá)網(wǎng)卡后,網(wǎng)卡根據(jù)客戶端源IP哈希到下一個(gè)核上,經(jīng)過在該核上的協(xié)議棧處理后,REUSEP0RT哈希算法同樣使用網(wǎng)卡所使用的哈希算法根據(jù)該客戶端的源IP,把該客戶端的請(qǐng)求交給下一個(gè)服務(wù)器進(jìn)程處理。
[0046]建立連接后的處理情況,如圖7所示:當(dāng)連接建立后,客戶端的數(shù)據(jù)包經(jīng)過網(wǎng)卡哈希,交由下一個(gè)核處理,然后直接交由運(yùn)行在該核上的服務(wù)器進(jìn)程處理。
[0047]雖然本發(fā)明所揭露的實(shí)施方式如上,但所述的內(nèi)容只是為了便于理解本發(fā)明而采用的實(shí)施方式,并非用以限定本發(fā)明。任何本發(fā)明所屬【技術(shù)領(lǐng)域】內(nèi)的技術(shù)人員,在不脫離本發(fā)明所揭露的精神和范圍的前提下,可以在實(shí)施的形式上及細(xì)節(jié)上作任何的修改與變化,但本發(fā)明的專利保護(hù)范圍,仍須以所附的權(quán)利要求書所界定的范圍為準(zhǔn)。
【權(quán)利要求】
1.一種提升應(yīng)用交付通訊平臺(tái)多進(jìn)程程序性能的方法,其特征在于,所述方法包括: 根據(jù)源IP將數(shù)據(jù)包哈希到網(wǎng)卡隊(duì)列; 綁定所述網(wǎng)卡隊(duì)列中的數(shù)據(jù)包到相應(yīng)的CPU核; 將所述CPU核上接收的數(shù)據(jù)包綁定相應(yīng)的進(jìn)程進(jìn)行處理; 為每個(gè)進(jìn)程分別創(chuàng)建服務(wù)程序,設(shè)置所述服務(wù)進(jìn)程為REUSEPORT選項(xiàng),并綁定IP和端Π ; 運(yùn)行修改后的服務(wù)程序,根據(jù)服務(wù)進(jìn)程的數(shù)量調(diào)整多隊(duì)列網(wǎng)卡啟用的隊(duì)列數(shù);所述每個(gè)服務(wù)進(jìn)程分別綁定在一個(gè)CPU核上。
2.根據(jù)權(quán)利要求1所述的提升應(yīng)用交付通訊平臺(tái)多進(jìn)程程序性能的方法,其特征在于,每個(gè)通訊數(shù)據(jù)處理隊(duì)列綁定一個(gè)單獨(dú)的CPU核;每個(gè)進(jìn)程綁定一個(gè)單獨(dú)的CPU核。
3.根據(jù)權(quán)利要求1所述的提升應(yīng)用交付通訊平臺(tái)多進(jìn)程程序性能的方法,其特征在于,網(wǎng)卡接收到的數(shù)據(jù)包經(jīng)過源地址哈希算法后,哈希進(jìn)入某個(gè)通訊數(shù)據(jù)處理隊(duì)列,并交由綁定該通訊數(shù)據(jù)處理隊(duì)列的CPU核上的進(jìn)程來處理,數(shù)據(jù)處理完后經(jīng)由該CPU核上綁定的發(fā)送隊(duì)列返回給客戶端。
4.根據(jù)權(quán)利要求1所述的提升應(yīng)用交付通訊平臺(tái)多進(jìn)程程序性能的方法,其特征在于,客戶端發(fā)往應(yīng)用交付通訊平臺(tái)程序的數(shù)據(jù)包到達(dá)網(wǎng)卡的某隊(duì)列后,觸發(fā)網(wǎng)卡中斷,網(wǎng)卡中斷、數(shù)據(jù)包分發(fā)、協(xié)議棧和應(yīng)用程序綁定在同一個(gè)CPU核上。
5.根據(jù)權(quán)利要求1所述的提升應(yīng)用交付通訊平臺(tái)多進(jìn)程程序性能的方法,其特征在于,運(yùn)行在第N個(gè)CPU核上的應(yīng)用交付通訊平臺(tái)進(jìn)程使用網(wǎng)卡的第N個(gè)收隊(duì)列和第N個(gè)發(fā)送隊(duì)列收發(fā)數(shù)據(jù)包。
【文檔編號(hào)】G06F9/50GK104281493SQ201410510222
【公開日】2015年1月14日 申請(qǐng)日期:2014年9月28日 優(yōu)先權(quán)日:2014年9月28日
【發(fā)明者】高明, 張廣龍, 彭建章 申請(qǐng)人:般固(北京)科技股份有限公司