[發(fā)明專利]遠程零拷貝方法有效
| 申請?zhí)枺?/td> | 201611003952.4 | 申請日: | 2016-11-15 |
| 公開(公告)號: | CN106598752B | 公開(公告)日: | 2020-05-12 |
| 發(fā)明(設(shè)計)人: | 李大剛;陳詩雁;陳小剛 | 申請(專利權(quán))人: | 北京大學(xué)深圳研究生院 |
| 主分類號: | G06F9/54 | 分類號: | G06F9/54;G06F9/50 |
| 代理公司: | 深圳市科吉華烽知識產(chǎn)權(quán)事務(wù)所(普通合伙) 44248 | 代理人: | 嚴涓逢 |
| 地址: | 518000 廣東省深圳*** | 國省代碼: | 廣東;44 |
| 權(quán)利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關(guān)鍵詞: | 遠程 拷貝 方法 | ||
本發(fā)明涉及網(wǎng)絡(luò)數(shù)據(jù)傳輸領(lǐng)域,其公開了一種遠程零拷貝方法,包括如下步驟:(A)接收端劃分一整塊連續(xù)的緩存區(qū)域用于接收待發(fā)數(shù)據(jù);(B)發(fā)送端對待發(fā)數(shù)據(jù)進行分片處理并拼裝數(shù)據(jù)包后發(fā)送至接收端;(C)接收端將接收到的數(shù)據(jù)包按接收順序通過DMA填充到緩存區(qū)域。本發(fā)明的有益效果是:無需額外的硬件支持,可在現(xiàn)有廣泛使用的普通硬件平臺上實現(xiàn)零拷貝的數(shù)據(jù)網(wǎng)絡(luò)傳輸,可以適用于所有網(wǎng)絡(luò)傳輸需求(而不僅僅是網(wǎng)絡(luò)偵聽),傳輸過程中也能有效地降低通信延遲,提高網(wǎng)絡(luò)吞吐率。
技術(shù)領(lǐng)域
本發(fā)明涉及數(shù)據(jù)傳輸領(lǐng)域,尤其涉及一種遠程零拷貝方法。
背景技術(shù)
一般來說,在傳輸數(shù)據(jù)的時候,用戶應(yīng)用程序需要在用戶空間分配一塊大小合適的緩沖區(qū)用來存放需要傳輸?shù)臄?shù)據(jù)(如果是內(nèi)核模塊的話需要在內(nèi)核空間分配緩沖區(qū),后文以應(yīng)用程序為例,二者處理過程相似的時候就不再加以區(qū)別)。發(fā)送時應(yīng)用程序從文件中讀取一塊數(shù)據(jù)到這個緩沖區(qū)然后通過調(diào)用協(xié)議棧經(jīng)由網(wǎng)絡(luò)發(fā)出,接收時則通過協(xié)議棧使用該緩沖區(qū)獲取網(wǎng)絡(luò)收到的數(shù)據(jù)。雖然用戶應(yīng)用程序只是需要調(diào)用兩個系統(tǒng)調(diào)用read()和write()就可以完成這個數(shù)據(jù)傳輸操作,然而實際上在這個數(shù)據(jù)傳輸?shù)倪^程中,操作系統(tǒng)內(nèi)核會在處理數(shù)據(jù)傳輸?shù)倪^程中進行多次拷貝操作,這些數(shù)據(jù)拷貝操作以及協(xié)議棧的處理會占用大量的CPU時間,當數(shù)據(jù)量大的時候會耗費大量計算資源并影響數(shù)據(jù)傳輸?shù)男阅堋?/p>
具體來說,當應(yīng)用程序需要訪問文件中的某塊數(shù)據(jù)的時候,操作系統(tǒng)內(nèi)核會先檢查這塊數(shù)據(jù)是不是因為前一次對相同文件的訪問而已經(jīng)被存放在操作系統(tǒng)內(nèi)核地址空間的緩沖區(qū)內(nèi),如果在內(nèi)核緩沖區(qū)中找不到這塊數(shù)據(jù), 操作系統(tǒng)內(nèi)核會先將這塊數(shù)據(jù)從磁盤讀出來放到操作系統(tǒng)內(nèi)核的緩沖區(qū)里去,如果這個數(shù)據(jù)讀取操作是由DMA完成的,那么在DMA進行數(shù)據(jù)讀取的這一過程中,CPU只是需要進行緩沖區(qū)管理,以及創(chuàng)建和處理DMA,除此之外,CPU不需要再做更多的事情,DMA執(zhí)行完數(shù)據(jù)讀取操作之后,會通知操作系統(tǒng)做進一步的處理。操作系統(tǒng)會根據(jù)read()系統(tǒng)調(diào)用指定的應(yīng)用程序地址空間的地址,把這塊數(shù)據(jù)存放到請求這塊數(shù)據(jù)的應(yīng)用程序的地址空間中去,在接下來的處理過程中,如果應(yīng)用程序要把這塊數(shù)據(jù)通過網(wǎng)絡(luò)發(fā)送出去,操作系統(tǒng)需要將數(shù)據(jù)再一次從用戶應(yīng)用程序地址空間的緩沖區(qū)拷貝到與網(wǎng)絡(luò)堆棧相關(guān)的內(nèi)核緩沖區(qū)中去,這個過程也是需要占用CPU的。數(shù)據(jù)拷貝操作結(jié)束以后,數(shù)據(jù)會被打包,然后發(fā)送到網(wǎng)絡(luò)接口卡上去。在數(shù)據(jù)傳輸?shù)倪^程中,應(yīng)用程序可以先返回進而執(zhí)行其他的操作。在調(diào)用write()系統(tǒng)調(diào)用之后,用戶應(yīng)用程序緩沖區(qū)中的數(shù)據(jù)內(nèi)容可以被安全的丟棄或者更改,因為操作系統(tǒng)已經(jīng)在內(nèi)核緩沖區(qū)中保留了一份數(shù)據(jù)拷貝,當數(shù)據(jù)被成功傳送到硬件上之后,這份數(shù)據(jù)拷貝就可以被丟棄。
從上面的描述可以看出,在這種傳統(tǒng)的將數(shù)據(jù)從本地文件讀取并通過傳輸過程中,數(shù)據(jù)至少發(fā)生了四次拷貝操作,即便是使用了DMA來進行與硬件的通訊,CPU仍然需要拷貝數(shù)據(jù)兩次:在read()讀數(shù)據(jù)的過程中,數(shù)據(jù)并不是直接來自于硬盤,而是必須先經(jīng)過操作系統(tǒng)的文件系統(tǒng)層;在write()寫數(shù)據(jù)的過程中,為了和要傳輸?shù)臄?shù)據(jù)包的大小相吻合,數(shù)據(jù)必須要先被分割成塊,而且還要預(yù)先考慮包頭,并且要進行數(shù)據(jù)校驗和操作,而這些都要在協(xié)議棧的內(nèi)核空間中完成,也會涉及到數(shù)據(jù)內(nèi)容的拷貝。從網(wǎng)絡(luò)上讀取遠程數(shù)據(jù)并存儲到本地文件的操作過程是上述過程的逆過程,因此也涉及到多次數(shù)據(jù)拷貝。
零拷貝技術(shù)是一種避免網(wǎng)絡(luò)讀寫過程中數(shù)據(jù)頻繁拷貝的技術(shù),可以直接在網(wǎng)絡(luò)接口卡和數(shù)據(jù)目標地址空間之間通過DMA進行數(shù)據(jù)拷貝,從而完全將CPU從數(shù)據(jù)拷貝中解放出來。作用于操作系統(tǒng)中的設(shè)備驅(qū)動程序、文件系統(tǒng)以及網(wǎng)絡(luò)協(xié)議棧而出現(xiàn)的各種零拷貝技術(shù)極大地提升了特定應(yīng)用程序的性能,并降低這些應(yīng)用程序運行時耗費的系統(tǒng)資源。零拷貝技術(shù)可以減少數(shù)據(jù)拷貝和共享總線操作的次數(shù),消除傳輸數(shù)據(jù)在存儲器之間不必要的中間拷貝次數(shù),從而有效地提高數(shù)據(jù)傳輸效率。而且零拷貝技術(shù)減少了用戶應(yīng)用程序地址空間和操作系統(tǒng)內(nèi)核地址空間之間因為上下文切換而帶來的開銷。進行大量的數(shù)據(jù)拷貝操作其實是一件簡單的任務(wù), 從操作系統(tǒng)的角度來說,如果CPU一直被占用著去執(zhí)行這項簡單的任務(wù),是很浪費資源的,如果有其他比較簡單的系統(tǒng)部件可以代勞這件事情,從而使得CPU解脫出來可以做別的事情,那么系統(tǒng)資源的利用則會更加有效。
該專利技術(shù)資料僅供研究查看技術(shù)是否侵權(quán)等信息,商用須獲得專利權(quán)人授權(quán)。該專利全部權(quán)利屬于北京大學(xué)深圳研究生院,未經(jīng)北京大學(xué)深圳研究生院許可,擅自商用是侵權(quán)行為。如果您想購買此專利、獲得商業(yè)授權(quán)和技術(shù)合作,請聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201611003952.4/2.html,轉(zhuǎn)載請聲明來源鉆瓜專利網(wǎng)。





