欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報邀請碼778899分享:學(xué)習(xí) DPDK概述

柚子快報邀請碼778899分享:學(xué)習(xí) DPDK概述

http://yzkb.51969.com/

文章目錄

1. DPDK概述1.1 DPDK 內(nèi)存管理Mbuf單幀結(jié)構(gòu):1.2 DPDK內(nèi)核驅(qū)動 igb_uio驅(qū)動1.3 DPDK源碼下載方式1.4 pktgen源碼下載方式1.5 DPDK相關(guān)名詞解釋

1. DPDK概述

Intel DPDK全稱Intel Data Plane Development Kit,是Intel提供的數(shù)據(jù)平面開發(fā)工具集,為Intel architecture(IA)處理器架構(gòu)下用戶空間高效的數(shù)據(jù)包處理提供庫函數(shù)和驅(qū)動的支持,它不同于Linux系統(tǒng)以通用性設(shè)計為目的,而是專注于網(wǎng)絡(luò)應(yīng)用中數(shù)據(jù)包的高性能處理。DPDK應(yīng)用程序是運(yùn)行在用戶空間上利用自身提供的數(shù)據(jù)平面庫來收發(fā)數(shù)據(jù)包,繞過了Linux內(nèi)核協(xié)議棧對數(shù)據(jù)包處理過程。Linux內(nèi)核將DPDK應(yīng)用程序看作是一個普通的用戶態(tài)進(jìn)程,包括它的編譯、連接和加載方式和普通程序沒有什么兩樣。DPDK程序啟動后只能有一個主線程,然后創(chuàng)建一些子線程并綁定到指定CPU核心上運(yùn)行 DPDK 有三大法寶: ①ByPass Kernel : UIO/VFIO ②微架構(gòu)優(yōu)化: Cache/DDIO/SIMD ③內(nèi)存管理: HugePage/mbuf/mempool

1.1 DPDK 內(nèi)存管理

①hugetlbfs: ②Mbuf:為了高效訪問數(shù)據(jù),DPDK將內(nèi)存封裝在Mbuf(struct rte_mbuf)結(jié)構(gòu)體內(nèi)。 Mbuf主要用來封裝網(wǎng)絡(luò)幀緩存,也可用來封裝通用控制信息緩存(緩存類型需使 用CTRL_MBUF_FLAG來指定)。 網(wǎng)絡(luò)幀元數(shù)據(jù)的一部分內(nèi)容由DPDK的網(wǎng)卡驅(qū)動寫入。這些內(nèi)容包括VLAN標(biāo)簽、RSS哈希值、網(wǎng)絡(luò)幀入口端口號以及巨型幀所占的Mbuf個數(shù)等。 對于巨型幀,網(wǎng)絡(luò)幀元數(shù)據(jù)僅出現(xiàn)在第一個幀的Mbuf結(jié)構(gòu)中,其他的幀該信息為空。

Mbuf單幀結(jié)構(gòu):

Mbuf巨型幀結(jié)構(gòu)(有多個segment): ③Mempool:在DPDK中,數(shù)據(jù)包的內(nèi)存操作對象被抽象化為Mbuf結(jié)構(gòu),而有限的rte_mbuf結(jié)構(gòu)對象則存儲在內(nèi)存池Mempool中。內(nèi)存池使用環(huán)形緩存區(qū)來保存空閑對象。 rte_mempool 內(nèi)部管理是基于rte_ring(無鎖隊列,巧妙運(yùn)用了CAS)實現(xiàn)的 當(dāng)一個網(wǎng)絡(luò)幀被網(wǎng)卡接收時,DPDK的網(wǎng)卡驅(qū)動將其存儲在一個高效的環(huán)形緩存區(qū)中,同時在Mbuf的環(huán)形緩存區(qū)中創(chuàng)建一個Mbuf對象。 為了減少多核訪問造成的沖突,引入了local_cache對象緩沖區(qū)。該local_cache非硬件上的cache,而是為了減少多核訪問ring造成的臨界區(qū)訪問,coreX app會優(yōu)先訪問該local_cache上的對象。

④malloc: 通常,這些類型的分配不應(yīng)該在數(shù)據(jù)面處理中進(jìn)行,因為他們比基于池的分配慢,并且在分配和釋放路徑中使用了鎖操作。 但是,他們可以在配置代碼中使用。 struct malloc_heap - 用于在每個插槽上跟蹤可用內(nèi)存空間:數(shù)據(jù)結(jié)構(gòu)malloc_heap用于管理每個插槽上的可用內(nèi)存空間。 在內(nèi)部,每個NUMA節(jié)點(diǎn)有一個堆結(jié)構(gòu),這允許我們根據(jù)此線程運(yùn)行的NUMA節(jié)點(diǎn)為線程分配內(nèi)存。 雖然這并不能保證在NUMA節(jié)點(diǎn)上使用內(nèi)存,但是它并不比內(nèi)存總是在固定或隨機(jī)節(jié)點(diǎn)上的方案更糟。 struct malloc_elem - 庫內(nèi)部分配和釋放空間跟蹤的基本要素:數(shù)據(jù)結(jié)構(gòu)malloc_elem用作各種內(nèi)存塊的通用頭結(jié)構(gòu)。 它以三種不同的方式使用,如上圖所示: a).作為一個釋放/申請內(nèi)存的頭部 – 正常使用 b).作為內(nèi)存塊內(nèi)部填充頭 c).作為內(nèi)存結(jié)尾標(biāo)記

1.2 DPDK內(nèi)核驅(qū)動 igb_uio驅(qū)動

