国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

多核網(wǎng)絡(luò)分組處理系統(tǒng)的數(shù)據(jù)分段卸載發(fā)送機(jī)制

2019-06-19 01:35呂高鋒戴幻堯
關(guān)鍵詞:描述符分片緩沖區(qū)

楊 惠,李 韜,呂高鋒,全 巍,戴幻堯

(1. 國(guó)防科技大學(xué) 計(jì)算機(jī)學(xué)院, 湖南 長(zhǎng)沙 410073; 2. 中國(guó)洛陽(yáng)電子裝備試驗(yàn)中心, 河南 洛陽(yáng) 471003)

隨著互聯(lián)網(wǎng)規(guī)模的不斷擴(kuò)大和新興網(wǎng)絡(luò)技術(shù)的應(yīng)用,不斷增長(zhǎng)的網(wǎng)絡(luò)流量對(duì)網(wǎng)絡(luò)核心設(shè)備的處理能力提出了更高要求。多核處理器計(jì)算性能高和軟件編程靈活性強(qiáng)的優(yōu)勢(shì),使得大量的軟件路由器和軟件交換機(jī)在多核平臺(tái)上被部署。具備高可編程性的通用多核處理器是網(wǎng)絡(luò)設(shè)備中廣泛采用的數(shù)據(jù)平面處理核心器件[1-5]。然而,傳統(tǒng)網(wǎng)卡只能支持最大分段長(zhǎng)度(Max Segment Size,MSS)大小的數(shù)據(jù)傳輸,當(dāng)請(qǐng)求大量數(shù)據(jù)時(shí),傳輸控制協(xié)議(Transmission Control Protocol,TCP)發(fā)送方必須將大塊數(shù)據(jù)拆分成MSS大小的數(shù)據(jù)塊,然后進(jìn)一步封裝為數(shù)據(jù)包形式,以便最終在網(wǎng)絡(luò)中進(jìn)行傳輸。由于多核處理器需要對(duì)每個(gè)分段進(jìn)行處理,降低了其處理效率。TCP分段卸載(TCP Segment Offload, TSO)技術(shù)的提出[5],利用網(wǎng)卡分割大數(shù)據(jù)包,降低中央處理器(Central Processing Unit,CPU)發(fā)送數(shù)據(jù)包的負(fù)載,從而支持大報(bào)文的直接發(fā)送,報(bào)文的切分與校驗(yàn)等分組深度處理全部交給硬件實(shí)現(xiàn)。然而,基于TSO技術(shù)的網(wǎng)絡(luò)分組深度處理需要軟硬件的協(xié)同工作,在軟硬件協(xié)同分組處理流程中,軟硬件的通信開(kāi)銷(xiāo)過(guò)大會(huì)嚴(yán)重影響系統(tǒng)進(jìn)行分組深度處理的性能。另外,報(bào)文的拆分校驗(yàn)等處理流程全部交由硬件實(shí)現(xiàn),硬件復(fù)雜度高。

本文通過(guò)分析基于多核的大報(bào)文發(fā)送流程中的軟硬件各個(gè)部分的開(kāi)銷(xiāo),消除和弱化大報(bào)文發(fā)送的性能瓶頸,基于軟硬件協(xié)同的輕量級(jí)分組輸入/輸出(Input/Output,I/O)技術(shù)和支持大報(bào)文發(fā)送的傳統(tǒng)TSO技術(shù),提出了一種面向高速分組轉(zhuǎn)發(fā)的數(shù)據(jù)分段卸載發(fā)送機(jī)制。

1 相關(guān)研究

