我們的活動在互聯(lián)網(wǎng)上每天都會產(chǎn)生海量的數(shù)據(jù)。我們知道這是一個“很大”的數(shù)字,但你知道到底有多大嗎?
據(jù)粗略估算,目前互聯(lián)網(wǎng)上每天新增的數(shù)據(jù)量超過 1.15 EB 。而預(yù)測到 2025 年,這一數(shù)字會增長到 491 EB。如果看不出來這個數(shù)字有多大,那么看下這個單位換算公式:1 EB = 1*1024*1024*1024 GB。
因為物聯(lián)網(wǎng)也在超快地發(fā)展,無處不在的 IoT 設(shè)備會產(chǎn)生更多的數(shù)據(jù),所以互聯(lián)網(wǎng)數(shù)據(jù)會呈指數(shù)級增長。那么無論是云計算、大數(shù)據(jù)分析應(yīng)用,還是 AI 處理,網(wǎng)絡(luò)傳輸能否及時“吞”下暴漲的數(shù)據(jù),就決定了服務(wù)的能力。
但目前承載互聯(lián)網(wǎng)服務(wù)的主流操作系統(tǒng) Linux卻存在網(wǎng)絡(luò)性能瓶頸,問題出在哪里呢?
1Linux 網(wǎng)絡(luò)的瓶頸
當(dāng) Linux 在 20世紀90 年代初設(shè)計開發(fā) Linux 內(nèi)核時,還無法預(yù)料到未來30年全球互聯(lián)網(wǎng)的規(guī)模,所以也不可能按現(xiàn)在的數(shù)據(jù)流量去做設(shè)計。而 Linux 內(nèi)核的基本結(jié)構(gòu)也保持到現(xiàn)在。
因此問題就在于 Linux 內(nèi)核網(wǎng)絡(luò)協(xié)議棧的實現(xiàn),相對于當(dāng)下的數(shù)據(jù)吞吐量需求,有以下三個原因會產(chǎn)生網(wǎng)絡(luò)傳輸瓶頸:
應(yīng)用程序和網(wǎng)絡(luò)協(xié)議棧在交換數(shù)據(jù)時,會頻繁地在用戶態(tài)與內(nèi)核態(tài)之間切換,導(dǎo)致延時產(chǎn)生;
數(shù)據(jù)要在用戶空間緩存與內(nèi)核空間緩存之間往來復(fù)制,耗費時間;
內(nèi)核協(xié)議棧需要對數(shù)據(jù)進行封裝和解析工作,占用 CPU 時鐘。
內(nèi)核協(xié)議棧方案的數(shù)據(jù)流
辦法總比困難多,《Linux高性能網(wǎng)絡(luò)詳解:從DPDK、RDMA到XDP》一書就針對上述問題給出了包括軟件與硬件的解決辦法。本書的作者是業(yè)內(nèi)資深專家,他在書中以理論結(jié)合實踐,說明了 DPDK、RDMA、XDP 實現(xiàn) Linux 高性能網(wǎng)絡(luò)以及保障傳輸安全的方案。
2DPDK:低成本的高性能網(wǎng)絡(luò)技術(shù)
DPDK(Data Plane Development Kit,數(shù)據(jù)平面開發(fā)工具包)是在用戶態(tài)運行的一組軟件庫和驅(qū)動程序。它的一大優(yōu)點是可以在所有主要 CPU 體系上加速網(wǎng)絡(luò)數(shù)據(jù)包的處理,這樣一來,現(xiàn)有硬件無須升級,只要在內(nèi)核加裝相應(yīng)驅(qū)動就可以提升網(wǎng)絡(luò)性能,是一種低成本的實現(xiàn)方案。
DPDK 技術(shù)原理是繞過 Linux 內(nèi)核協(xié)議棧直接訪問網(wǎng)卡硬件,從而提高網(wǎng)絡(luò)數(shù)據(jù)包的處理速度和吞吐量。DPDK 將網(wǎng)卡的數(shù)據(jù)包直接映射到用戶空間,然后使用高效的數(shù)據(jù)包處理庫進行數(shù)據(jù)包的處理和轉(zhuǎn)發(fā),最后再將數(shù)據(jù)包發(fā)送回網(wǎng)卡。
在數(shù)據(jù)中心、云計算、虛擬化、網(wǎng)絡(luò)安全等應(yīng)用場景中,DPDK可以提高網(wǎng)絡(luò)應(yīng)用的性能和吞吐量、降低網(wǎng)絡(luò)延遲、提高網(wǎng)絡(luò)應(yīng)用的響應(yīng)速度和穩(wěn)定性,還可以支持多種網(wǎng)絡(luò)協(xié)議和數(shù)據(jù)包格式,具有很好的靈活性和可擴展性。
DPDK 為處理數(shù)據(jù)包實現(xiàn)了一個“運行到完成”(run to completion)的模型,在執(zhí)行數(shù)據(jù)平面處理邏輯之前,必須先分配所有資源,然后以邏輯核上執(zhí)行單元(線程)的形式運行。該模型不支持調(diào)度器,以輪詢的方式訪問所有設(shè)備。
DPDK 的核心是一組庫,下圖是核心組件以及它們之間的依賴關(guān)系。
DPDK 核心組件
《Linux高性能網(wǎng)絡(luò)詳解:從DPDK、RDMA到XDP》詳細說明了 DPDK 的內(nèi)存管理與優(yōu)化、DPDK 的編譯與運行方法,介紹了測試和分析高性能網(wǎng)卡的工具與方法,是手把手式的貼心教程。這對于講述內(nèi)核驅(qū)動開發(fā)來說,是相當(dāng)友好的學(xué)習(xí)體驗。
接下來,我們了解一種軟硬件結(jié)合的解決方案。
3RDMA:軟硬兼施的高性能網(wǎng)絡(luò)技術(shù)
RDMA(Remote Direct Memory Access,遠程直接內(nèi)存訪問)提供了一種消息服務(wù),應(yīng)用程序可基于該服務(wù)直接讀寫遠程計算機上的虛擬內(nèi)存。
RDMA 相對于 DPDK 技術(shù),不僅繞過了軟件協(xié)議棧,最大的優(yōu)點是將數(shù)據(jù)封裝和解析工作放在了網(wǎng)卡里,由硬件來實現(xiàn)。這樣就降低了 CPU 的負載,特別適合高性能計算場景,例如分布式神經(jīng)網(wǎng)絡(luò)計算。
它的工作原理是通過操作系統(tǒng)的通信機制建立通道,由應(yīng)用程序在用戶態(tài)直接操作硬件,數(shù)據(jù)無須流經(jīng)內(nèi)核,從而實現(xiàn)高效的網(wǎng)絡(luò)傳輸性能。
下面我們從數(shù)據(jù)在兩臺主機之間的傳輸過程來了解一下 RDMA 的工作方式:
發(fā)送端網(wǎng)卡從本機內(nèi)存用戶空間復(fù)制數(shù)據(jù)到硬件緩沖區(qū),并添加協(xié)議頭,完成封裝工作;
發(fā)送端網(wǎng)卡將數(shù)據(jù)通過網(wǎng)線或光纖將數(shù)據(jù)發(fā)往對端;
接收端網(wǎng)卡收到數(shù)據(jù)后,進行協(xié)議解封裝,然后將數(shù)據(jù)從硬件緩沖區(qū)復(fù)制到本機用戶空間內(nèi)存中。
RDMA 方案的數(shù)據(jù)流
由上述可知,采用 RDMA 方案可以穩(wěn)定獲得網(wǎng)卡最大速率傳輸能力,而不會因為 CPU 負載變化造成傳輸效能波動。但在部署組網(wǎng)時,必須采購支持 RDMA 的特殊網(wǎng)卡。
《Linux高性能網(wǎng)絡(luò)詳解:從DPDK、RDMA到XDP》對 RDMA 組網(wǎng)方案與性能評估測試有詳細說明,對于提供高性能計算服務(wù)的企業(yè)極具參考價值。
4XDP:高效傳輸?shù)谋U?/p>
DPDK 在傳輸數(shù)據(jù)時采用了操作系統(tǒng)內(nèi)核旁路方式,這固然提升了效率,但也失去了操作系統(tǒng)安全機制提供的防護。這樣就存在數(shù)據(jù)被截獲、盜取的風(fēng)險,因此需要有對數(shù)據(jù)的保護措施,同時保證高效傳輸。
XDP(eXpress Data Path,快速數(shù)據(jù)通路)是一種 BPF 的程序/代碼,可以理解為掛載在 BPF 處理流程內(nèi)的掛鉤方法。它能夠在網(wǎng)絡(luò)數(shù)據(jù)到達網(wǎng)卡時就對其處理,而不過多占用 CPU 計算資源。
BPF 提供了在內(nèi)核事件與應(yīng)用程序事件發(fā)生時執(zhí)行一段程序的機制。這使得內(nèi)核可編程,XDP 即基于 BPF 特性為數(shù)據(jù)高速傳輸提供了保障。目前,XDP 已經(jīng)是 Linux 內(nèi)核的一部分,與現(xiàn)有的內(nèi)核網(wǎng)絡(luò)協(xié)議棧完全兼容,二者可以協(xié)同工作 。
XDP 的典型處理流程如下:
從網(wǎng)卡收到數(shù)據(jù)包,提取數(shù)據(jù)報頭信息;
讀取或更新一些元數(shù)據(jù);
根據(jù)需要修改或者重寫數(shù)據(jù)包;
根據(jù)策略決定是丟包、重傳,還是重定向至內(nèi)核協(xié)議棧等。
典型的 XDP 程序的執(zhí)行流程
XDP 擁有諸多優(yōu)點。第一,它由 Linux 內(nèi)核社區(qū)維護,長期使用有保障,也無須額外安裝組件;第二,它可以與內(nèi)核協(xié)同,可復(fù)用內(nèi)核安全模型;第三,BPF能夠識別并拒絕執(zhí)行不安全指令;第四,它不會獨占 CPU,節(jié)約計算資源。
所以,在規(guī)劃高性能網(wǎng)絡(luò)實施方案時,需要將 DPDK 等技術(shù)與 XDP 相結(jié)合,盡可能地在性能與穩(wěn)定、安全之間取得最佳平衡。
5結(jié)語
對于企業(yè)來說,在規(guī)劃和實施網(wǎng)絡(luò)方案時,一定要從自身業(yè)務(wù)特點出發(fā),切忌巨額投資之后卻是高射炮打蚊子的效果。這也需要技術(shù)團隊對 Linux 網(wǎng)絡(luò)技術(shù)原理有透徹理解,然后才能選擇最適合的技術(shù)方案。
例如,業(yè)務(wù)發(fā)展穩(wěn)定且已部署大量 Linux 服務(wù)器的企業(yè),為了提升網(wǎng)絡(luò)效能,可以選擇 DPDK、XDP 技術(shù)。對于意欲進軍 AI 業(yè)務(wù)的新興企業(yè)來說,就要考慮充分解放算力,獲得最優(yōu)傳輸效能,可以選擇 RDMA 技術(shù)路線。而擁有諸多復(fù)雜服務(wù)的云計算廠商,則要混合部署多種網(wǎng)絡(luò)傳輸方案,同時保持穩(wěn)定和速率。
《Linux高性能網(wǎng)絡(luò)詳解:從DPDK、RDMA到XDP》就為實現(xiàn)上述需求提供了很好的指引。從對 DPDK、RDMA、XDP 技術(shù)的原理說明,到深入代碼級別的剖析,再以實例展示使用方法。企業(yè)據(jù)此就可以開展網(wǎng)絡(luò)環(huán)境評估、技術(shù)選型參考、規(guī)劃實施等工作。
在數(shù)據(jù)還將指數(shù)級暴增的未來,互聯(lián)網(wǎng)企業(yè)都要未雨綢繆,及時調(diào)整網(wǎng)絡(luò)環(huán)境,消除網(wǎng)絡(luò)傳輸瓶頸,在未來贏得先機!
審核編輯:湯梓紅
-
互聯(lián)網(wǎng)
+關(guān)注
關(guān)注
54文章
11163瀏覽量
103392 -
Linux
+關(guān)注
關(guān)注
87文章
11312瀏覽量
209713 -
操作系統(tǒng)
+關(guān)注
關(guān)注
37文章
6838瀏覽量
123385 -
網(wǎng)絡(luò)
+關(guān)注
關(guān)注
14文章
7571瀏覽量
88883 -
性能
+關(guān)注
關(guān)注
0文章
271瀏覽量
19005
原文標題:Linux網(wǎng)絡(luò)性能上不去?三招打通瓶頸,從此網(wǎng)絡(luò)高性能
文章出處:【微信號:LinuxDev,微信公眾號:Linux閱碼場】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論