igb_uio驅(qū)動主要做的就是注冊一個pci設(shè)備。但是igbuio_pci_driver對應(yīng)的保存pci設(shè)備信息的id_table指針為空,這樣在內(nèi)核插入igb_uio驅(qū)動時,會找不到匹配的設(shè)備,就不會調(diào)用igb_uio驅(qū)動中的探測probe函數(shù),只會在/sys目錄下創(chuàng)建igb_uio相應(yīng)的目錄。

變量igbuio_intr_mode_preferred表示中斷的模式,它由igb_uio驅(qū)動模塊的參數(shù)intr_mode決定,有MSIX中斷和Legacy中斷兩種模式,默認(rèn)的是MSIX中斷模式(我們修改成了默認(rèn)是MSI模式) 那么何時調(diào)用igb_uio驅(qū)動中的probe函數(shù)?在下面的測試說明中有提到,進(jìn)行加密設(shè)備綁定(bind)時會進(jìn)行probe。 進(jìn)行設(shè)備bind時igb_uio驅(qū)動做了什么? 記錄設(shè)備的資源:igb_uio驅(qū)動也會遍歷PCI設(shè)備的BAR空間,但是它不會直接使用功能BAR空間的物理地址,而是調(diào)用ioremap函數(shù)將物理地址映射為虛擬地址,驅(qū)動在內(nèi)核態(tài)讀寫操作映射出來的虛擬地址 注冊一個uio設(shè)備:在Linux上的驅(qū)動設(shè)備一般都是運(yùn)行在內(nèi)核態(tài)的,提供接口函數(shù)給用戶態(tài)函數(shù)調(diào)用即可。而新引入的UIO技術(shù),則是將驅(qū)動的大部分事情移到了用戶態(tài)。前面講到probe函數(shù)會記錄設(shè)備的資源,具體而言就是PCI設(shè)備BAR空間的物理地址、大小等信息記錄下來傳給用戶態(tài)。除了記錄BAR空間資源信息,uio框架還會在內(nèi)核態(tài)實現(xiàn)中斷處理相關(guān)的初始化工作。

內(nèi)核uio驅(qū)動框架 ①背景: 通常一些非標(biāo)準(zhǔn)設(shè)備的驅(qū)動被實現(xiàn)為字符驅(qū)動。這些驅(qū)動使用了很多內(nèi)核內(nèi)部函數(shù)和宏。而這些內(nèi)部函數(shù)和宏是變化的。這樣驅(qū)動的編寫者必須編寫一個完全的內(nèi)核驅(qū)動,而且一直維護(hù)這些代碼。而且這些驅(qū)動進(jìn)不了主內(nèi)核源碼。于是就出現(xiàn)了用戶空間I/O框架(Userspace I/O framework)

②原理:UIO(Userspace I/O)是運(yùn)行在用戶空間的I/O技術(shù)。Linux系統(tǒng)中一般的驅(qū)動設(shè)備都是運(yùn)行在內(nèi)核空間,而在用戶空間用應(yīng)用程序調(diào)用即可,而UIO則是將驅(qū)動的很少一部分運(yùn)行在內(nèi)核空間,而在用戶空間實現(xiàn)驅(qū)動的絕大多數(shù)功能。

a).開發(fā)運(yùn)行在內(nèi)核的UIO模塊,因為硬中斷只能在內(nèi)核處理 b).通過/dev/uioX讀取中斷 c).通過mmap和外設(shè)共享內(nèi)存

1.3 DPDK源碼下載方式

①DPDK官網(wǎng): http://core.dpdk.org/download/ ②DPDK git倉庫(該倉庫只能clone): git://dpdk.org/dpdk-stable ③某github主倉庫(該倉庫可以導(dǎo)入成私有倉庫,便于git管理):https://github.com/chaudron/dpdk-stable

1.4 pktgen源碼下載方式

DPDK pktgen官網(wǎng): git://dpdk.org/apps/pktgen-dpdk

1)下載后,查看pktgen-dpdk的git tag,切換到與dpdk版本對應(yīng)的tag

$ git tag

我測試用的dpdk版本是18.11, 經(jīng)編譯對比測試,dpdk18.11選用pktgen-3.7.2最為合適

$ git checkout pktgen-3.7.2

2)切換到tag pktgen-3.7.2后, 直接輸入make即可

3)編譯好后,生成的app/x86_64-native-linuxapp-gcc/pktgen就是我們要的發(fā)包工具

注:pktgen編譯可能需要的前提步驟如下:

$ pip3 install --user meson

$ pip3 install --user ninja

Ubuntu16.04安裝lua5.3

$ sudo apt install liblua5.3-dev

$ sudo apt remove liblua5.3-dev #若要刪除的話

1.5 DPDK相關(guān)名詞解釋

DPDK: Data Plane Development Kit: 數(shù)據(jù)平面開發(fā)工具包 EAL: Environment Abstraction Layer: 環(huán)境抽象層/環(huán)境適配層 NIC: Network Interface Cards: 網(wǎng)卡 PMD: Poll Mode Driver: (基于用戶態(tài)的)輪詢模式驅(qū)動 UIO: Userspace I/O: 運(yùn)行在用戶空間的I/O技術(shù) RTE: RunTime Environment: 運(yùn)行環(huán)境? SDK: Software Development Kit: 軟件開發(fā)工具包 另外關(guān)于SEC snoop ICV含義: ICV: Integrity Check Value: 完整性檢查值, 用于內(nèi)部進(jìn)行hash計算,并比較計算結(jié)果是否與預(yù)期值相同(正確: job output ring status返回0, 錯誤:返回其它值:0x2000004a)

柚子快報邀請碼778899分享:學(xué)習(xí) DPDK概述

http://yzkb.51969.com/

參考文章

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/19616871.html

發(fā)布評論

您暫未設(shè)置收款碼

請在主題配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問

文章目錄