TSO技術(shù)支持TCP發(fā)送方CPU直接將大塊數(shù)據(jù)(最大支持64 KB大小)交給網(wǎng)絡(luò)設(shè)備處理,由網(wǎng)絡(luò)設(shè)備進(jìn)行TCP段的分割,將一部分CPU的處理工作轉(zhuǎn)移到網(wǎng)卡,從而減少CPU必須處理的數(shù)據(jù)包數(shù)量,達(dá)到提高網(wǎng)絡(luò)處理性能的目的。支持TSO技術(shù)的網(wǎng)卡,需要支持TSO和分散-聚集(Scatter-Gather, SG)技術(shù),以及TCP校驗(yàn)和計(jì)算功能,由網(wǎng)卡驅(qū)動(dòng)或網(wǎng)卡硬件完成報(bào)文分段和TCP校驗(yàn)和計(jì)算功能,因而TSO技術(shù)需要網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)或者網(wǎng)絡(luò)設(shè)備提供報(bào)文分段功能,對(duì)于網(wǎng)絡(luò)設(shè)備的要求較高,軟硬復(fù)雜度高。更為通用的分段卸載(General Segment Offload, GSO)技術(shù)將大報(bào)文分段的時(shí)機(jī)推遲到將數(shù)據(jù)報(bào)文提交給網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)之前完成,并且支持TCPv4之外的其他協(xié)議類(lèi)型,如TCPv6、UDP和DCCP等。該技術(shù)需要網(wǎng)絡(luò)設(shè)備支持通用GSO和SG功能,性能提升效果比TSO技術(shù)低。

Scatter-Gather是一種與非連續(xù)物理地址傳輸?shù)膲K直接內(nèi)存存取(Direct Memory Access,DMA)[6]方式相對(duì)應(yīng)的DMA方式。它通過(guò)一個(gè)鏈表描述物理不連續(xù)的內(nèi)存地址,將鏈表首地址送往DMA控制器。DMA 控制器傳輸完一塊物理連續(xù)的數(shù)據(jù)后,不發(fā)中斷,根據(jù)鏈表記錄內(nèi)容傳輸下一塊物理不連續(xù)的數(shù)據(jù),直到鏈表中所有描述符內(nèi)容傳輸完成發(fā)起一次中斷。網(wǎng)絡(luò)設(shè)備支持該技術(shù)需要支持從多個(gè)不同區(qū)域獲取報(bào)文數(shù)據(jù)并且組裝在一起。

為了減少報(bào)文處理過(guò)程中軟硬件交互中斷的代價(jià),Packetshader采用大報(bào)文緩沖區(qū)的方式,靜態(tài)地預(yù)分配兩個(gè)大的緩沖區(qū)(skb控制信息緩沖區(qū)和分組數(shù)據(jù)緩沖區(qū)),通過(guò)連續(xù)存儲(chǔ)每個(gè)接收分組的skb控制信息和分組數(shù)據(jù),避免緩沖區(qū)申請(qǐng)/釋放以及描述符的轉(zhuǎn)換操作,有效降低分組I/O開(kāi)銷(xiāo)和訪(fǎng)存開(kāi)銷(xiāo)。[3]面向高速分組轉(zhuǎn)發(fā)提出的自描述緩沖區(qū) (Self-Described Buffer, SDB)管理機(jī)制[7-8],將描述符、skb控制信息以及分組數(shù)據(jù)連續(xù)存儲(chǔ)在一個(gè)緩沖區(qū)中,大大降低系統(tǒng)的緩沖區(qū)管理開(kāi)銷(xiāo),實(shí)現(xiàn)了無(wú)中斷的報(bào)文傳輸,但所有報(bào)文在發(fā)送給網(wǎng)絡(luò)設(shè)備之前,都要拷貝到SDB管理的固定緩沖區(qū)中,拷貝代價(jià)高,成為制約大報(bào)文發(fā)送性能的瓶頸。

2 支持輕量級(jí)I/O的軟硬件協(xié)同分組處理系統(tǒng)

2.1 系統(tǒng)描述

圖1 支持輕量級(jí)I/O的報(bào)文發(fā)送機(jī)制Fig.1 Packet sending mechanism with lightweight I/O

