(計(jì)算機(jī)軟件與理論專業(yè)論文)一種基于實(shí)時(shí)環(huán)境的零拷貝通信技術(shù)的研究.pdf_第1頁
(計(jì)算機(jī)軟件與理論專業(yè)論文)一種基于實(shí)時(shí)環(huán)境的零拷貝通信技術(shù)的研究.pdf_第2頁
(計(jì)算機(jī)軟件與理論專業(yè)論文)一種基于實(shí)時(shí)環(huán)境的零拷貝通信技術(shù)的研究.pdf_第3頁
(計(jì)算機(jī)軟件與理論專業(yè)論文)一種基于實(shí)時(shí)環(huán)境的零拷貝通信技術(shù)的研究.pdf_第4頁
(計(jì)算機(jī)軟件與理論專業(yè)論文)一種基于實(shí)時(shí)環(huán)境的零拷貝通信技術(shù)的研究.pdf_第5頁
已閱讀5頁,還剩49頁未讀, 繼續(xù)免費(fèi)閱讀

(計(jì)算機(jī)軟件與理論專業(yè)論文)一種基于實(shí)時(shí)環(huán)境的零拷貝通信技術(shù)的研究.pdf.pdf 免費(fèi)下載

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

i 摘摘 要要 為了提高網(wǎng)絡(luò)通信性能,需要減小通信中的開銷。零拷貝技術(shù)能夠減小通信過 程中數(shù)據(jù)拷貝帶來的開銷,是高性能通信的重要研究領(lǐng)域。國內(nèi)外在這個(gè)領(lǐng)域做了 大量的研究和技術(shù)開發(fā)。現(xiàn)有的零拷貝通信協(xié)議不能滿足實(shí)時(shí)通信的要求。因此, 研究和開發(fā)基于實(shí)時(shí)環(huán)境的零拷貝協(xié)議具有理論意義和實(shí)用價(jià)值。 實(shí)時(shí)環(huán)境下的零拷貝 rtzcp 是基于集群環(huán)境的實(shí)時(shí)通信技術(shù),適用于 linux 環(huán) 境,支持 rtai 進(jìn)行硬實(shí)時(shí)任務(wù)調(diào)度。 rtzcp 通過如下方式實(shí)現(xiàn)網(wǎng)絡(luò)通信的零拷貝,其工作方式是:在發(fā)送端采用直 接映射方式發(fā)送數(shù)據(jù);在接收端采用直接映射方式接收單片包數(shù)據(jù);采用單拷貝的 方式接收分片包數(shù)據(jù)。rtzcp 提供了網(wǎng)絡(luò)通信編程和通信實(shí)時(shí)調(diào)度的接口。rtzcp 主要采用了如下技術(shù):新的基于 rtskb 網(wǎng)絡(luò)緩沖結(jié)構(gòu)的網(wǎng)絡(luò)緩沖管理機(jī)制、新定義的 rtsokcet 接口、發(fā)送分片數(shù)據(jù)包的重映射方式、在 rtmac 層增加的對于非實(shí)時(shí)通信 進(jìn)行流量控制的平滑傳輸層、新的接收端分片包收集方式。 測試結(jié)果說明 rtzcp 保證了通信的實(shí)時(shí)性,很大的提高單片數(shù)據(jù)包的發(fā)送效率, 對于分片包的通信效率也有一定的提高。測試還說明,rtzcp 在非實(shí)時(shí)通信和實(shí)時(shí) 通信同時(shí)存在時(shí),能夠保證實(shí)時(shí)通信的性能穩(wěn)定。 關(guān)鍵字關(guān)鍵字:零拷貝,硬實(shí)時(shí)通信,軟實(shí)時(shí)通信,遠(yuǎn)端內(nèi)存訪問,平滑層處理技術(shù) ii abstract to improve the efficiency of network commucations, the cost of communications must be reduced. the zero-copy technology can reduce the cost of data copying in communicate process. it is an important researching area of high performance communications. there is a lot of research and technology development about the area in the world. the presented zero-copy communications protocols can not satisfy the need of real time communications. so, it has academic meaning and applied value to research and develope zero-copy communications protocol in real time environment. the zero-copy communications in real time environment-rtzcp is a lightweight protocol technology for cluster system. it is fit for the linux environment; sustain the hard real time control scheduling provided by rtai. rtzcp turns the zero-copy communications into reality by this way: using direct mapping way to send data in the sending end; using direct mapping way to receive the non- fragmentated data or single-copy way to receive the fragmentated data in the receiving end. rtzcp provides the interface for network communications and communications real time scheduling. rtzcp has these technologies: a new network cache manage system base on the rtskb data structure, new rtsocket interface, repeated mapping way used to send the fragmentated data, the traffic smoother layer added on the rtmac layer to control the flux, new fragmentated data collecting way in the receiving end. the test result has shown that rtzcp can protect the real time quality of communications, has greatly improved the efficiency of transferring the non-fragmentated data packet, has some improved the efficiency of transferring the fragmentated data. the test result also shows that rtzcp can assure the steady real time communications efficiency when there is non-real time communications. key words: zero-copy, hard real time communications, soft real time communications, rma (remote memory access), traffic smoothing technique 獨(dú)創(chuàng)性聲明獨(dú)創(chuàng)性聲明 本人聲明所呈交的學(xué)位論文是我個(gè)人在導(dǎo)師指導(dǎo)下進(jìn)行的研究工作及取得的研 究成果。盡我所知,除文中已經(jīng)標(biāo)明引用的內(nèi)容外,本論文不包含任何其他個(gè)人或 集體已經(jīng)發(fā)表或撰寫過的研究成果。對本文的研究做出貢獻(xiàn)的個(gè)人和集體,均已在 文中以明確方式標(biāo)明。本人完全意識到本聲明的法律結(jié)果由本人承擔(dān)。 學(xué)位論文作者簽名: 日期: 年 月 日 學(xué)位論文版權(quán)使用授權(quán)書學(xué)位論文版權(quán)使用授權(quán)書 本學(xué)位論文作者完全了解學(xué)校有關(guān)保留、使用學(xué)位論文的規(guī)定,即:學(xué)校有權(quán) 保留并向國家有關(guān)部門或機(jī)構(gòu)送交論文的復(fù)印件和電子版,允許論文被查閱和借閱。 本人授權(quán)華中科技大學(xué)可以將本學(xué)位論文的全部或部分內(nèi)容編入有關(guān)數(shù)據(jù)庫進(jìn)行檢 索,可以采用影印、縮印或掃描等復(fù)制手段保存和匯編本學(xué)位論文。 保密 ,在_年解密后適用本授權(quán)書。 本論文屬于 不保密。 (請?jiān)谝陨戏娇騼?nèi)打“”) 學(xué)位論文作者簽名: 指導(dǎo)教師簽名: 日期: 年 月 日 日期: 年 月 日 1 1 緒論緒論 本章首先簡述零拷貝技術(shù)的研究現(xiàn)狀和存在的問題,接著從輕量級通信協(xié)議, 實(shí)時(shí)通信協(xié)議,零拷貝通信協(xié)議三個(gè)方面介紹本文研究內(nèi)容的國內(nèi)外現(xiàn)狀,然后介 紹項(xiàng)目對系統(tǒng)的要求,最后說明本文的整體結(jié)構(gòu)。 1.1 問題提出 現(xiàn)在很多與網(wǎng)絡(luò)有關(guān)的應(yīng)用,比如多媒體協(xié)作、視頻點(diǎn)播、實(shí)時(shí)數(shù)字信號傳輸 處理和一些科學(xué)應(yīng)用,需要進(jìn)行大量的基于高速網(wǎng)絡(luò)的消息傳遞?,F(xiàn)在以太網(wǎng)能夠 提供千兆以及千兆以上的網(wǎng)絡(luò)傳輸速度,其它硬件設(shè)備如 cpu 處理器、內(nèi)存總線帶 寬都已經(jīng)達(dá)到了千兆以上的處理速度,目前的常用的 pci 總線(或者 i/o 總線)都 可以達(dá)到千兆以上的處理速度(如 32 位 33mhz 的 pci 總線可以提供 133mb 的處理 帶寬) 。傳統(tǒng)的網(wǎng)絡(luò)通信協(xié)議,如 tcp/ip 協(xié)議,逐漸成為了網(wǎng)絡(luò)通信的主要瓶頸之 一。它的軟件開銷包括消息發(fā)送接收過程中的系統(tǒng)調(diào)用、中斷處理、上下文交換、 用戶空間與內(nèi)核空間、內(nèi)核空間與網(wǎng)絡(luò)設(shè)備之間以及不同網(wǎng)絡(luò)協(xié)議層之間的數(shù)據(jù)復(fù) 制等,極大的影響了通信性能。 提高通信性能的方法之一是減小數(shù)據(jù)在用戶空間與內(nèi)核空間、內(nèi)核空間與網(wǎng)絡(luò) 設(shè)備以及不同網(wǎng)絡(luò)協(xié)議層之間復(fù)制所消耗的時(shí)間。很多研究希望能夠減少或者甚至 消除通信過程中的數(shù)據(jù)拷貝,實(shí)現(xiàn)在應(yīng)用層與網(wǎng)卡設(shè)備之間傳遞過程中沒有拷貝或 則拷貝過程不需要 cpu 參與的“零拷貝”通信。這就需要消除用戶空間與內(nèi)核空間 的數(shù)據(jù)拷貝操作,對于沒有 dma(直接內(nèi)存存取,direct memory access)功能的 網(wǎng)絡(luò)適配器,還要考慮消除內(nèi)核空間與網(wǎng)卡設(shè)備之間的傳輸拷貝。事實(shí)上完全的“零 拷貝”是不可能的,即使是拷貝次數(shù)最少的 rdma1方式也沒有消除應(yīng)用空間與網(wǎng) 卡緩沖之間的數(shù)據(jù)拷貝,只是拷貝由網(wǎng)卡上的 dma 完成,不需要主機(jī) cpu 參與, 但是 cpu 還是要參與一些相關(guān)的初始化,內(nèi)存管理等工作。因此,在具備 dma 功 能的網(wǎng)卡中,零拷貝通信的實(shí)現(xiàn)主要是如何消除用戶空間與內(nèi)核空間的數(shù)據(jù)拷貝。 在沒有 dma 功能的網(wǎng)卡上實(shí)現(xiàn)零拷貝通信更加困難,因?yàn)閮?nèi)核空間與網(wǎng)卡之間的 數(shù)據(jù)拷貝只能通過 cpu 才能實(shí)現(xiàn)。 如通過可編程 i/o 的方式 (pio, programmable i/o) 實(shí)現(xiàn)的零拷貝通信雖然消除了用戶空間與內(nèi)核空間的數(shù)據(jù)拷貝,但內(nèi)核空間與網(wǎng)絡(luò) 2 設(shè)備緩沖之間的數(shù)據(jù)拷貝還是需要 cpu 的參與。 綜上所述,零拷貝技術(shù)的基本思想是通過減少數(shù)據(jù)傳輸過程中的內(nèi)存拷貝次數(shù), 在應(yīng)用程序和外設(shè)接口間提供更快的數(shù)據(jù)通路,從而提高數(shù)據(jù)吞吐率,降低通信和 減輕 cpu 負(fù)載2。 目前,國內(nèi)外在這個(gè)領(lǐng)域做了大量的研究和技術(shù)開發(fā),但是現(xiàn)有的零拷貝通信 協(xié)議都是針對某個(gè)具體應(yīng)用而設(shè)計(jì)開發(fā)的,通用性較差,并且都不適合運(yùn)用于實(shí)時(shí) 環(huán)境。 1.2 國內(nèi)外研究現(xiàn)狀國內(nèi)外研究現(xiàn)狀 1.2.1 輕量級通信協(xié)議 輕量級通信協(xié)議是集群環(huán)境下通信的重要技術(shù)之一。輕量級通信協(xié)議的實(shí)現(xiàn)方 式主要分為以下兩種:優(yōu)化傳統(tǒng)的網(wǎng)絡(luò)協(xié)議;設(shè)計(jì)一種新的網(wǎng)絡(luò)協(xié)議來替代傳統(tǒng)的 網(wǎng)絡(luò)協(xié)議。 優(yōu)化傳統(tǒng)的網(wǎng)絡(luò)協(xié)議的主要方式有:采用零拷貝通信技術(shù),例如 gamma 3, speculative defragmentation 4,emp 5,solaris 6,afterburner 7 等;提高網(wǎng)卡中斷 處理的效率或減小中斷處理的開銷,如設(shè)計(jì)低消耗的中斷處理機(jī)制,或者在某些環(huán) 境中使用其他的方案如輪詢技術(shù)(polling)等代替中斷處理機(jī)制;簡化通信流程以 及優(yōu)化通信過程中的操作,如減少數(shù)據(jù)傳輸過程中的校驗(yàn)和計(jì)算、使用更合理的通 信層次結(jié)構(gòu)以避免過多的消息緩存、簡化或者設(shè)計(jì)更高效率的流量控制與容錯(cuò)機(jī)制 算法、優(yōu)化路由算法等等。 設(shè)計(jì)全新的通信協(xié)議來替代或者兼容傳統(tǒng)通信協(xié)議是近年來研究領(lǐng)域的重點(diǎn)之 一。這種方案又分化為以下兩個(gè)方向: (1) 設(shè)計(jì)需要操作系統(tǒng)支持的通信協(xié)議,也就是說這種通信協(xié)議與傳統(tǒng)的通信協(xié) 議一樣,需要 cpu 和操作系統(tǒng)的參與才能進(jìn)行通信。其代表是 clic8,emp5, gamma3等。這些協(xié)議通常自行開發(fā)一整套自定義的應(yīng)用編程接口(api) ,通信流 程同普通的通信協(xié)議一樣,只不過層次結(jié)構(gòu)更加簡單,數(shù)據(jù)處理過程更加簡化。一 般情況下,這些協(xié)議能夠充分地利用網(wǎng)絡(luò)硬件提供的物理帶寬,但明顯的缺點(diǎn)是應(yīng) 用編程變得困難,由于沒有標(biāo)準(zhǔn),各個(gè)系統(tǒng)自成體系,同時(shí)也很難使用基于傳統(tǒng)通 信協(xié)議如基于 socket 的通信資源。 (2) 設(shè)計(jì)基于專門網(wǎng)絡(luò)硬件的用戶級通信協(xié)議。用戶級通信的主要目的是讓用戶 3 可以直接與網(wǎng)絡(luò)設(shè)備之間實(shí)現(xiàn)數(shù)據(jù)傳遞而不需要操作系統(tǒng)的參與,目前比較具有代 表性的產(chǎn)品是 via9,u-net10,am11,fm 12,vmmc13,pm14,bip15等等。國 內(nèi)也有一些基于用戶級通信協(xié)議的研究,如清華大學(xué)基于 via 的 myvia16協(xié)議以 及半用戶級通信方式17(semi-user level communication)等等。這些協(xié)議的缺點(diǎn)是它 們一般需要依靠具有特殊功能的網(wǎng)卡設(shè)備,如 myrinet 公司生產(chǎn)的網(wǎng)絡(luò)適配器設(shè)備, 要求網(wǎng)卡帶有處理能力很強(qiáng)的處理器和較大的網(wǎng)卡內(nèi)存空間并且能夠支持對網(wǎng)卡設(shè) 備的固件部分(firmware)進(jìn)行編程控制。而普通的商業(yè)用途千兆以太網(wǎng)卡設(shè)備基 本上沒有設(shè)備自用的處理器,而且其可用的網(wǎng)卡內(nèi)存空間十分有限,而多數(shù)千兆網(wǎng) 絡(luò)適配器設(shè)備的固件部分不具有可重新根據(jù)用戶需求編程的能力。因此,盡管用戶 級通信協(xié)議項(xiàng)目能夠提供優(yōu)秀的通信性能,但對硬件的要求太高,其過高的價(jià)格限 制了應(yīng)用級通信協(xié)議的發(fā)展。 另外,由于千兆以太網(wǎng)絡(luò)(gigabit ethernet)18具有良好的向下兼容性能,而相 關(guān)設(shè)備價(jià)格適中,目前基于千兆或者千兆以上的網(wǎng)絡(luò)互連集群系統(tǒng)互連網(wǎng)絡(luò)越來越 多??紤]千兆以太網(wǎng)絡(luò)優(yōu)秀的性價(jià)比,千兆以太網(wǎng)絡(luò)上的輕量級通信有著廣泛的應(yīng) 用前景。 1.2.2 零拷貝技術(shù) 現(xiàn)有的零拷貝通信協(xié)議分為以下幾種:內(nèi)核級零拷貝通信協(xié)議,用戶級零拷貝 通信協(xié)議,其它零拷貝通信協(xié)議。 內(nèi)核級零拷貝通信協(xié)議由對操作系統(tǒng)的網(wǎng)絡(luò)部分進(jìn)行修改而得來,這是零拷貝 技術(shù)的最初實(shí)現(xiàn)形式之一。在發(fā)送端,該協(xié)議將收集數(shù)據(jù)信息、對數(shù)據(jù)進(jìn)行校檢、 形成數(shù)據(jù)報(bào)頭部等操作在內(nèi)核區(qū)完成,取消用戶區(qū)到內(nèi)核區(qū)的數(shù)據(jù)拷貝,將在數(shù)據(jù) 上添加數(shù)據(jù)報(bào)頭部的工作推遲到內(nèi)核區(qū)到網(wǎng)卡的硬件緩沖的拷貝完成后才進(jìn)行。只 有在網(wǎng)卡的發(fā)送緩沖上數(shù)據(jù)包才被完整的拼接起來。在接收端,協(xié)議在數(shù)據(jù)包還在 網(wǎng)卡的接收緩沖上時(shí)就對數(shù)據(jù)包執(zhí)行取數(shù)據(jù)頭部,校檢等操作,相當(dāng)于將內(nèi)核區(qū)的 除了拷貝以外的其它操作統(tǒng)統(tǒng)移到網(wǎng)卡的硬件緩沖上完成,然后找到對應(yīng)的用戶程 序,在數(shù)據(jù)處理完后將數(shù)據(jù)直接從網(wǎng)卡的硬件緩沖拷貝到對應(yīng)的用戶緩沖區(qū)。 用戶級零拷貝通信協(xié)議是在一般網(wǎng)絡(luò)通信體系的結(jié)構(gòu)上進(jìn)行了較大的改動得 來,其改動影響到了用戶編程。用戶在進(jìn)行網(wǎng)絡(luò)相關(guān)的編程時(shí)一定要使用該通信協(xié) 議提供的網(wǎng)絡(luò)接口。用戶級零拷貝通信協(xié)議主要有 via9,u-net10,am11,fm12 等。這類協(xié)議主要采用 rdma 方式1 實(shí)現(xiàn)零拷貝通信。rdma 協(xié)議對內(nèi)存總線帶 4 寬和 cpu 處理能力的要求比較低,而且不需要進(jìn)行數(shù)據(jù)拷貝,能極大的縮短網(wǎng)絡(luò)延 遲。rdma 方式允許網(wǎng)卡在應(yīng)用程序的控制下直接在應(yīng)用程序緩沖區(qū)中讀寫數(shù)據(jù), 操作完成后再通知 cpu,相當(dāng)于網(wǎng)卡從發(fā)送端緩沖區(qū)中取出數(shù)據(jù),直接傳送到接收 端的緩沖區(qū)中。rdma 讀寫操作要求源端的讀方或?qū)懛街滥康木彌_區(qū)的位置和大 小。如果從一個(gè)主機(jī)的內(nèi)存通過 rdma 方式向另一主機(jī)內(nèi)存寫一塊數(shù)據(jù),則必須提 供目的緩沖區(qū)的虛擬地址,并確保這個(gè)緩沖區(qū)足夠大,可以接收所有數(shù)據(jù)。同樣, 當(dāng)從一個(gè)遠(yuǎn)端主機(jī)讀取數(shù)據(jù)時(shí),必須知道要讀取的數(shù)據(jù)的存放地址,并要求本地主 機(jī)上具有一個(gè)相應(yīng)大小的本地緩沖區(qū)。實(shí)現(xiàn)時(shí),它允許發(fā)送方和接收方在接收端對 目的緩沖區(qū)的位置進(jìn)行協(xié)商:發(fā)送方在一個(gè) tcp 頭部選項(xiàng)中包含緩沖區(qū)地址,網(wǎng)卡 可以將目的地址提取出來,通過直接內(nèi)存訪問將它存放到合適的位置。因此,要對 tcp 頭部數(shù)據(jù)結(jié)構(gòu)進(jìn)行一些改動以支持 rdma 協(xié)議,主要是增加一個(gè)表示目的地址 的字段。 另外還有其它一些零拷貝通信協(xié)議,如基于主機(jī)的路由器的零拷貝通信協(xié)議2。 在傳統(tǒng)的基于主機(jī)的數(shù)據(jù)包轉(zhuǎn)發(fā)處理過程中,報(bào)文必須拷貝兩次:一次進(jìn)入主機(jī)存 儲器,一次從主機(jī)存儲器中拷貝出來。采用零拷貝技術(shù),將報(bào)文從其到達(dá)的 nic 直 接傳送到其發(fā)出的 nic 上,使 i/o 端口上的報(bào)文拷貝次數(shù)降為零次,可以有效地降 低數(shù)據(jù)通過路由器的傳輸延遲。這種技術(shù)通過網(wǎng)絡(luò)接口之間的對等 dma 轉(zhuǎn)發(fā)實(shí)現(xiàn): 報(bào)文的大部分內(nèi)容留在接收報(bào)文的 nic 中,等待其目的地址的確定,然后通過 dma 直接將報(bào)文從源 nic 傳送到目的 nic。對等 dma 轉(zhuǎn)發(fā)的實(shí)現(xiàn)技術(shù)有兩種:定位轉(zhuǎn) 發(fā)和報(bào)文頭部拷貝轉(zhuǎn)發(fā)。采用定位轉(zhuǎn)發(fā)技術(shù)時(shí),整個(gè)報(bào)文留在 nic 中,主機(jī)通過 pci 總線直接讀取報(bào)文頭部的相關(guān)字段進(jìn)行處理,然后通過對等 dma 轉(zhuǎn)發(fā)方式將報(bào)文傳 送到發(fā)送端 nic。該協(xié)議對驅(qū)動程序只作很小的修改例程中的報(bào)文緩沖區(qū)指針 指向 nic 存儲器而非內(nèi)核 ram。采用報(bào)文頭部拷貝轉(zhuǎn)發(fā)時(shí),主機(jī)將報(bào)文頭部拷貝到 主機(jī)內(nèi)存中,使用本地 ram 對其進(jìn)行操作后,拷貝新的報(bào)文頭部覆蓋原來的報(bào)文頭 部,然后將整個(gè)報(bào)文通過對等 dma 轉(zhuǎn)發(fā)傳送到目的 nic,減少了主機(jī)上總線訪問的 開銷。 在上述零拷貝通信協(xié)議中,主要采用了以下技術(shù)實(shí)現(xiàn)零拷貝通信: (1) 用戶/內(nèi)核地址重映射(page remapping)以及寫時(shí)拷貝(copy-on-write)技 術(shù)。該技術(shù)的主要思想是:通過重新編輯系統(tǒng)的 mmu 表讓內(nèi)核緩沖區(qū)與用戶緩沖 區(qū)都指向相同的連續(xù)的物理地址空間。地址重映射技術(shù)要求被映射的物理地址空間 5 必須是頁面大小的整數(shù)倍,這樣用戶和內(nèi)核都可以對被映射的物理地址空間進(jìn)行操 作,還需要對被映射的頁面需要進(jìn)行加鎖保護(hù),以防止被該物理頁面被置換出去。 用戶緩沖區(qū)在發(fā)送完成之前不允許重新對用戶數(shù)據(jù)緩沖區(qū)進(jìn)行改寫操作,一旦檢測 到了改寫的發(fā)生,就將執(zhí)行用戶緩沖到內(nèi)核緩沖的拷貝操作。文獻(xiàn)19是這種方案的 典型代表之一。 (2) 用戶/內(nèi)核共享內(nèi)存。該技術(shù)通過共享內(nèi)存語義方式實(shí)現(xiàn)。它讓內(nèi)核緩沖區(qū) 和用戶緩沖區(qū)都可以共享相同的物理地址空間,通過網(wǎng)卡設(shè)備的 dma 操作,可以直 接將用戶緩沖區(qū)的數(shù)據(jù)通過 dma 方式傳到網(wǎng)卡設(shè)備緩沖區(qū)去,從而實(shí)現(xiàn)零拷貝通 信。這種方式要求定義一整套具有共享語義的應(yīng)用編程接口 api 來實(shí)現(xiàn)用戶緩沖區(qū) 與內(nèi)核緩沖區(qū)的共享的目的。fbufs 20是使用共享內(nèi)存來實(shí)現(xiàn)零拷貝通信的方案之 一,fbufs 中每個(gè)進(jìn)程都擁有一個(gè)緩沖池,這些緩沖池預(yù)先映射好了一些用戶和內(nèi)核 的地址空間,通過這些共享的地址空間達(dá)到消除用戶空間到內(nèi)核空間的數(shù)據(jù)拷貝的 目的。fbufs 方式的問題在于因?yàn)樗械某绦蚨夹枰褂米远x的 api 和編程模式, 所以兼容性很差。文獻(xiàn) io-lite21是采用共享內(nèi)存方式實(shí)現(xiàn)零拷貝通信的另一種方案。 io-lite 項(xiàng)目盡量統(tǒng)一管理系統(tǒng)所有的內(nèi)存緩沖與高速緩沖,它允許應(yīng)用程序、進(jìn)程 間通信、文件系統(tǒng)、文件高速緩存以及網(wǎng)絡(luò)子系統(tǒng)安全而并行地使用單一物理數(shù)據(jù) 拷貝,同時(shí)結(jié)合存取控制以及設(shè)置只讀限制來保證數(shù)據(jù)的安全。 (3) 內(nèi)核/網(wǎng)卡共享內(nèi)存。這種方案要求操作系統(tǒng)來管理網(wǎng)卡接口的內(nèi)存,可以 使用 dma 或者 pio 方式實(shí)現(xiàn)用戶緩沖區(qū)與網(wǎng)絡(luò)內(nèi)存之間的數(shù)據(jù)移動。該方案要求 操作系統(tǒng)更改網(wǎng)絡(luò)緩沖區(qū)管理機(jī)制以支持網(wǎng)絡(luò)接口的內(nèi)存管理。這樣,應(yīng)用程序就 不能直接使用網(wǎng)絡(luò)接口內(nèi)存,而 tcp 的重傳等操作的相關(guān)緩沖區(qū)都設(shè)置在網(wǎng)絡(luò)接口 內(nèi)存中。afterburner7是使用這種方式的方案之一。 (4) 大數(shù)據(jù)塊傳輸方式(blasting transmission) 。blast 協(xié)議通過延遲或者聚集通 知消息(acknowledge messages) ,傳輸大塊數(shù)據(jù)來提高系統(tǒng)的吞吐量。網(wǎng)卡驅(qū)動器 的緩沖鏈被修改以使得網(wǎng)卡設(shè)備能夠直接分離抵達(dá)數(shù)據(jù)包的頭部與有效數(shù)據(jù)部分。 在接收數(shù)據(jù)時(shí),數(shù)據(jù)部分被直接寫到了用戶空間22,或者采用重映射方式從內(nèi)核空 間傳輸?shù)接脩艨臻g23。這種方案要求 nic 設(shè)備能夠分離抵達(dá)的數(shù)據(jù)幀的有效數(shù)據(jù)與 頭部,并在分析數(shù)據(jù)幀的頭部信息后將數(shù)據(jù)幀的數(shù)據(jù)部分放置到相應(yīng)的位置。 (5) 用戶直接訪問網(wǎng)絡(luò)接口內(nèi)存。這種方案主要應(yīng)用于用戶級通信協(xié)議中。該方 案允許用戶直接對網(wǎng)絡(luò)接口內(nèi)存進(jìn)行操作,通過預(yù)先將網(wǎng)絡(luò)接口內(nèi)存映射到用戶緩 6 沖區(qū)和將網(wǎng)絡(luò)協(xié)議棧直接放置到網(wǎng)絡(luò)接口對應(yīng)的內(nèi)存空間中去, 達(dá)到不需要主機(jī) cpu 的參與達(dá)到就能傳輸數(shù)據(jù)的目的。但是這種方案需要復(fù)雜特殊的網(wǎng)絡(luò)硬件支持。同 時(shí),這種方案要求用戶程序使用專門的內(nèi)存管理調(diào)用機(jī)制來使用與操縱網(wǎng)絡(luò)接口內(nèi) 存,這樣就也帶來了軟件的復(fù)雜性與難于移植性的問題。 上面提及的零拷貝通信的主要目的之一是消除數(shù)據(jù)拷貝帶來的通信開銷,但最 主要的目的不僅僅是消除通信開銷,畢竟現(xiàn)在的內(nèi)存總線與 i/o 總線都可以提供千兆 以上的帶寬,但因?yàn)閿?shù)據(jù)拷貝需要占有系統(tǒng)資源(如內(nèi)存,總線,io,cpu 等) ,同 時(shí)存在用戶與內(nèi)核空間的交互,所以過多的數(shù)據(jù)拷貝操作會影響系統(tǒng)的整體性能。 因此,嚴(yán)格意義上來說,零拷貝的另外一個(gè)主要目的是減少系統(tǒng)開銷,如內(nèi)存、cpu 等關(guān)鍵資源的開銷,來達(dá)到提高系統(tǒng)的整體性能的目的。 1.2.3 實(shí)時(shí)通信協(xié)議 近年來,實(shí)時(shí)通信,特別是基于以太網(wǎng)(ethernet,802.3)的實(shí)時(shí)通信技術(shù)很多。 實(shí)時(shí)通信分為軟實(shí)時(shí)通信 (soft real time communications) 和硬實(shí)時(shí)通信 (hard real time communications) 。軟實(shí)時(shí)通信一般用于多媒體應(yīng)用以及其他實(shí)時(shí)性能要求不高的場 合,它的特征是允許消息通信超時(shí),而且部分消息的通信超時(shí)對于系統(tǒng)整體的實(shí)時(shí) 性能影響不大;硬實(shí)時(shí)通信不允許任何通信超過對應(yīng)的時(shí)限(deadline) ,否則就會 造成系統(tǒng)的整體失效,如航天控制系統(tǒng)等應(yīng)用與通信行業(yè),就要求任何的通信都必 須具有確定的端到端時(shí)延,消息抵達(dá)的時(shí)限必須在確定的最大時(shí)延之內(nèi)。基于以太 網(wǎng)的實(shí)時(shí)通信方案大致分為以下三類:基于總線結(jié)構(gòu)、基于交換式以太網(wǎng)和其他形 式的實(shí)時(shí)通信方案。 基于總線結(jié)構(gòu)的實(shí)時(shí)通信方案主要分為基于令牌的媒體訪問控制方法,基于時(shí) 間片的實(shí)時(shí)通信方案以及基于統(tǒng)計(jì)的實(shí)時(shí)通信方案。基于令牌的媒體訪問控制協(xié)議 的主要代表是 rether24項(xiàng)目,該項(xiàng)目使用一個(gè)循環(huán)的令牌來作為允許在共享式信 道中通信的通行證,哪個(gè)節(jié)點(diǎn)擁有令牌,該節(jié)點(diǎn)就擁有了發(fā)送數(shù)據(jù)包的權(quán)限?;?令牌的實(shí)時(shí)通信方案的優(yōu)點(diǎn)是其實(shí)現(xiàn)的靈活性,因?yàn)樗梢杂糜趲缀跛械木W(wǎng)絡(luò)體 系結(jié)構(gòu),缺點(diǎn)是系統(tǒng)的整體性能在受令牌的傳遞與管理開銷的影響很大?;跁r(shí)間 片的實(shí)時(shí)通信的典型代表是 mars25系統(tǒng), 它使用了時(shí)分多路復(fù)用技術(shù) (tdma, time division multiple access)26來提供基于共享式以太網(wǎng)絡(luò)的實(shí)時(shí)通信保證,具體的做 法是每個(gè)節(jié)點(diǎn)擁有預(yù)先分配的一定數(shù)量的時(shí)間片,這些時(shí)間片采用全局時(shí)間為標(biāo)準(zhǔn), 只有在屬于自己的時(shí)間片內(nèi)節(jié)點(diǎn)才能進(jìn)行數(shù)據(jù)包的發(fā)送,但節(jié)點(diǎn)可以在任何時(shí)候接 7 收抵達(dá)該節(jié)點(diǎn)的數(shù)據(jù)包。使用時(shí)間片的實(shí)時(shí)通信方案要求系統(tǒng)必須有一個(gè)全局的系 統(tǒng)時(shí)間,并且每個(gè)節(jié)點(diǎn)都必須與這個(gè)全局時(shí)間同步,因此要求必須要有相應(yīng)的基于 全局時(shí)間的相對高精度時(shí)鐘同步方案的支持?;诮y(tǒng)計(jì)的實(shí)時(shí)通信方案主要代表是 實(shí)時(shí)平滑層處理技術(shù)(traffic smoothing technique) 27與模糊通信平滑控制技術(shù)(fuzzy traffic smoothing technique)28。統(tǒng)計(jì)實(shí)時(shí)通信的主要方式是使用統(tǒng)計(jì)的方式,保持 整個(gè)系統(tǒng)的網(wǎng)絡(luò)通信數(shù)量低于某個(gè)具體的確定的限制之內(nèi),也就是通過自適應(yīng)的調(diào) 節(jié)來控制各個(gè)節(jié)點(diǎn)內(nèi)部的抵達(dá)網(wǎng)絡(luò)的通信速率以保證數(shù)據(jù)包不會丟失。這樣,從統(tǒng) 計(jì)的角度來說保證了網(wǎng)絡(luò)沖突的概率不會太高。當(dāng)然,要求的網(wǎng)絡(luò)沖突的概率越低, 網(wǎng)絡(luò)的利用率就下降越多。 隨著以太網(wǎng)交換機(jī)技術(shù)不斷發(fā)展,交換式以太網(wǎng)絡(luò)取代傳統(tǒng)的總線式共享網(wǎng)絡(luò) 成為了一種趨勢與必然?;趥鹘y(tǒng)的共享式以太網(wǎng)使用帶沖突檢測的載波監(jiān)聽的多 路復(fù)用(csma/cd,carrier sense multiple access with collision detect)技術(shù)來控制 共享信道,這種技術(shù)的問題在于信道占有延時(shí)不可預(yù)計(jì)。而在交換式以太網(wǎng)中,被 交換機(jī)連接的各個(gè)節(jié)點(diǎn)都成為了獨(dú)立的沖突域,因此不存在任何的信道沖突。當(dāng)前 的交換機(jī)設(shè)備大多采用了存儲轉(zhuǎn)發(fā)方式轉(zhuǎn)發(fā)數(shù)據(jù)幀,并且使用基于輸出端口的緩沖 方式,這樣唯一的可能發(fā)生沖突的情況是多個(gè)節(jié)點(diǎn)同時(shí)向同一個(gè)節(jié)點(diǎn)發(fā)送大量的數(shù) 據(jù)包,這些數(shù)據(jù)包的總抵達(dá)速率高于交換機(jī)輸出端口的輸出速率從而導(dǎo)致了發(fā)向同 一節(jié)點(diǎn)的數(shù)據(jù)包的丟失。因?yàn)榻粨Q機(jī)的緩沖空間有限,抵達(dá)交換機(jī)的數(shù)據(jù)包如果速 率過快而又沒有位置緩存,那么這些數(shù)據(jù)包就會被交換機(jī)丟棄。當(dāng)前的交換機(jī)在擁 塞的情況下并沒有任何的針對某種類別的數(shù)據(jù)包的服務(wù)質(zhì)量保證,如哪個(gè)包先發(fā)送 或者哪個(gè)包該被丟棄等。目前大多數(shù)基于交換式以太網(wǎng)絡(luò)的實(shí)時(shí)通信方案都是用提 高交換機(jī)的服務(wù)質(zhì)量的方法來避免這一沖突的發(fā)生。ethereal29項(xiàng)目通過在交換機(jī)里 面添加帶寬預(yù)留機(jī)制來達(dá)到保護(hù)針對特殊用戶的通信,通過帶寬預(yù)留的方式來增強(qiáng) 這些特殊的應(yīng)用的實(shí)時(shí)通信保障,該項(xiàng)目的另外一個(gè)目的就是希望不改動節(jié)點(diǎn)本身 的標(biāo)準(zhǔn)操作系統(tǒng)。文獻(xiàn)30同樣在交換機(jī)里面添加了帶寬預(yù)留機(jī)制,同時(shí)在節(jié)點(diǎn)機(jī)內(nèi) 部以太網(wǎng)媒體訪問控制層mac(media access control)上面添加了實(shí)時(shí)軟件層,另 外,交換機(jī)上還運(yùn)用了最早時(shí)限優(yōu)先edf(earliest deadline first)調(diào)度算法,從而 提供了通信速率和實(shí)時(shí)性的保證。文獻(xiàn)31把網(wǎng)絡(luò)微積分(network calculus)32-34理 論應(yīng)用到交換式以太網(wǎng)絡(luò)中,并且分析了基于線性拓?fù)涞亩鄠€(gè)交換機(jī)系統(tǒng)的實(shí)時(shí)通 信模式,還采用了基于漏斗的平滑流方案。交換式以太網(wǎng)系統(tǒng)的性能測試表明在50 8 個(gè)節(jié)點(diǎn)的100m同時(shí)發(fā)送15k字節(jié)數(shù)據(jù)包使網(wǎng)絡(luò)利用率高于90的情況下,消息傳輸 的通信延遲仍可以保持在400ms左右。文獻(xiàn)35也使用網(wǎng)絡(luò)微積分理論對基于交換式以 太網(wǎng)的有界延遲(bounded delay)進(jìn)行了分析。文獻(xiàn)36介紹了一種基于交換式以太網(wǎng) 絡(luò)的實(shí)時(shí)通信協(xié)議,方式是在交換機(jī)里面增加了自然優(yōu)先級排隊(duì)功能的支持,交換 機(jī)對具有不同優(yōu)先級的消息進(jìn)行相應(yīng)的處理優(yōu)先級別,如定義周期性實(shí)時(shí)消息的優(yōu) 先級最高等等。 文獻(xiàn)37提出了位于共享式以太網(wǎng)之上的硬實(shí)時(shí)通信協(xié)議 rtcc(real-time communication control) ,該協(xié)議使用了一個(gè)節(jié)點(diǎn)作為系統(tǒng)的總線控制器,其他節(jié)點(diǎn) 都被稱為遠(yuǎn)端終端,各遠(yuǎn)端終端只有得到總線控制器的允許以后方能發(fā)送數(shù)據(jù),這 種集中式的實(shí)時(shí)通信方案存在明顯的缺點(diǎn)就是總線控制器成為系統(tǒng)的單一失效點(diǎn), 如果沒有配套的恢復(fù)協(xié)議來保證總線控制器失效情況下系統(tǒng)的恢復(fù),系統(tǒng)就很容易 崩潰。文獻(xiàn)38同樣提出了類似 rtcc 的基于仲裁控制的以太網(wǎng)實(shí)時(shí)通信方案。文獻(xiàn)39 討論了幾種基于多個(gè)交換式集線器(switching hub)的交換式以太網(wǎng)并對其進(jìn)行了性 能分析,結(jié)果表明擁有多個(gè)交換式集線器是實(shí)時(shí)工業(yè)網(wǎng)絡(luò)的非常不錯(cuò)的替代品。 1.3 研究內(nèi)容 “十五”項(xiàng)目“實(shí)時(shí)信息處理平臺”rtgrid 要求實(shí)現(xiàn)具有異構(gòu)、實(shí)時(shí)、高可靠 等特性的實(shí)時(shí)信息處理平臺。它的要求之一是實(shí)現(xiàn)集群系統(tǒng)內(nèi)部的零拷貝實(shí)時(shí)網(wǎng)絡(luò) 通信。這種網(wǎng)絡(luò)通信應(yīng)該具有以下特點(diǎn): (1) 實(shí)時(shí)性 要求保證通信的實(shí)時(shí)性。 (2) 高效性 要求提高通信效率。提高通信效率的途徑是減少通信過程中數(shù)據(jù)拷貝的次數(shù), 減少通信開銷。 (3) 兼容性 能夠和一般的非實(shí)時(shí)通信同時(shí)運(yùn)行。 根據(jù)課題研究目標(biāo)和要求,針對現(xiàn)有實(shí)時(shí)通信協(xié)議和零拷貝技術(shù)現(xiàn)狀,在研究 相關(guān)的理論的基礎(chǔ)上,課題組研制開發(fā)了實(shí)時(shí)環(huán)境下的零拷貝通信設(shè)計(jì) rtzcp(real time zero-copy plan) 。rtzcp 基于 linux 環(huán)境,受實(shí)時(shí)內(nèi)核 rtai 調(diào)度控制,能夠 實(shí)現(xiàn)集群環(huán)境下的實(shí)時(shí)零拷貝通信。rtzcp 能夠滿足實(shí)時(shí)性、高效性和兼容性的要 9 求。 rtzcp 的研究包括零拷貝技術(shù)、通信實(shí)時(shí)性、網(wǎng)絡(luò)緩沖管理、通信穩(wěn)定性等方 面。 1.4 論文結(jié)構(gòu) 本文各章節(jié)的內(nèi)容組織如下: 第一章首先簡述零拷貝技術(shù)的研究現(xiàn)狀和存在的問題,接著從輕量級通信協(xié)議, 零拷貝技術(shù),實(shí)時(shí)通信協(xié)議三個(gè)方面說明本文研究內(nèi)容的相關(guān)現(xiàn)狀。最后說明本文 的全文結(jié)構(gòu)。 第二章分析了 linux 環(huán)境下 udp 協(xié)議的通信流程,測試了通信過程中的幾個(gè)主 要操作的開銷,設(shè)想了幾種可以實(shí)施的零拷貝通信方案,并對這幾種方案進(jìn)行了模 擬測試和分析。 第三章介紹了 rtzcp 的實(shí)時(shí)通信環(huán)境和實(shí)現(xiàn)實(shí)時(shí)通信的要求,說明了 rtzcp 的主要結(jié)構(gòu)、通信流程和主要模塊。 第四章介紹了 rtzcp 的實(shí)現(xiàn)技術(shù),主要包括 rtzcp 提供的主要接口函數(shù)及其 作用,還介紹了 rtzcp 中采用的內(nèi)存管理機(jī)制,發(fā)送數(shù)據(jù)包的重映射方式,網(wǎng)絡(luò)平 滑傳輸層技術(shù)和分片包重組機(jī)制等技術(shù)。 第五章對于 rtzcp 進(jìn)行了測試,測試了實(shí)時(shí)通信和非實(shí)時(shí)通信同時(shí)進(jìn)行時(shí)相互 間的性能影響,還測試了實(shí)時(shí)通信的網(wǎng)絡(luò)延遲性能。 第六章對全文進(jìn)行總結(jié)并展望了未來工作;最后是致謝和參考文獻(xiàn)。 10 2 零拷貝技術(shù)分析零拷貝技術(shù)分析 本章將先分析 linux 環(huán)境下 udp 協(xié)議的通信流程及主要開銷,再討論了幾種設(shè) 想的基于 udp 協(xié)議的零拷貝方案,最后對這些零拷貝方案進(jìn)行了模擬測試和分析。 2.1 udp 通信流程分析 由于項(xiàng)目的主要運(yùn)行環(huán)境是 linux 操作系統(tǒng),并且要求進(jìn)行實(shí)時(shí)通信,在此分 析 linux 環(huán)境下 udp 協(xié)議的通信流程。 發(fā)送端的數(shù)據(jù)處理流程如圖 2.1 所示。 用戶區(qū) udp_sendmsg udp_getfrag copy_from_user ip_build_xmitip_build_xmit_slow udp層 dev_queue_xmit start_xmit ip層 數(shù)據(jù)鏈路層 網(wǎng)絡(luò)設(shè)備 socket_sendmsg 圖 2.1 linux 下 udp 協(xié)議發(fā)送流程 (1) 用戶數(shù)據(jù)發(fā)送程序首先通過 socket 接口提供的 socket_sendmsg 函數(shù)對數(shù)據(jù)進(jìn) 行處理,然后將數(shù)據(jù)交給內(nèi)核通信模塊; 11 (2) 數(shù)據(jù)經(jīng)過 inet 層進(jìn)行處理后被交由 udp 層,udp 層的 udp_sendmsg 函數(shù) 中首先檢查數(shù)據(jù)包兼容性,調(diào)用 ip_route_output 函數(shù)收集 ip 路徑相關(guān)參數(shù),確定發(fā) 送路徑,再在數(shù)據(jù)上增加 udp 頭部,然后調(diào)用 udp_getfrag 函數(shù)分析數(shù)據(jù)包是否需要 進(jìn)行分片操作,接著調(diào)用 copy_from_user 函數(shù)將待發(fā)送數(shù)據(jù)從 socket 相關(guān)的用戶區(qū) 發(fā)送緩沖拷貝到內(nèi)核區(qū)的網(wǎng)絡(luò)發(fā)送緩沖,如果需要分片操作,則在這次拷貝中將數(shù) 據(jù)包按系統(tǒng)要求拷貝為規(guī)定大小的若干個(gè)分片包,最后通過 ip_build_xmit 函數(shù)將數(shù) 據(jù)轉(zhuǎn) ip 層進(jìn)行處理; (3) ip 層的 ip_build_xmit 函數(shù)將可以慢速發(fā)送的大數(shù)據(jù)包轉(zhuǎn) ip_build_xmit_slow 函數(shù)處理,ip_build_xmit 函數(shù)和 ip_build_xmit_slow 函數(shù)在完成增加 ip 頭部、進(jìn)行 相關(guān)查錯(cuò)等操作后將數(shù)據(jù)轉(zhuǎn)送數(shù)據(jù)鏈路層; (4) 數(shù)據(jù)鏈路層的 net_xmit 函數(shù)激活相應(yīng)的網(wǎng)卡發(fā)送程序 start_xmit; (5) 如果網(wǎng)卡不具有 dma 功能,則該函數(shù)在進(jìn)行硬件相關(guān)查錯(cuò)的同時(shí)將要發(fā)送 的數(shù)據(jù)拷貝到網(wǎng)卡的硬件發(fā)送緩沖;如果網(wǎng)卡具有 dma 功能,則該函數(shù)首先進(jìn)行數(shù) 據(jù)查錯(cuò),再通過映射方式將內(nèi)核區(qū)的發(fā)送緩沖作為網(wǎng)卡的發(fā)送緩沖。網(wǎng)卡的硬件中 斷產(chǎn)生時(shí)網(wǎng)卡會將網(wǎng)卡發(fā)送緩沖的數(shù)據(jù)發(fā)送出去。 接收端的數(shù)據(jù)處理流程如圖 2.2 所示。 (1) 數(shù)據(jù)到達(dá)網(wǎng)卡的接收緩沖后,產(chǎn)生中斷,網(wǎng)卡驅(qū)動的 clean_irq 函數(shù)斷開數(shù)據(jù) 包和網(wǎng)卡接受緩沖的連接;如果網(wǎng)卡不具有 dma 功能則先對數(shù)據(jù)進(jìn)行硬件查錯(cuò),然 后在內(nèi)核區(qū)分配相應(yīng)的內(nèi)核緩沖,將數(shù)據(jù)拷貝過去。如果網(wǎng)卡的芯片不具有 dma 功 能,則在網(wǎng)卡執(zhí)行 clean_rx_irq 函數(shù)操作時(shí)需要進(jìn)行一次拷貝,否則該拷貝由硬件完 成,不需要 cpu 參與。如果網(wǎng)卡具有 dma 功能,則先由網(wǎng)卡直接將數(shù)據(jù)拷貝到內(nèi) 核區(qū)中對應(yīng)的網(wǎng)絡(luò)緩沖,再進(jìn)行硬件查錯(cuò); (2) 數(shù)據(jù)鏈路層的 eth_type_trans 函數(shù)對數(shù)據(jù)進(jìn)行分析,判斷協(xié)議類型,再將數(shù) 據(jù)入對應(yīng)的接收隊(duì)列,然后調(diào)用 netif_rx 函數(shù)將數(shù)據(jù)轉(zhuǎn) ip 層進(jìn)行處理; (3) ip 層的 ip_rcv 函數(shù)將數(shù)據(jù)的 ip 頭部取出,并進(jìn)行 ip 查錯(cuò),如沒有錯(cuò)誤則調(diào) 用 ip_local_deliver 函數(shù),ip_local_deliver 函數(shù)在檢查收到的分片包順序是否正確后調(diào) 用 ip_defrag 函數(shù),ip_defrag 函數(shù)將分片包數(shù)據(jù)交由 ip_frag_queue 函數(shù)進(jìn)行處理, ip_frag_queue 函數(shù)將同一數(shù)據(jù)的分片包通過鏡像方式建立連接,然后通過 udp_rcv 函 數(shù)轉(zhuǎn) udp 層; (4) udp 層的 udp_rcv 函數(shù)收到數(shù)據(jù)后用 udp_v4_lookup 函數(shù)尋找數(shù)據(jù)包對應(yīng)的 12 socket 接口,找到后采用發(fā)送信號或回調(diào)函數(shù)的方式通知數(shù)據(jù)包對應(yīng)的 socket 接口; (5) socket 接口調(diào)用相應(yīng)的 udp_recvmsg 函數(shù),該函數(shù)會在內(nèi)核緩沖區(qū)中搜尋有 無對應(yīng)的 socket 內(nèi)核緩沖隊(duì)列,如果找到相關(guān)隊(duì)列,則將對應(yīng)的 udp 頭部取出,然 后將數(shù)據(jù)從內(nèi)核緩沖拷貝到用戶區(qū)的 socket 緩沖中去,如果是分片包則在這次拷貝 中將分片包的數(shù)據(jù)拼接起來,然后將數(shù)據(jù)交給用戶處理。 ip_rcv eth_type_trans clear_irq ip層 數(shù)據(jù)鏈路層 網(wǎng)絡(luò)設(shè)備 netif_rx ip_local_deliver ip_defragip_frag_queue udp_recv udp_v4_lookup udp_recvmsg udp層 用戶區(qū) socket_recvmsg skb鏡像 圖 2.2 linux 下 udp 協(xié)議接收流程 總的說來, 發(fā)送端和接收端都要對數(shù)據(jù)進(jìn)行兩次拷貝。 如果網(wǎng)卡具有 dma 功能, 則網(wǎng)卡和主存上的內(nèi)核空間通過 dma 方式建立連接,網(wǎng)卡上的 dma 芯片能夠直接 處理主存上對應(yīng)的內(nèi)核網(wǎng)絡(luò)緩沖:發(fā)送端將數(shù)據(jù)拷貝到內(nèi)核區(qū)后經(jīng)過處理后與網(wǎng)卡 13 建立映射連接,網(wǎng)卡將映射的內(nèi)存空間的數(shù)據(jù)用 dma 方式發(fā)送出去;接收端則先將 內(nèi)核管理的一部分內(nèi)存空間作為網(wǎng)卡的 dma 緩沖區(qū),收到的數(shù)據(jù)直接用 dma 方式 放到緩沖區(qū)中,然后交由操作系統(tǒng)處理,處理完后再拷貝給用戶程序。收發(fā)的過程 中都與網(wǎng)卡自帶緩沖區(qū)相關(guān)的拷貝都由網(wǎng)卡的 dma 芯片完成,不需要 cpu 參與。 2.2 通信開銷分析 接下來測試各通信步驟的時(shí)間消耗,硬件測試環(huán)境為:intel2.0gcpu,256m 內(nèi) 存,interl pro e1000 網(wǎng)卡,千兆網(wǎng)線,節(jié)點(diǎn)機(jī)之間采用直接網(wǎng)線連接的方式。軟件測 試環(huán)境為:linux9.0 操作系統(tǒng)。測試方案為:從客戶端向服務(wù)器端發(fā)送數(shù)據(jù),服務(wù) 器端接收到數(shù)據(jù)后向客戶端回發(fā)數(shù)據(jù),在收發(fā)數(shù)據(jù)的過程中取數(shù)據(jù)到達(dá)各層激活對 應(yīng)函數(shù)的時(shí)間,從這些時(shí)間計(jì)算出 linux 環(huán)境下的主要通信開銷,測試結(jié)果如表 2.1 所示。表 2.1 udp 協(xié)議的通信開銷 數(shù)據(jù)包大小 (byte) 發(fā)送端查錯(cuò)等操 作所需時(shí)間(us) 發(fā)送端拷貝所 需時(shí)間(us) 接收端拷貝所 需時(shí)間(us) 接收端查錯(cuò)等操作所需 時(shí)間(us) 3238192241 6439202049 12831171942 25630181844 51231172542 102438172245 204849273757 409654354166 819257566272 1228865738575 16384809511591 204807911014092 245768513515189 2867290175192100 3276895201233112 測試結(jié)果表明:隨著數(shù)據(jù)包大小的增長,數(shù)據(jù)包拷貝所消耗的時(shí)間逐漸增加, 尤其是在數(shù)據(jù)包需要進(jìn)行分片操作后,通信時(shí)所消耗的時(shí)間增長迅速。而數(shù)據(jù)包查 14 錯(cuò)等為了保持通信可靠性進(jìn)行的操作所消耗的時(shí)間隨著數(shù)據(jù)包增長變化不大,但是 這些操作所消耗的時(shí)間并不小,在集群等可靠網(wǎng)絡(luò)條件下可以減少一部分相關(guān)操作, 從而提高通信效率。 2.3 零拷貝測試方案設(shè)計(jì) 下面結(jié)合現(xiàn)有的零拷貝技術(shù)和以 udp 協(xié)議為主的 rtnet 通信協(xié)議的特點(diǎn),考慮 實(shí)現(xiàn)零拷貝技術(shù)的可行性方案: (1) 發(fā)送端 cpu 完全不需要參與拷貝,接收端 cpu 參與一次拷貝。本方案要求 網(wǎng)卡具有 dma 功能(如 intel pro e1000) 。在發(fā)送端用重映射方式取代用戶區(qū)到內(nèi)核 區(qū)的一次拷貝。在用戶區(qū)的數(shù)據(jù)包上采用分片加上數(shù)據(jù)頭部dma 發(fā)送 再分片的方式將大數(shù)據(jù)包依次分片發(fā)送。在接收端采用和 linux 環(huán)境下的 udp 協(xié)議 類似的接收方式處理數(shù)據(jù)。本文中稱這種方案為零拷貝方法 1。 (2) 對發(fā)送方發(fā)送數(shù)據(jù)的大小進(jìn)行限制, 使發(fā)送數(shù)據(jù)小于 mtu (maximal transfer unit) ,在數(shù)據(jù)傳輸過程中不需要進(jìn)行分片操作。發(fā)送端通過重映射方式將數(shù)據(jù)傳送 到內(nèi)核區(qū),再由網(wǎng)卡用 dma 方式將數(shù)據(jù)發(fā)送出去。接收端先通過 dma 方式將數(shù)據(jù) 放到網(wǎng)卡在內(nèi)存中的緩沖區(qū)中,然后找到對應(yīng)的用戶程序,調(diào)用內(nèi)存管理機(jī)制,通 過映射機(jī)制使用戶程序能夠訪問該內(nèi)存區(qū)域,再斷開網(wǎng)卡緩沖對該內(nèi)存空間的映射, 同時(shí)為網(wǎng)卡分配新的緩沖空間,用戶就能夠直接對收到的數(shù)據(jù)進(jìn)行處理。不過由于 數(shù)據(jù)包大小不能大于 mtu(maximum transmission unit,一般為 1500bytes) ,這種通 信方式只能處理小數(shù)據(jù)包。本文中稱這種方案為零拷貝方法 2。 (3) 內(nèi)核級零拷貝通信協(xié)議。主要針對 realtek8139 等不具有 dma 功能的網(wǎng)絡(luò)設(shè) 備。在發(fā)送端,協(xié)議按照 linux 環(huán)境下的 udp 協(xié)議的方式在各層進(jìn)行數(shù)據(jù)的校檢, 形成數(shù)據(jù)報(bào)頭部等操作,取消在 udp 層的用戶區(qū)到內(nèi)核區(qū)的數(shù)據(jù)拷貝,在數(shù)據(jù)包從 用戶區(qū)拷貝到網(wǎng)卡的硬件緩沖后再將形成的數(shù)據(jù)包頭部拷貝到網(wǎng)卡硬件緩沖上對應(yīng) 數(shù)據(jù)包的相應(yīng)位置,形成完整的待發(fā)送數(shù)據(jù)包后進(jìn)行發(fā)送。在接收端,當(dāng)數(shù)據(jù)被接 收到網(wǎng)卡上的硬件緩沖后,就執(zhí)行 ip 層和 udp 層的取數(shù)據(jù)包頭部,校驗(yàn)等操作, 然后找到對應(yīng)的用戶程序,相當(dāng)于將內(nèi)核區(qū)的除了拷貝以外的其它操作統(tǒng)統(tǒng)移到網(wǎng) 卡的硬件緩沖上完成,在數(shù)據(jù)處理完后直接拷貝到對應(yīng)的用戶區(qū)緩沖去。 (4) rma40(remote memory access,遠(yuǎn)端內(nèi)存訪問)方式。這種方式的實(shí)現(xiàn)方式 一般為 rdma 方式。它的實(shí)現(xiàn)要求網(wǎng)卡為具有編程功能的 scsi 網(wǎng)絡(luò)設(shè)備。將通信 15 方式進(jìn)行修改,按照圖 2.3 所示流程進(jìn)行發(fā)送: 用戶程序用戶程序 網(wǎng)卡網(wǎng)卡 dma緩沖區(qū) 圖 2.3 rma 通信方式 發(fā)送端首先將數(shù)據(jù)交給通信系統(tǒng)進(jìn)行處理,系統(tǒng)對待發(fā)送數(shù)據(jù)進(jìn)行寫保護(hù)操 作,然后收集數(shù)據(jù)包的信息,形成被稱為“消息”的小數(shù)據(jù)包; 將“消息”數(shù)據(jù)包發(fā)送至接收端; 接收端收到這些“消息”數(shù)據(jù)包后找到對應(yīng)的用戶程序,判斷這些程序的處 理優(yōu)先級; 將優(yōu)先級最高的用戶程序的網(wǎng)絡(luò)緩沖作為網(wǎng)絡(luò)設(shè)備的接收緩沖; 向?qū)?yīng)的發(fā)送端發(fā)送“可以發(fā)送”的信號; 發(fā)送端的信號后發(fā)送數(shù)據(jù),接收端通過 dma 方式將數(shù)據(jù)接收到 dma 緩沖 區(qū),也就是由網(wǎng)卡直接將數(shù)據(jù)放到對應(yīng)的用戶存儲空間。 2.4 零拷貝測試方案性能分析 接下來對 2.3 節(jié)所述的四個(gè)零拷貝通信方案進(jìn)行性能測試,硬件測試環(huán)境為: intel2.0g cpu,256m 內(nèi)存,節(jié)點(diǎn)機(jī)之間采用直接網(wǎng)線連接的方式。軟件測試環(huán)境為: linux9.0 操作系統(tǒng),rtai3.0r4 實(shí)時(shí)內(nèi)核模塊和 rtnet-0.7.1 實(shí)時(shí)網(wǎng)絡(luò)通信模塊。測 試方案為:從客戶端向服務(wù)器端發(fā)送數(shù)據(jù),服務(wù)器端接收到數(shù)據(jù)后向客戶端回發(fā)數(shù) 據(jù),即 ping-pong 測試,客戶端取發(fā)送和接收兩次時(shí)間之差即一次循環(huán)往返之差 (round-trip time) ,將 round-trip time 作為測試數(shù)據(jù)。測試結(jié)果如下: 在測試內(nèi)核級零拷貝通信協(xié)議時(shí),網(wǎng)絡(luò)設(shè)備采用 realtek8139 網(wǎng)卡和百兆網(wǎng)線, 測試結(jié)果如表 2.2 所示。 16 表 2.2 內(nèi)核級零拷貝通信協(xié)議通信延遲測試 數(shù)據(jù)包大小(bytes)rtnet(us)內(nèi)核級零拷貝通信協(xié)議性能測試(us) 64527236 128526241 256511235 512555260 1024573286 2048602323 4096579369 8192640493 16384738712 20000779821 內(nèi)核級零拷貝通信協(xié)議實(shí)現(xiàn)簡單,對于硬件要求低。但是通信性能提高不大(小 數(shù)據(jù)包時(shí)性能明顯提高主要是因?yàn)樵趯?shí)現(xiàn)內(nèi)核級零拷貝通信協(xié)議時(shí)我們簡化了數(shù)據(jù) 包查錯(cuò)等保持通信可靠性的操作)。 在測試零拷貝方法 1 和 rma 方式時(shí),網(wǎng)絡(luò)設(shè)備采用 intel pro e1000 網(wǎng)卡和千兆 網(wǎng)線,零拷貝方法 1 和 rma 的測試結(jié)果如表 2.3 所示。 表 2.3 零拷貝方法 1 和 rma 方式通信延遲測試 數(shù)據(jù)包大小(bytes)rtnet(us)零拷貝方法 1(us)rma(us) 32512.7173 318.3 64508.8177 317 128512176.4 327.7 256530.7180.5 322.6 512520.7186.6 322.5 1024533.8190.6 354 2048536.3231.1 394.9 4096544.8253.5 425.2 8192569.6255.4 532.7 12288600.2366.5 544 16384620.5387.9 563 20480648.6472 607.8 24576680.2452.5 630.4 28672701.1553.2 657.5 32768736.1632.9 683.7 零拷貝方法 1 的優(yōu)點(diǎn)在于對于中等大小的數(shù)據(jù)包的通信性能提高較大,但是在 17 傳輸小數(shù)據(jù)包和很大的數(shù)據(jù)包時(shí)通信性能變化不大。rma 方式在處理大數(shù)據(jù)包時(shí)大 幅縮減了通信延遲,在處理小數(shù)據(jù)包時(shí)反而比一般通信協(xié)議要慢(測試結(jié)果中性能 較好主要是因?yàn)樵趯?shí)現(xiàn)上述兩種協(xié)議時(shí)我們簡化了數(shù)據(jù)包查錯(cuò)等保持通信可靠性的 操作),有一種改進(jìn)方案為將小數(shù)據(jù)包拼接為大數(shù)據(jù)包再進(jìn)行發(fā)送,但是不符合實(shí) 時(shí)通信的要求。 零拷貝方法 2 的測試結(jié)果如表 2.4 所示。它極大的提高了通信性能,但是由于數(shù) 據(jù)包大小限制在 mtu 之內(nèi),實(shí)際應(yīng)用限制太大。 總的說來,內(nèi)核級零拷貝通信協(xié)議實(shí)現(xiàn)簡單,對于通信性能有一定的提高,但 是由于沒有采用 dma 設(shè)備和只能采用百兆網(wǎng)卡實(shí)現(xiàn)等原因,能夠提供的通

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論