多核輕量級(jí)的分組I/O技術(shù),是一種低開(kāi)銷(xiāo)的分組處理軟硬件通信機(jī)制,通過(guò)緩沖區(qū)管理卸載技術(shù)等,實(shí)現(xiàn)分組的零拷貝、無(wú)中斷的下發(fā),從而降低分組在軟硬件的通信開(kāi)銷(xiāo)[9-10]。支持輕量級(jí)I/O的軟硬件協(xié)同分組處理系統(tǒng)[11]將包含控制信息的描述符和分組數(shù)據(jù)連續(xù)存儲(chǔ)在多核共享的地址連續(xù)的存儲(chǔ)緩沖區(qū)中。共享緩沖區(qū)不再采用核調(diào)度的軟件管理方法,而是卸載到專(zhuān)用網(wǎng)絡(luò)加速引擎上由硬件管理。在系統(tǒng)初始化時(shí),將共享緩沖區(qū)的描述符填入硬件管理的空閑描述符塊隊(duì)列中;當(dāng)數(shù)據(jù)報(bào)文到達(dá),根據(jù)空閑描述符隊(duì)列存儲(chǔ)的地址,分配一個(gè)空閑描述符,與數(shù)據(jù)報(bào)文組裝好通過(guò)外設(shè)組建高速互聯(lián)(Peripheral Component Interconnect Express, PCIE)送往共享緩沖區(qū)對(duì)應(yīng)的地址空間;而數(shù)據(jù)報(bào)文從共享緩沖區(qū)地址空間下發(fā)時(shí),如圖1所示,首先為要發(fā)送的報(bào)文獲取一個(gè)共享緩沖區(qū)區(qū)域,將報(bào)文內(nèi)容直接由skb->data指向的線(xiàn)性緩沖區(qū)拷貝到共享緩沖區(qū)中,完成拷貝后,將skb釋放,構(gòu)造一個(gè)發(fā)送描述符控制塊,通知專(zhuān)用網(wǎng)絡(luò)加速引擎有新的報(bào)文需要發(fā)送,專(zhuān)用網(wǎng)絡(luò)加速引擎根據(jù)發(fā)送描述符控制塊指示的報(bào)文DMA地址,讀取共享緩沖區(qū)中的報(bào)文內(nèi)容,完成報(bào)文發(fā)送。專(zhuān)用網(wǎng)絡(luò)加速引擎硬件回收對(duì)應(yīng)的描述符,并重新進(jìn)入空閑描述符隊(duì)列,等待新的數(shù)據(jù)報(bào)文使用。該共享緩沖區(qū)以塊為單位組織、申請(qǐng)和釋放,解放了核對(duì)共享緩沖區(qū)地址的管理。描述符和報(bào)文塊以單向鏈表的形式,在共享緩沖區(qū)內(nèi)組織。因此,系統(tǒng)在處理分組時(shí),只要空閑描述符隊(duì)列具有空閑描述符,數(shù)據(jù)報(bào)文即可上傳至共享緩沖區(qū),等待CPU核處理,無(wú)須中斷響應(yīng),也無(wú)須多次訪(fǎng)存緩沖區(qū)。

2.2 瓶頸分析

為對(duì)報(bào)文發(fā)送開(kāi)銷(xiāo)進(jìn)行分析,做出如表1所示的假設(shè)。

表1 發(fā)送分段開(kāi)銷(xiāo)假設(shè)

標(biāo)準(zhǔn)網(wǎng)卡不支持大報(bào)文發(fā)送流程如圖2所示,skb指向應(yīng)用需要傳輸?shù)臄?shù)據(jù)及其報(bào)文頭內(nèi)容,使用線(xiàn)性緩沖區(qū)存放報(bào)文內(nèi)容,構(gòu)造報(bào)文時(shí),skb指向的報(bào)文長(zhǎng)度最大僅為1514 B。網(wǎng)卡硬件根據(jù)描述符指向的地址獲取報(bào)文內(nèi)容并將報(bào)文發(fā)送。標(biāo)準(zhǔn)網(wǎng)卡普通發(fā)送n個(gè)1.5 KB報(bào)文的報(bào)文處理開(kāi)銷(xiāo)可表示為:n·Na+n·NS+n·ND+n·NDMA-R。

圖3為標(biāo)準(zhǔn)網(wǎng)卡支持大報(bào)文發(fā)送TSO機(jī)制流程圖,大報(bào)文被發(fā)送到網(wǎng)卡硬件才進(jìn)行報(bào)文的分段。發(fā)送n·1.5 KB報(bào)文處理開(kāi)銷(xiāo)可表示為:n·Na+NS+ND+n2·NDMA-R+n·NHF。

圖2 標(biāo)準(zhǔn)網(wǎng)卡不支持大報(bào)文發(fā)送流程圖Fig.2 Sending flow on standard network card (large packet sending is not supported)

圖3 標(biāo)準(zhǔn)網(wǎng)卡支持大報(bào)文發(fā)送TSO機(jī)制流程圖Fig.3 Sending flow on standard network card (TSO)

圖4 支持輕量級(jí)分組I/O的網(wǎng)卡大報(bào)文發(fā)送流程圖Fig.4 Diagram of sending flow for based on the multi-core packet processing system with lightweight I/O

圖4為支持輕量級(jí)分組I/O的網(wǎng)卡實(shí)現(xiàn)大報(bào)文發(fā)送流程圖,大報(bào)文被發(fā)送到網(wǎng)卡驅(qū)動(dòng)軟件進(jìn)行處理后,完成報(bào)文的分段,為每個(gè)分段添加報(bào)文頭部、重新計(jì)算每個(gè)分段的校驗(yàn)和等功能,并拷貝到指定的多核共享緩沖區(qū)中,也就是skb指向報(bào)文的內(nèi)容需分段拷貝至共享緩沖區(qū)后才能發(fā)送出去,無(wú)須硬件支持報(bào)文拆分組裝功能,減小了大報(bào)文在協(xié)議棧處理的開(kāi)銷(xiāo),但驅(qū)動(dòng)層存在報(bào)文拷貝開(kāi)銷(xiāo),且報(bào)文分段效率相較于硬件分段較低。發(fā)送n·1.5 KB路徑報(bào)文處理開(kāi)銷(xiāo)約表示為:n·Na+NS+n·ND+n·Nc+n·NDF+n·NDMA-R。

圖5為提出的數(shù)據(jù)分段卸載開(kāi)銷(xiāo)示意圖,大報(bào)文被發(fā)送到網(wǎng)卡驅(qū)動(dòng)軟件并被處理后,完成報(bào)文的分段,省去了報(bào)文拷貝到指定軟件緩沖區(qū)中的開(kāi)銷(xiāo)。發(fā)送n·1.5 KB報(bào)文發(fā)送路徑報(bào)文處理開(kāi)銷(xiāo)約表示為:n·Na+NS+ND+n·NDF+n·NDMA-R。

圖5 數(shù)據(jù)分段卸載開(kāi)銷(xiāo)Fig.5 Cost for packet segment offloading

3 數(shù)據(jù)分段卸載發(fā)送機(jī)制

3.1 驅(qū)動(dòng)分段及分段報(bào)文存儲(chǔ)機(jī)制

為了降低硬件分段的處理和緩沖區(qū)報(bào)文拷貝開(kāi)銷(xiāo),將大報(bào)文在驅(qū)動(dòng)層完成切分,只拷貝報(bào)文頭到共享緩沖區(qū),拷貝的同時(shí)驅(qū)動(dòng)完成報(bào)文頭內(nèi)容的更新,報(bào)文體切分后依然存放在原內(nèi)存空間。相較于網(wǎng)卡支持的TSO機(jī)制,硬件切分報(bào)文頭,更新報(bào)文頭內(nèi)容的工作卸載到驅(qū)動(dòng)實(shí)現(xiàn),同時(shí)降低了發(fā)送拷貝代價(jià)。于是驅(qū)動(dòng)拆分報(bào)文后,分段報(bào)文的存儲(chǔ)方式為,分段報(bào)文頭存儲(chǔ)在共享緩沖區(qū)中,分段報(bào)文體依然存放在線(xiàn)性緩沖區(qū)和頁(yè)緩沖區(qū)中。

圖6為數(shù)據(jù)分段卸載方法中驅(qū)動(dòng)分段及分段報(bào)文存儲(chǔ)原理圖。解析報(bào)文頭,對(duì)于TCP報(bào)文,確認(rèn)報(bào)文分段數(shù)目以及是否需要進(jìn)行報(bào)文分片。對(duì)于需要分片的報(bào)文,根據(jù)需要分片的數(shù)目,將一個(gè)大報(bào)文的報(bào)文頭拷貝多份至共享緩沖區(qū)中,并同時(shí)更新報(bào)文頭,形成切分后的報(bào)文頭1、2、3、4。分段后的小報(bào)文,第一段的報(bào)文頭存儲(chǔ)在共享緩沖區(qū),第一段的報(bào)文體依舊存儲(chǔ)在線(xiàn)性緩沖區(qū),第二段的報(bào)文頭存儲(chǔ)在共享緩沖區(qū),第二段的報(bào)文體一部分存儲(chǔ)在線(xiàn)性緩沖區(qū),其余部分存儲(chǔ)在頁(yè)緩沖區(qū)中。為所有的分段報(bào)文的頭和體構(gòu)造一個(gè)發(fā)送描述符鏈,硬件根據(jù)發(fā)送描述符鏈獲取每個(gè)報(bào)文分段或所有分片的每個(gè)報(bào)文分段所在位置,并獲取每個(gè)報(bào)文分段或所有分片的每個(gè)分段報(bào)文內(nèi)容。將多個(gè)報(bào)文分段拼裝成一個(gè)報(bào)文或多個(gè)分片報(bào)文,完成TCP校驗(yàn)和計(jì)算以及循環(huán)冗余校驗(yàn)(Cyclic Redundancy Check,CRC)和計(jì)算后,完成報(bào)文發(fā)送。

圖6 驅(qū)動(dòng)分段及分段報(bào)文存儲(chǔ)原理圖Fig.6 Drive segmentation and storage principle diagram

3.2 數(shù)據(jù)分段卸載發(fā)送方法

數(shù)據(jù)分段卸載發(fā)送方法流程如圖7所示。

圖7 數(shù)據(jù)分段卸載發(fā)送方法流程圖Fig.7 Sending flow for data segment offloading and sending mechanism

步驟1:獲取skb線(xiàn)性緩沖區(qū)和頁(yè)緩沖區(qū)數(shù)目,解析報(bào)文頭,對(duì)于TCP報(bào)文,確認(rèn)報(bào)文分段數(shù)目以及是否需要進(jìn)行報(bào)文分片(skb->len>1514 B);

步驟2:對(duì)于需要分片的報(bào)文,根據(jù)需要分片的數(shù)目,將報(bào)文頭拷貝至共享緩沖區(qū)的多個(gè)分區(qū)中,完成每個(gè)分片報(bào)文頭內(nèi)容的更新,無(wú)須分片則跳過(guò)此步驟;

步驟3:根據(jù)報(bào)文分段,為每個(gè)分段完成DMA映射;

步驟4:為每個(gè)分片的每個(gè)報(bào)文分段,包括專(zhuān)用緩沖區(qū)、線(xiàn)性緩沖區(qū)、頁(yè)緩沖區(qū)分別獲取一個(gè)發(fā)送描述符,填充相關(guān)字段,構(gòu)造描述符鏈表。在獲取描述符時(shí)需獲得鎖,確保不會(huì)有多個(gè)進(jìn)程獲得同一個(gè)描述符;

步驟5:將skb緩存到skb緩沖區(qū)環(huán),并更新發(fā)送描述符緩沖區(qū)環(huán)的寫(xiě)write_p指針;

步驟6:構(gòu)造一個(gè)發(fā)送描述符控制塊,通知硬件有新的報(bào)文需要發(fā)送;

步驟7:硬件根據(jù)發(fā)送描述符控制塊的內(nèi)容DMA讀發(fā)送描述符鏈,獲取所有分片中每個(gè)報(bào)文分段所在的位置;

步驟8:根據(jù)描述符中指示報(bào)文分段地址,DMA讀取所有分片的每個(gè)分段報(bào)文內(nèi)容。將屬于同一個(gè)分片的多個(gè)報(bào)文分段拼裝成一個(gè)分片報(bào)文;

步驟9:網(wǎng)卡硬件計(jì)算TCP校驗(yàn)以及CRC,完成報(bào)文發(fā)送后,向發(fā)送描述符進(jìn)行回寫(xiě),通知軟件報(bào)文發(fā)送完成;

步驟10:驅(qū)動(dòng)處理中斷或軟中斷,檢查發(fā)送描述符的回寫(xiě)狀態(tài),若發(fā)送完成則將skb從skb緩沖區(qū)環(huán)出隊(duì),完成skb的釋放,并更新發(fā)送描述符緩沖區(qū)環(huán)的read_p指針。

上述步驟4中,為每個(gè)分片的每個(gè)報(bào)文分段,包括專(zhuān)用緩沖區(qū)、線(xiàn)性緩沖區(qū)、頁(yè)緩沖區(qū)分別獲取的發(fā)送描述符所構(gòu)造的描述符鏈表,以支持鏈?zhǔn)紻MA,允許碎片化的存儲(chǔ)中的數(shù)據(jù)一次DMA完成,描述符鏈表中的每個(gè)發(fā)送描述符,都包含了64位存儲(chǔ)地址信息、長(zhǎng)度信息等。

上述步驟6中,構(gòu)造的描述符控制塊描述的信息為描述符鏈表存儲(chǔ)的地址及長(zhǎng)度信息,描述符控制塊由驅(qū)動(dòng)構(gòu)造好之后,以寫(xiě)寄存器的方式通知網(wǎng)卡硬件,以實(shí)現(xiàn)將整個(gè)描述符鏈表讀取到硬件的功能。

4 性能評(píng)估

為有效驗(yàn)證大報(bào)文數(shù)據(jù)分段卸載發(fā)送功能和性能,設(shè)計(jì)并實(shí)現(xiàn)了原型系統(tǒng)。原型系統(tǒng)基于國(guó)防科技大學(xué)計(jì)算機(jī)學(xué)院自主研發(fā)的高性能通用64位CPU FT-1500A[12]與自主研制的網(wǎng)絡(luò)專(zhuān)用協(xié)加速引擎網(wǎng)絡(luò)處理引擎(Network Processing Engine,NPE)[7]構(gòu)建。其中網(wǎng)絡(luò)專(zhuān)用協(xié)加速引擎在現(xiàn)場(chǎng)可編程門(mén)陣列(Field-Programmable Gate Array,F(xiàn)PGA)上實(shí)現(xiàn),F(xiàn)PGA器件采用Stratix V 5SGXMA3K3F40C2X。

本實(shí)驗(yàn)的軟件測(cè)試環(huán)境包括:ubuntu 14.04操作系統(tǒng)、NPDK 2.0版本軟件開(kāi)發(fā)環(huán)境提供的NPE網(wǎng)口驅(qū)動(dòng)[13-14]、用戶(hù)配置程序。

NPDK環(huán)境將所有軟硬件的初始化函數(shù)封裝在環(huán)境庫(kù)內(nèi),調(diào)用初始化函數(shù)create_net_device(dma_cnt,disp_mode),dma_cnt表示硬件啟動(dòng)多少個(gè)DMA通道,與軟件處理線(xiàn)程數(shù)對(duì)應(yīng),每個(gè)DMA通道對(duì)應(yīng)一個(gè)處理線(xiàn)程,綁定在一個(gè)指定的CPU核上運(yùn)行;disp_mode指定報(bào)文分派模式,循環(huán)分派或端口綁定分派。在不超過(guò)硬件最大支持DMA通道數(shù)情況下,通過(guò)重復(fù)調(diào)用pthread_create(&p_t,&attr,start_npe_thread,tp)函數(shù),選擇自由創(chuàng)建多個(gè)處理線(xiàn)程,創(chuàng)建線(xiàn)程數(shù)與dma_cnt數(shù)相同,start_npe_thread即為業(yè)務(wù)處理線(xiàn)程。線(xiàn)程創(chuàng)建后,顯示指定線(xiàn)程綁定到哪個(gè)CPU核上運(yùn)行,線(xiàn)程的創(chuàng)建與CPU親和設(shè)置都使用標(biāo)準(zhǔn)的libpthread庫(kù)函數(shù)。線(xiàn)程輪詢(xún)到報(bào)文后,立即調(diào)用報(bào)文發(fā)送函數(shù)進(jìn)行發(fā)送,完成一個(gè)報(bào)文的轉(zhuǎn)發(fā)操作。發(fā)送函數(shù)send_pkt(*pkt, outport, pkt_len),pkt表示報(bào)文指針,outport表示輸出端口號(hào),pkt_len表示發(fā)送長(zhǎng)度。

為支持提出的數(shù)據(jù)分段卸載發(fā)送機(jī)制,對(duì)軟件做出的修改有:增加驅(qū)動(dòng)對(duì)大報(bào)文的各個(gè)分段進(jìn)行DMA映射功能;增加對(duì)TSO功能的支持(netdev->features屬性修改);增加驅(qū)動(dòng)報(bào)文分段功能;驅(qū)動(dòng)下發(fā)描述符由單個(gè)變?yōu)槎鄠€(gè),修改skb軟中斷,讀取發(fā)送狀態(tài)寄存器,修改skb回收機(jī)制。對(duì)硬件做出的修改有:增加skb發(fā)送狀態(tài)計(jì)數(shù)器寄存器;支持一次處理多個(gè)描述符,同一報(bào)文內(nèi)容可能需要從不同的區(qū)域獲取,將這幾個(gè)區(qū)域的報(bào)文內(nèi)容獲取后拼裝,完成TCP校驗(yàn)、計(jì)算和更新。

數(shù)據(jù)發(fā)送性能測(cè)試場(chǎng)景如圖8所示。將由國(guó)產(chǎn)CPU、高性能FPGA和存儲(chǔ)陣列構(gòu)建的支持?jǐn)?shù)據(jù)分段卸載發(fā)送機(jī)制的原型系統(tǒng),通過(guò)光纖和千兆網(wǎng)線(xiàn)連接服務(wù)器的萬(wàn)兆網(wǎng)卡和千兆網(wǎng)卡接口。服務(wù)器萬(wàn)兆網(wǎng)卡接口和原型系統(tǒng)配置成同一網(wǎng)段,由串口登錄到存儲(chǔ)板CPU。

圖8 數(shù)據(jù)發(fā)送性能測(cè)試場(chǎng)景Fig.8 Test scenario for data transmission performance

表2為支持?jǐn)?shù)據(jù)分段卸載發(fā)送機(jī)制前后性能對(duì)比。由表2實(shí)驗(yàn)數(shù)據(jù)可以看出,當(dāng)配置性能測(cè)試參數(shù)為單線(xiàn)程時(shí),不管是iscsi的讀性能還是iperf的發(fā)送性能,在系統(tǒng)支持大報(bào)文的數(shù)據(jù)分段卸載發(fā)送機(jī)制后,降低了協(xié)議棧分段、驅(qū)動(dòng)拷貝等開(kāi)銷(xiāo),性能有較大的提升。

表2 支持?jǐn)?shù)據(jù)分段卸載發(fā)送機(jī)制前后性能對(duì)比Tab.2 Performance comparison before and after supporting data segmentation offloading and sending mechanism

受限于國(guó)產(chǎn)高性能CPU面向通用計(jì)算,并沒(méi)有針對(duì)網(wǎng)絡(luò)處理應(yīng)用的性能瓶頸,單線(xiàn)程單隊(duì)列單分區(qū)的iscsi讀性能并沒(méi)有達(dá)到線(xiàn)速。因此,建立iscsi多個(gè)鏈接,測(cè)試在CPU不構(gòu)成性能瓶頸的前提下,發(fā)送性能是否達(dá)到線(xiàn)速,如圖9所示。

圖9 自主原型系統(tǒng)與商用網(wǎng)卡系統(tǒng)iscsi讀性能對(duì)比Fig.9 The iscsi read performance comparison of domestic prototype system and business-used network

使用fdisk /dev/dfa命令,將SSD固態(tài)盤(pán)依次分為1~5個(gè)區(qū)進(jìn)行測(cè)試,在/etc/iet/ietd.conf文件中為每個(gè)分區(qū)增加一個(gè)iscsi節(jié)點(diǎn)設(shè)置。每次分區(qū)完之后使用/etc/init.d/iscsi-target start命令,啟動(dòng)iscsi-target服務(wù),建立基于多個(gè)分區(qū)的多個(gè)iscsi鏈接。在服務(wù)器上與存儲(chǔ)板建立1個(gè)或多個(gè)iscsi連接后,依次測(cè)試1~5個(gè)分區(qū)時(shí)iscsi讀性能,即數(shù)據(jù)發(fā)送性能,使用fio測(cè)試工具統(tǒng)計(jì)測(cè)試iscsi性能。

對(duì)比打開(kāi)TSO功能的82599商用網(wǎng)卡[13]加Intel處理器構(gòu)建的系統(tǒng)[15],當(dāng)iscsi建立鏈接為5個(gè)時(shí),支持?jǐn)?shù)據(jù)分段卸載發(fā)送機(jī)制的自主原型系統(tǒng)與商用網(wǎng)卡構(gòu)建系統(tǒng)均達(dá)到了線(xiàn)速水平。

5 結(jié)論

實(shí)驗(yàn)結(jié)果顯示,支持?jǐn)?shù)據(jù)分段卸載發(fā)送機(jī)制的自主原型系統(tǒng),iscsi讀性能和iperf發(fā)送性能均有較大提升,相較于商用網(wǎng)卡構(gòu)建系統(tǒng),均達(dá)到了線(xiàn)速水平。數(shù)據(jù)分段卸載發(fā)送機(jī)制支持輕量級(jí)分組I/O,軟硬件復(fù)雜度較低,能夠更好地支撐基于通用多核多線(xiàn)程的高速分組轉(zhuǎn)發(fā)。

猜你喜歡
描述符分片緩沖區(qū)
上下分片與詞的時(shí)空佈局
基于結(jié)構(gòu)信息的異源遙感圖像局部特征描述符研究
分片光滑邊值問(wèn)題的再生核方法
CDN存量MP4視頻播放優(yōu)化方法
基于AKAZE的BOLD掩碼描述符的匹配算法的研究
基于深度學(xué)習(xí)的局部描述符
基于模糊二分查找的幀分片算法設(shè)計(jì)與實(shí)現(xiàn)
基于網(wǎng)絡(luò)聚類(lèi)與自適應(yīng)概率的數(shù)據(jù)庫(kù)緩沖區(qū)替換*
特征聯(lián)合和旋轉(zhuǎn)不變空間分割聯(lián)合的局部圖像描述符
一類(lèi)裝配支線(xiàn)緩沖區(qū)配置的兩階段求解方法研究
冷水江市| 丹阳市| 北辰区| 昔阳县| 永寿县| 义马市| 和静县| 镇江市| 肥城市| 中江县| 博湖县| 高雄市| 漠河县| 宿松县| 瑞金市| 广安市| 清新县| 涟源市| 资兴市| 台山市| 永城市| 泰和县| 克山县| 长阳| 钦州市| 宿松县| 遵化市| 班戈县| 鲁甸县| 衡南县| 页游| 象州县| 洮南市| 铜梁县| 台南县| 兰西县| 昭平县| 康马县| 白沙| 同仁县| 富宁县|