版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
一、DPDK數(shù)據(jù)平面開發(fā)套件(DPDK,DataPlaneDevelopmentKit)是由6WIND,Intel等多家公司開發(fā),主要基于Linux系統(tǒng)運(yùn)行,用于快速數(shù)據(jù)包處理的函數(shù)庫(kù)與驅(qū)動(dòng)集合,可以極大提高數(shù)據(jù)處理性能和吞吐量,提高數(shù)據(jù)平面應(yīng)用程序的工作效率。1.1工作環(huán)境DPDK的環(huán)境抽象層向應(yīng)用與函數(shù)庫(kù)隱藏了底層環(huán)境的細(xì)節(jié),因而能擴(kuò)展到任何處理器上使用。就操作系統(tǒng)來(lái)說(shuō),它提供了對(duì)Linux和FreeBSD的支持。1.2工作原理DPDK使用了輪詢(polling)而不是中斷來(lái)處理數(shù)據(jù)包。在收到數(shù)據(jù)包時(shí),經(jīng)DPDK重載的網(wǎng)卡驅(qū)動(dòng)不會(huì)通過(guò)中斷通知CPU,而是直接將數(shù)據(jù)包存入內(nèi)存,交付應(yīng)用層軟件通過(guò)DPDK提供的接口來(lái)直接處理,這樣節(jié)省了大量的CPU中斷時(shí)間和內(nèi)存拷貝時(shí)間。1.3DPDK技術(shù)核心技術(shù)DPDK網(wǎng)絡(luò)①網(wǎng)絡(luò)協(xié)議棧dpdk-arpdpdk-icmpdpdk-udpdpdk-ipdpdk-tcp②dpdk組件dpdk-mpdpdk-acldpdk-knidpdk-timerdpdk-bpfdpdk-mbuf③dpdk經(jīng)典項(xiàng)目dpdk-dnsdpdk-gatewaydpdk-natdpdk-ddosdpdk-firewall
dpdk-switchdpdk-pktgenDPDK框架①可拓展的矢量數(shù)據(jù)包處理框架vpp(c/c++)vpp命令詳解mac/ip轉(zhuǎn)發(fā)pluginddosnodeload_balancepluginNATpluginflowtablepluginvpp源碼②DPDK的虛擬交換機(jī)框架OVS0vS三大組件ovs-vswitchd,ovsdb-server,openvswitch.ko0vS報(bào)文處理機(jī)制0vS4種數(shù)據(jù)路徑VXLAN數(shù)據(jù)協(xié)議③golang的網(wǎng)絡(luò)開發(fā)框架nff-go(golang)AntiddosFirewallIpsecnetcap④輕量級(jí)的switch框架snabb(lua)12vpnSnabbnfvIpfixlwaftr⑤高效磁盤io讀寫spdk?NVMe,I/OAT,IDXD,Virtio,VMD后端塊設(shè)備NVMe/RBD/AIO存儲(chǔ)服務(wù)bdev與Blobstore存儲(chǔ)協(xié)議iSCSI,NVMe,vhost-scsiDPDK源碼①內(nèi)核驅(qū)動(dòng)igb_uioVfiokni②內(nèi)存MbufMempool③協(xié)議IpsecBpfPciFlow_classify④虛擬化VhostVirtio⑤cpuRcuRingSched⑥安全SecurityCryptodevcompressdev性能測(cè)試①性能指標(biāo)吞吐量
bps拆鏈/建鏈pps并發(fā)最大時(shí)延最小時(shí)延平均時(shí)延負(fù)載包速fps丟包率②測(cè)試方法測(cè)試用例vppsandboxperf3灌包rfc2544③測(cè)試工具perf3TrexTestpmdpktgen-dpdk1.4DPDK技術(shù)特點(diǎn)傳統(tǒng)的數(shù)據(jù)包捕獲瓶頸往往在于LinuxKernel,數(shù)據(jù)流需要經(jīng)過(guò)LinuxKernel,就會(huì)帶來(lái)KernelSpcae和UserSpace數(shù)據(jù)拷貝的消耗;系統(tǒng)調(diào)用的消耗;中斷處理的消耗等。DPDK針對(duì)LinuxKernel傳統(tǒng)的數(shù)據(jù)包捕獲模式的問(wèn)題,進(jìn)行了一定程度的優(yōu)化。DPDK的優(yōu)化可以概括為:UIO+mmap實(shí)現(xiàn)零拷貝(zerocopy)UIO+PMD減少中斷和CPU上下文切換HugePages減少TLBmiss其他代碼優(yōu)化內(nèi)核弊端:1、中斷處理:當(dāng)網(wǎng)絡(luò)中大量數(shù)據(jù)包到來(lái)時(shí),會(huì)頻繁產(chǎn)生中斷請(qǐng)求,頻繁的中斷會(huì)產(chǎn)生較高的性能開銷、并造成上下文的切換產(chǎn)生時(shí)延。2、內(nèi)存拷貝:網(wǎng)絡(luò)數(shù)據(jù)包到來(lái)時(shí),網(wǎng)卡通過(guò)DMA等拷貝到內(nèi)核緩沖區(qū),內(nèi)核協(xié)議棧再?gòu)膬?nèi)核空間拷貝到用戶態(tài)空間,在Linux內(nèi)核協(xié)議棧中,這個(gè)耗時(shí)操作甚至占到了數(shù)據(jù)包整個(gè)處理流程的57.1%。3、局部性失效:目前主流處理器都是多個(gè)CPU核心的,這意味著一個(gè)數(shù)據(jù)包的處理可能跨多個(gè)CPU核心。比如:一個(gè)數(shù)據(jù)包可能中斷在cpu0,內(nèi)核態(tài)處理在cpu1,用戶態(tài)處理在cpu2,這樣跨多個(gè)核心,容易造成CPU緩存失效,造成局部性失效。DPDK優(yōu)點(diǎn):從前面的分析得知目前網(wǎng)絡(luò)IO的實(shí)現(xiàn)的方式中,內(nèi)核是導(dǎo)致性能瓶頸的原因所在,要解決性能問(wèn)題就需要繞過(guò)內(nèi)核,直接在用戶態(tài)收發(fā)包。1、內(nèi)核bypass:通過(guò)UIO(UserspaceI/O)旁路數(shù)據(jù)包,實(shí)現(xiàn)用戶態(tài)數(shù)據(jù)包收發(fā),減少上下文切換以及內(nèi)存拷貝。2、使用多核編程代替多線程編程:設(shè)置CPU的親和性,將線程和CPU核進(jìn)行一比一綁定,減少彼此之間調(diào)度切換。3、使用大頁(yè)內(nèi)存代替普通的內(nèi)存:減少cache-miss。4、采用無(wú)鎖技術(shù):解決資源競(jìng)爭(zhēng)問(wèn)題。二、技術(shù)原理與架構(gòu)由于采用軟件轉(zhuǎn)發(fā)和軟件交換技術(shù),單服務(wù)器內(nèi)部的轉(zhuǎn)發(fā)能力是NFV系統(tǒng)的主要性能瓶頸。在各類高速轉(zhuǎn)發(fā)的NFV應(yīng)用中,數(shù)據(jù)報(bào)文從網(wǎng)卡中接收,再傳送到虛擬化的用戶態(tài)應(yīng)用程序(VNF)處理,整個(gè)過(guò)程要經(jīng)歷CPU中斷處理、虛擬化I/O與地址映射轉(zhuǎn)換、虛擬交換層、網(wǎng)絡(luò)協(xié)議棧、內(nèi)核上下文切換、內(nèi)存拷貝等多個(gè)費(fèi)時(shí)的CPU操作和I/O處理環(huán)節(jié)。業(yè)內(nèi)通常采用消除海量中斷、旁路內(nèi)核協(xié)議棧、減少內(nèi)存拷貝、CPU多核任務(wù)分擔(dān)、IntelVT等技術(shù)來(lái)綜合提升服務(wù)器數(shù)據(jù)平面的報(bào)文處理性能,普通用戶較難掌握。業(yè)界迫切需要一種綜合的性能優(yōu)化方案,同時(shí)提供良好的用戶開發(fā)和商業(yè)集成環(huán)境,DPDK加速技術(shù)方案成為其中的典型代表。DPDK是一個(gè)開源的數(shù)據(jù)平面開發(fā)工具集,提供了一個(gè)用戶空間下的高效數(shù)據(jù)包處理庫(kù)函數(shù),它通過(guò)環(huán)境抽象層旁路內(nèi)核協(xié)議棧、輪詢模式的報(bào)文無(wú)中斷收發(fā)、優(yōu)化內(nèi)存/緩沖區(qū)/隊(duì)列管理、基于網(wǎng)卡多隊(duì)列和流識(shí)別的負(fù)載均衡等多項(xiàng)技術(shù),實(shí)現(xiàn)了在x86處理器架構(gòu)下的高性能報(bào)文轉(zhuǎn)發(fā)能力,用戶可以在Linux用戶態(tài)空間開發(fā)各類高速轉(zhuǎn)發(fā)應(yīng)用,也適合與各類商業(yè)化的數(shù)據(jù)平面加速解決方案進(jìn)行集成。英特爾在2010年啟動(dòng)了對(duì)DPDK技術(shù)的開源化進(jìn)程,于當(dāng)年9月通過(guò)BSD開源許可協(xié)議正式發(fā)布源代碼軟件包,為開發(fā)者提供支持。開源社區(qū)的參與者們大幅推進(jìn)了DPDK的技術(shù)創(chuàng)新和快速演進(jìn),而今它已發(fā)展成為SDN和NFV的一項(xiàng)關(guān)鍵技術(shù)。2.1軟件架構(gòu)DPDK的組成架構(gòu)如下圖所示,相關(guān)技術(shù)原理概述如下:圖中,在最底部的內(nèi)核態(tài)(LinuxKernel)DPDK有兩個(gè)模塊:KNI與IGB_UIO。其中,KNI提供給用戶一個(gè)使用Linux內(nèi)核態(tài)的協(xié)議棧,以及傳統(tǒng)的Linux網(wǎng)絡(luò)工具(如ethtool,ifconfig)。IGB_UIO(igb_uio.ko和kni.ko.IGB_UIO)則借助了UIO技術(shù),在初始化過(guò)程中將網(wǎng)卡硬件寄存器映射到用戶態(tài)。如圖所示,DPDK的上層用戶態(tài)由很多庫(kù)組成,主要包括核心部件庫(kù)(CoreLibraries)、平臺(tái)相關(guān)模塊(Platform)、網(wǎng)卡輪詢模式驅(qū)動(dòng)模塊(PMD-Natives&Virtual)、QoS庫(kù)、報(bào)文轉(zhuǎn)發(fā)分類算法(Classify)等幾大類,用戶應(yīng)用程序可以使用這些庫(kù)進(jìn)行二次開發(fā),下面分別簡(jiǎn)要介紹。核心部件庫(kù)該模塊構(gòu)成的運(yùn)行環(huán)境是建立在Linux上,通過(guò)環(huán)境抽象層(EAL)的運(yùn)行環(huán)境進(jìn)行初始化,包括:HugePage內(nèi)存分配、內(nèi)存/緩沖區(qū)/隊(duì)列分配與無(wú)鎖操作、CPU親和性綁定等;其次,EAL實(shí)現(xiàn)了對(duì)操作系統(tǒng)內(nèi)核與底層網(wǎng)卡I/O操作的屏蔽(I/O旁路了內(nèi)核及其協(xié)議棧),為DPDK應(yīng)用程序提供了一組調(diào)用接口,通過(guò)UIO或VFIO技術(shù)將PCI設(shè)備地址映射到用戶空間,方便了應(yīng)用程序調(diào)用,避免了網(wǎng)絡(luò)協(xié)議棧和內(nèi)核切換造成的處理延遲。另外,核心部件還包括創(chuàng)建適合報(bào)文處理的內(nèi)存池、緩沖區(qū)分配管理、內(nèi)存拷貝、以及定時(shí)器、環(huán)形緩沖區(qū)管理等。平臺(tái)相關(guān)模塊其內(nèi)部模塊主要包括KNI、能耗管理以及IVSHMEM接口。其中,KNI模塊主要通過(guò)kni.ko模塊將數(shù)據(jù)報(bào)文從用戶態(tài)傳遞給內(nèi)核態(tài)協(xié)議棧處理,以便用戶進(jìn)程使用傳統(tǒng)的socket接口對(duì)相關(guān)報(bào)文進(jìn)行處理;能耗管理則提供了一些API,應(yīng)用程序可以根據(jù)收包速率動(dòng)態(tài)調(diào)整處理器頻率或進(jìn)入處理器的不同休眠狀態(tài);另外,IVSHMEM模塊提供了虛擬機(jī)與虛擬機(jī)之間,或者虛擬機(jī)與主機(jī)之間的零拷貝共享內(nèi)存機(jī)制,當(dāng)DPDK程序運(yùn)行時(shí),IVSHMEM模塊會(huì)調(diào)用核心部件庫(kù)API,把幾個(gè)HugePage映射為一個(gè)IVSHMEM設(shè)備池,并通過(guò)參數(shù)傳遞給QEMU,這樣,就實(shí)現(xiàn)了虛擬機(jī)之間的零拷貝內(nèi)存共享。輪詢模式驅(qū)動(dòng)模塊PMD相關(guān)API實(shí)現(xiàn)了在輪詢方式下進(jìn)行網(wǎng)卡報(bào)文收發(fā),避免了常規(guī)報(bào)文處理方法中因采用中斷方式造成的響應(yīng)延遲,極大提升了網(wǎng)卡收發(fā)性能。此外,該模塊還同時(shí)支持物理和虛擬化兩種網(wǎng)絡(luò)接口,從僅僅支持Intel網(wǎng)卡,發(fā)展到支持Cisco、Broadcom、Mellanox、Chelsio等整個(gè)行業(yè)生態(tài)系統(tǒng),以及基于KVM、VMWARE、XEN等虛擬化網(wǎng)絡(luò)接口的支持。DPDK還定義了大量API來(lái)抽象數(shù)據(jù)平面的轉(zhuǎn)發(fā)應(yīng)用,如ACL、QoS、流分類和負(fù)載均衡等。并且,除以太網(wǎng)接口外,DPDK還在定義用于加解密的軟硬件加速接口(Extensions)。2.2大頁(yè)技術(shù)處理器的內(nèi)存管理包含兩個(gè)概念:物理內(nèi)存和虛擬內(nèi)存。Linux操作系統(tǒng)里面整個(gè)物理內(nèi)存按幀(frames)來(lái)進(jìn)行管理,虛擬內(nèi)存按照頁(yè)(page)來(lái)進(jìn)行管理。內(nèi)存管理單元(MMU)完成從虛擬內(nèi)存地址到物理內(nèi)存地址的轉(zhuǎn)換。內(nèi)存管理單元進(jìn)行地址轉(zhuǎn)換需要的信息保存在一個(gè)叫頁(yè)表(pagetable)的數(shù)據(jù)結(jié)構(gòu)里面,頁(yè)表查找是一種極其耗時(shí)的操作。為了減少頁(yè)表的查找過(guò)程,Intel處理器實(shí)現(xiàn)了一塊緩存來(lái)保存查找結(jié)果,這塊緩存被稱為TLB(TranslationLookasideBuffer),它保存了虛擬地址到物理地址的映射關(guān)系。所有虛擬地址在轉(zhuǎn)換為物理地址以前,處理器會(huì)首先在TLB中查找是否已經(jīng)存在有效的映射關(guān)系,如果沒有發(fā)現(xiàn)有效的映射,也就是TLSmiss,處理器再進(jìn)行頁(yè)表的查找。頁(yè)表的查找過(guò)程對(duì)性能影響極大,因此需要盡量減少TLBmiss的發(fā)生。x86處理器硬件在缺省配置下,頁(yè)的大小是4K,但也可以支持更大的頁(yè)表尺寸,例如2M或1G的頁(yè)表。使用了大頁(yè)表功能后,一個(gè)TLB表項(xiàng)可以指向更大的內(nèi)存區(qū)域,這樣可以大幅減少TLBmiss的發(fā)生。早期的Linux并沒有利用x86硬件提供的大頁(yè)表功能,僅在Linux內(nèi)核2.6.33以后的版本,應(yīng)用軟件才可以使用大頁(yè)表功能,具體的介紹可以參見Linux的大頁(yè)表文件系統(tǒng)(hugetlbfs)特性。DPDK則利用大頁(yè)技術(shù),所有的內(nèi)存都是從HugePage里分配,實(shí)現(xiàn)對(duì)內(nèi)存池(mempool)的管理,并預(yù)先分配好同樣大小的mbuf,供每一個(gè)數(shù)據(jù)包使用。2.3輪詢技術(shù)傳統(tǒng)網(wǎng)卡的報(bào)文接收/發(fā)送過(guò)程中,網(wǎng)卡硬件收到網(wǎng)絡(luò)報(bào)文,或發(fā)送完網(wǎng)絡(luò)報(bào)文后,需要發(fā)送中斷到CPU,通知應(yīng)用軟件有網(wǎng)絡(luò)報(bào)文需要處理。在x86處理器上,一次中斷處理需要將處理器的狀態(tài)寄存器保存到堆棧,并運(yùn)行中斷服務(wù)程序,最后再將保存的狀態(tài)寄存器信息從堆棧中恢復(fù)。整個(gè)過(guò)程需要至少300個(gè)處理器時(shí)鐘周期。對(duì)于高性能網(wǎng)絡(luò)處理應(yīng)用,頻繁的中斷處理開銷極大降低了網(wǎng)絡(luò)應(yīng)用程序的性能。為了減少中斷處理開銷,DPDK使用了輪詢技術(shù)來(lái)處理網(wǎng)絡(luò)報(bào)文。網(wǎng)卡收到報(bào)文后,直接將報(bào)文保存到處理器cache中(有DDIO(DirectDataI/O)技術(shù)的情況下),或者保存到內(nèi)存中(沒有DDIO技術(shù)的情況下),并設(shè)置報(bào)文到達(dá)的標(biāo)志位。應(yīng)用軟件則周期性地輪詢報(bào)文到達(dá)的標(biāo)志位,檢測(cè)是否有新報(bào)文需要處理。整個(gè)過(guò)程中完全沒有中斷處理過(guò)程,因此應(yīng)用程序的網(wǎng)絡(luò)報(bào)文處理能力得以極大提升。2.4CPU親和技術(shù)現(xiàn)代操作系統(tǒng)都是基于分時(shí)調(diào)用方式來(lái)實(shí)現(xiàn)任務(wù)調(diào)度,多個(gè)進(jìn)程或線程在多核處理器的某一個(gè)核上不斷地交替執(zhí)行。每次切換過(guò)程,都需要將處理器的狀態(tài)寄存器保存在堆棧中,并恢復(fù)當(dāng)前進(jìn)程的狀態(tài)信息,這對(duì)系統(tǒng)其實(shí)是一種處理開銷。將一個(gè)線程固定一個(gè)核上運(yùn)行,可以消除切換帶來(lái)的額外開銷。另外將進(jìn)程或者線程遷移到多核處理器的其它核上進(jìn)行運(yùn)行時(shí),處理器緩存中的數(shù)據(jù)也需要進(jìn)行清除,導(dǎo)致處理器緩存的利用效果降低。CPU親和技術(shù),就是將某個(gè)進(jìn)程或者線程綁定到特定的一個(gè)或者多個(gè)核上執(zhí)行,而不被遷移到其它核上運(yùn)行,這樣就保證了專用程序的性能。DPDK使用了Linuxpthread庫(kù),在系統(tǒng)中把相應(yīng)的線程和CPU進(jìn)行親和性綁定,然后相應(yīng)的線程盡可能使用獨(dú)立的資源進(jìn)行相關(guān)的數(shù)據(jù)處理。2.5UIO技術(shù)dpdk能夠繞過(guò)內(nèi)核協(xié)議棧,本質(zhì)上是得益于UIO技術(shù),通過(guò)UIO能夠攔截中斷,并重設(shè)中斷回調(diào)行為,從而繞過(guò)內(nèi)核協(xié)議棧后續(xù)的處理流程。UIO設(shè)備的實(shí)現(xiàn)機(jī)制其實(shí)是對(duì)用戶空間暴露文件接口,比如當(dāng)注冊(cè)一個(gè)UIO設(shè)備uioX,就會(huì)出現(xiàn)文件/dev/uioX,對(duì)該文件的讀寫就是對(duì)設(shè)備內(nèi)存的讀寫。除此之外,對(duì)設(shè)備的控制還可以通過(guò)/sys/class/uio下的各個(gè)文件的讀寫來(lái)完成。2.6內(nèi)存池技術(shù)dpdk在用戶空間實(shí)現(xiàn)了一套精巧的內(nèi)存池技術(shù),內(nèi)核空間和用戶空間的內(nèi)存交互不進(jìn)行拷貝,只做控制權(quán)轉(zhuǎn)移。這樣,當(dāng)收發(fā)數(shù)據(jù)包時(shí),就減少了內(nèi)存拷貝的開銷。2.7大頁(yè)內(nèi)存管理dpdk實(shí)現(xiàn)了一組大頁(yè)內(nèi)存分配、使用和釋放的API,上層應(yīng)用可以很方便使用API申請(qǐng)使用大頁(yè)內(nèi)存,同時(shí)也兼容普通的內(nèi)存申請(qǐng)。2.8無(wú)鎖環(huán)形隊(duì)列dpdk基于Linux內(nèi)核的無(wú)鎖環(huán)形緩沖kfifo實(shí)現(xiàn)了自己的一套無(wú)鎖機(jī)制。支持單生產(chǎn)者入列/單消費(fèi)者出列和多生產(chǎn)者入列/多消費(fèi)者出列操作,在數(shù)據(jù)傳輸?shù)臅r(shí)候,降低性能的同時(shí)還能保證數(shù)據(jù)的同步。2.9poll-mode網(wǎng)卡驅(qū)動(dòng)DPDK網(wǎng)卡驅(qū)動(dòng)完全拋棄中斷模式,基于輪詢方式收包,避免了中斷開銷。2.10NUMAdpdk內(nèi)存分配上通過(guò)proc提供的內(nèi)存信息,使CPU核心盡量使用靠近其所在節(jié)點(diǎn)的內(nèi)存,避免了跨NUMA節(jié)點(diǎn)遠(yuǎn)程訪問(wèn)內(nèi)存的性能問(wèn)題。2.11多核調(diào)度框架dpdk基于多核架構(gòu),一般會(huì)有主從核之分,主核負(fù)責(zé)完成各個(gè)模塊的初始化,從核負(fù)責(zé)具體的業(yè)務(wù)處理。三、DPDK在AWCloud中的應(yīng)用DPDK(DataPlaneDevelopmentKit)數(shù)據(jù)平面開發(fā)工具集,為Intelarchitecture(IA)處理器架構(gòu)下用戶空間高效的數(shù)據(jù)包處理提供庫(kù)函數(shù)和驅(qū)動(dòng)的支持,它不同于Linux系統(tǒng)以通用性設(shè)計(jì)為目的,而是專注于網(wǎng)絡(luò)應(yīng)用中數(shù)據(jù)包的高性能處理。DPDK應(yīng)用程序是運(yùn)行在用戶空間上利用自身提供的數(shù)據(jù)平面庫(kù)來(lái)收發(fā)數(shù)據(jù)包,繞過(guò)了Linux內(nèi)核協(xié)議棧對(duì)數(shù)據(jù)包處理過(guò)程。加速數(shù)據(jù)的處理,用戶可以在用戶空間定制協(xié)議棧,滿足自己的應(yīng)用需求。相對(duì)傳統(tǒng)的基于內(nèi)核的網(wǎng)絡(luò)數(shù)據(jù)處理,DPDK對(duì)從內(nèi)核層到用戶層的網(wǎng)絡(luò)數(shù)據(jù)流程進(jìn)行了重大突破。DPDK功能用于加速云主機(jī)和物理主機(jī)處理網(wǎng)絡(luò)數(shù)據(jù)包的速度。配合大頁(yè)內(nèi)存和CPUAffinity等一系列技術(shù),繞過(guò)系統(tǒng)對(duì)網(wǎng)絡(luò)數(shù)據(jù)包處理的繁瑣過(guò)程,提升網(wǎng)絡(luò)性能。云平臺(tái)采用DPDK技術(shù)滿足網(wǎng)絡(luò)性能優(yōu)化,如下圖所示:3.1高性能網(wǎng)絡(luò)技術(shù)傳統(tǒng)的網(wǎng)絡(luò)設(shè)備(交換機(jī)、路由器等)為了快速處理數(shù)據(jù)包而嵌入了NP處理器(NetworkProcess),內(nèi)置硬件電路實(shí)現(xiàn)高速轉(zhuǎn)發(fā)數(shù)據(jù)包。隨著云計(jì)算的發(fā)展以CPU為核心、操作系統(tǒng)是linux,網(wǎng)絡(luò)設(shè)備都是虛擬化,沒有NP處理器。傳統(tǒng)網(wǎng)絡(luò)框架處理流程:隨著云計(jì)算產(chǎn)業(yè)的異軍突起,網(wǎng)絡(luò)技術(shù)的不斷創(chuàng)新,越來(lái)越多的網(wǎng)絡(luò)設(shè)備基礎(chǔ)架構(gòu)逐步向基于通用處理器平臺(tái)的架構(gòu)方向融合,從傳統(tǒng)的物理網(wǎng)絡(luò)到虛擬網(wǎng)絡(luò),從扁平化的網(wǎng)絡(luò)結(jié)構(gòu)到基于SDN分層的網(wǎng)絡(luò)結(jié)構(gòu),無(wú)不體現(xiàn)出這種創(chuàng)新與融合。這在使得網(wǎng)絡(luò)變得更加可控制和成本更低的同時(shí),也能夠支持大規(guī)模用戶或應(yīng)用程序的性能需求,以及海量數(shù)據(jù)的處理。究其原因,其實(shí)是高性能網(wǎng)絡(luò)編程技術(shù)隨著網(wǎng)絡(luò)架構(gòu)的演進(jìn)不斷突破的一種必然結(jié)果。C10K到C10M問(wèn)題的演進(jìn)如今,關(guān)注的更多是C10M問(wèn)題(即單機(jī)1千萬(wàn)個(gè)并發(fā)連接問(wèn)題)。很多計(jì)算機(jī)領(lǐng)域的大佬們從硬件上和軟件上都提出了多種解決方案。從硬件上,比如說(shuō),現(xiàn)在的類似很多40Gpbs、32-cores、256GRAM這樣配置的X86
服務(wù)器完全可以處理1千萬(wàn)個(gè)以上的并發(fā)連接。但是從硬件上解決問(wèn)題就沒多大意思了,首先它成本高,其次不通用,最后也沒什么挑戰(zhàn),無(wú)非就是堆砌硬件而已。所以,拋開硬件不談,我們看看從軟件上該如何解決這個(gè)世界難題呢?這里不得不提一個(gè)人,就是ErrataSecurity公司的CEORobertGraham,他在Shmoocon2013大會(huì)上很巧妙地解釋了這個(gè)問(wèn)題。他提到了UNIX的設(shè)計(jì)初衷其實(shí)為電話網(wǎng)絡(luò)的控制系統(tǒng)而設(shè)計(jì)的,而不是一般的服務(wù)器操作系統(tǒng),所以,它僅僅是一個(gè)數(shù)據(jù)負(fù)責(zé)數(shù)據(jù)傳送的系統(tǒng),沒有所謂的控制層面和數(shù)據(jù)層面的說(shuō)法,不適合處理大規(guī)模的網(wǎng)絡(luò)數(shù)據(jù)包。最后他得出的結(jié)論是:OS的內(nèi)核不是解決C10M問(wèn)題的辦法,恰恰相反OS的內(nèi)核正式導(dǎo)致C10M問(wèn)題的關(guān)鍵所在?;贠S內(nèi)核的數(shù)據(jù)傳輸有什么弊端?1、中斷處理。當(dāng)網(wǎng)絡(luò)中大量數(shù)據(jù)包到來(lái)時(shí),會(huì)產(chǎn)生頻繁的硬件中斷請(qǐng)求,這些硬件中斷可以打斷之前較低優(yōu)先級(jí)的軟中斷或者系統(tǒng)調(diào)用的執(zhí)行過(guò)程,如果這種打斷頻繁的話,將會(huì)產(chǎn)生較高的性能開銷。2、內(nèi)存拷貝。正常情況下,一個(gè)網(wǎng)絡(luò)數(shù)據(jù)包從網(wǎng)卡到應(yīng)用程序需要經(jīng)過(guò)如下的過(guò)程:數(shù)據(jù)從網(wǎng)卡通過(guò)DMA等方式傳到內(nèi)核開辟的緩沖區(qū),然后從內(nèi)核空間拷貝到用戶態(tài)空間,在Linux內(nèi)核協(xié)議棧中,這個(gè)耗時(shí)操作甚至占到了數(shù)據(jù)包整個(gè)處理流程的57.1%。3、上下文切換。頻繁到達(dá)的硬件中斷和軟中斷都可能隨時(shí)搶占系統(tǒng)調(diào)用的運(yùn)行,這會(huì)產(chǎn)生大量的上下文切換開銷。另外,在基于多線程的服務(wù)器設(shè)計(jì)框架中,線程間的調(diào)度也會(huì)產(chǎn)生頻繁的上下文切換開銷,同樣,鎖競(jìng)爭(zhēng)的耗能也是一個(gè)非常嚴(yán)重的問(wèn)題。4、局部性失效。如今主流的處理器都是多個(gè)核心的,這意味著一個(gè)數(shù)據(jù)包的處理可能跨多個(gè)CPU核心,比如一個(gè)數(shù)據(jù)包可能中斷在cpu0,內(nèi)核態(tài)處理在cpu1,用戶態(tài)處理在cpu2,這樣跨多個(gè)核心,容易造成CPU緩存失效,造成局部性失效。如果是NUMA架構(gòu),更會(huì)造成跨NUMA訪問(wèn)內(nèi)存,性能受到很大影響。5、內(nèi)存管理。傳統(tǒng)服務(wù)器內(nèi)存頁(yè)為4K,為了提高內(nèi)存的訪問(wèn)速度,避免cachemiss,可以增加cache中映射表的條目,但這又會(huì)影響CPU的檢索效率。6、協(xié)議棧的低效性。Linix誕生之初就是為電話電報(bào)控制而設(shè)計(jì)的,它的控制平面和數(shù)據(jù)轉(zhuǎn)發(fā)平面沒有分離,不適合處理大規(guī)模網(wǎng)絡(luò)數(shù)據(jù)包。并且為了全面的支持用戶空間的各個(gè)功能,協(xié)議棧中嵌入了大量用于對(duì)接的接口,如果能讓應(yīng)用程序直接接管網(wǎng)絡(luò)數(shù)據(jù)包處理、內(nèi)存管理以及CPU調(diào)度,那么性能可以得到一個(gè)質(zhì)的提升。為了達(dá)到這個(gè)目標(biāo),第一個(gè)要解決的問(wèn)題就是繞過(guò)Linux內(nèi)核協(xié)議棧,因?yàn)長(zhǎng)inux內(nèi)核協(xié)議棧性能并不是很優(yōu)秀,如果讓每一個(gè)數(shù)據(jù)包都經(jīng)過(guò)Linux協(xié)議棧來(lái)處理,那將會(huì)非常的慢。像WindRiver和6WindGate等公司自研的內(nèi)核協(xié)議棧宣稱比LinuxUDP/TCP協(xié)議棧性能至少提高500%以上,因此能不用Linux協(xié)議棧就不用。不用協(xié)議棧的話當(dāng)然就需要自己寫驅(qū)動(dòng)了,應(yīng)用程序直接使用驅(qū)動(dòng)的接口來(lái)收發(fā)報(bào)文。PF_RING,Netmap和intelDPDK等可以幫助你完成這些工作,并不需要我們自己去花費(fèi)太多時(shí)間。Intel官方測(cè)試文檔給出了一個(gè)性能測(cè)試數(shù)據(jù),在1SSandbridge-EP8*2.0GHzcores服務(wù)器上進(jìn)行性能測(cè)試,不用內(nèi)核協(xié)議棧在用戶態(tài)下吞吐量可高達(dá)80Mpps(每個(gè)包處理消耗大約200cpuclocks),相比之下,使用Linux內(nèi)核協(xié)議棧性能連1Mpps都無(wú)法達(dá)到。7、多核協(xié)同問(wèn)題。多核的可擴(kuò)展性對(duì)性能提升也是非常重要的,因?yàn)榉?wù)器中CPU頻率提升越來(lái)越慢,納米級(jí)工藝改進(jìn)已經(jīng)是非常困難的事情了,但可以做的是讓服務(wù)器擁有更多的CPU和核心,像國(guó)家超級(jí)計(jì)算中心的天河二號(hào)使用了超過(guò)3w顆XeonE5來(lái)提高性能。在程序設(shè)計(jì)過(guò)程中,即使在多核環(huán)境下也很快會(huì)碰到瓶頸,單純的增加了處理器個(gè)數(shù)并不能線性提升程序性能,反而會(huì)使整體性能越來(lái)越低。一是因?yàn)榫帉懘a的質(zhì)量問(wèn)題,沒有充分利用多核的并行性,二是服務(wù)器軟件和硬件本身的一些特性成為新的瓶頸,像總線競(jìng)爭(zhēng)、存儲(chǔ)體公用等諸多影響性能平行擴(kuò)展的因素。那么,我們?cè)鯓硬拍茏尦绦蚰茉诙鄠€(gè)CPU核心上平行擴(kuò)展:盡量讓每個(gè)核維護(hù)獨(dú)立數(shù)據(jù)結(jié)構(gòu);使用原子操作來(lái)避免沖突;使用無(wú)鎖數(shù)據(jù)結(jié)構(gòu)避免線程間相互等待;設(shè)置CPU親緣性,將操作系統(tǒng)和應(yīng)用進(jìn)程綁定到特定的內(nèi)核上,避免CPU資源競(jìng)爭(zhēng);在NUMA架構(gòu)下盡量避免遠(yuǎn)端內(nèi)存訪問(wèn)綜合以上問(wèn)題,可以看出內(nèi)核本身就是一個(gè)非常大的瓶頸所在。那很明顯解決方案就是想辦法繞過(guò)內(nèi)核。3.2解決方案探討針對(duì)以上弊端,分別提出以下技術(shù)點(diǎn)進(jìn)行探討:控制層和數(shù)據(jù)層分離。將數(shù)據(jù)包處理、內(nèi)存管理、處理器調(diào)度等任務(wù)轉(zhuǎn)移到用戶空間去完成,而內(nèi)核僅僅負(fù)責(zé)部分控制指令的處理。這樣就不存在上述所說(shuō)的系統(tǒng)中斷、上下文切換、系統(tǒng)調(diào)用、系統(tǒng)調(diào)度等等問(wèn)題。使用多核編程技術(shù)代替多線程技術(shù),并設(shè)置CPU的親和性,將線程和CPU核進(jìn)行一比一綁定,減少彼此之間調(diào)度切換。針對(duì)NUMA系統(tǒng),盡量使CPU核使用所在NUMA節(jié)點(diǎn)的內(nèi)存,避免跨內(nèi)存訪問(wèn)。使用大頁(yè)內(nèi)存代替普通的內(nèi)存,減少cache-miss。采用無(wú)鎖技術(shù)解決資源競(jìng)爭(zhēng)問(wèn)題。經(jīng)很多前輩先驅(qū)的研究,目前業(yè)內(nèi)已經(jīng)出現(xiàn)了很多優(yōu)秀的集成了上述技術(shù)方案的高性能網(wǎng)絡(luò)數(shù)據(jù)處理框架,如wind、windriver、netmap、dpdk等,其中,Intel的dpdk在眾多方案脫穎而出,一騎絕塵。DPDK目前支持的CPU體系架構(gòu)包括x86、ARM、PowerPC(PPC),支持的網(wǎng)卡列表:包括主流使用Intel82599(光口)、Intelx540(電口)。dpdk全稱dataplanedevelopmentkit(數(shù)據(jù)平面轉(zhuǎn)發(fā)工具),為Intel處理器架構(gòu)下用戶空間高效的數(shù)據(jù)包處理提供了庫(kù)函數(shù)和驅(qū)動(dòng)的支持,數(shù)據(jù)包的控制層和數(shù)據(jù)層分開,dpdk繞過(guò)linux內(nèi)核協(xié)議棧將數(shù)據(jù)包的接受處理放到應(yīng)用層。也就是dpdk繞過(guò)了Linux內(nèi)核協(xié)議棧對(duì)數(shù)據(jù)包的處理過(guò)程,在用戶空間實(shí)現(xiàn)了一套數(shù)據(jù)平面來(lái)進(jìn)行數(shù)據(jù)包的收發(fā)與處理。在內(nèi)核看來(lái),dpdk就是一個(gè)普通的用戶態(tài)進(jìn)程,它的編譯、連接和加載方式和普通程序沒有什么兩樣。四、DPDk應(yīng)用場(chǎng)景dpdk作為優(yōu)秀的用戶空間高性能數(shù)據(jù)包加速套件,現(xiàn)在已經(jīng)作為一個(gè)“膠水”模塊被用在多個(gè)網(wǎng)絡(luò)數(shù)據(jù)處理方案中,用來(lái)提高性能。如下是眾多的應(yīng)用。4.1網(wǎng)絡(luò)虛擬化網(wǎng)絡(luò)虛擬化是一種將物理網(wǎng)絡(luò)資源虛擬化為多個(gè)邏輯網(wǎng)絡(luò)資源的技術(shù),它可以幫助企業(yè)節(jié)省網(wǎng)絡(luò)設(shè)備成本,提高網(wǎng)絡(luò)資源利用率。DPDK可以幫助網(wǎng)絡(luò)虛擬化平臺(tái)實(shí)現(xiàn)高性能、低延遲的數(shù)據(jù)包處理,從而提高虛擬網(wǎng)絡(luò)的性能和可靠性。4.2云計(jì)算云計(jì)算是一-種將計(jì)算資源虛擬化為多個(gè)邏輯計(jì)算資源的技術(shù),它可以幫助企業(yè)節(jié)省計(jì)算資源成本,提高計(jì)算資源利用率。DPDK可以幫助云計(jì)算平臺(tái)實(shí)現(xiàn)高性能、低延遲的數(shù)據(jù)包處理,從而提高云計(jì)算的性能和可靠性。4.3網(wǎng)絡(luò)安全網(wǎng)絡(luò)安全是一種保護(hù)網(wǎng)絡(luò)資源免受惡意攻擊的技術(shù),它可以幫助企業(yè)保護(hù)網(wǎng)絡(luò)資源的安全性和可靠性。DPDK可以幫助網(wǎng)絡(luò)安全平臺(tái)實(shí)現(xiàn)高性能、低延遲的數(shù)據(jù)包處理,從而提高網(wǎng)絡(luò)安全的性能和可靠性。4.45G通信5G通信是一-種新一代的移動(dòng)通信技術(shù),它可以幫助企業(yè)實(shí)現(xiàn)更快、更可靠的移動(dòng)通信服務(wù)。DPDK可以幫助5G通信平臺(tái)實(shí)現(xiàn)高性能、低延遲的數(shù)據(jù)包處理,從而提高5G通信的性能和可靠性。4.5數(shù)據(jù)面(虛擬交換機(jī))OVS:OpenvSwitch是一個(gè)多核虛擬交換機(jī)平臺(tái),支持標(biāo)準(zhǔn)的管理接口和開放可擴(kuò)展的可編程接口,支持第三方的控制接入。VPP:是cisco開源的一個(gè)高性能的包處理框架,提供了交換/路由功能,在虛擬化環(huán)境中,使它可以當(dāng)做一個(gè)虛擬交換機(jī)來(lái)使用。在一個(gè)類SDN的處理框架中,它往往充當(dāng)數(shù)據(jù)面的角色。經(jīng)研究表明,VPP性能要好于ovs+dpdk的組合,但它更適用于NFV,適合做特定功能的網(wǎng)絡(luò)模塊。Lagopus:是另一個(gè)多核虛擬交換的實(shí)現(xiàn),功能和OVS差不多,支持多種網(wǎng)絡(luò)協(xié)議,如Ethernet,VLAN,QinQ,MAC-in-MAC,MPLS和PBB,以及隧道協(xié)議,如GRE,VxLan和GTP。Snabb:
是一個(gè)簡(jiǎn)單且快速的數(shù)據(jù)包處理工具箱。4.6數(shù)據(jù)面(虛擬路由器)OPENCONTRAIL:一個(gè)集成了SDN控制器的虛擬路由器,現(xiàn)在多用在OpenStack中,結(jié)合Neutron為OpenStack提供一站式的網(wǎng)絡(luò)支持。CloudRouter:一個(gè)分布式的路由器。4.7用戶空間協(xié)議棧mTCP:是一個(gè)針對(duì)多核系統(tǒng)的高可擴(kuò)展性的用戶空間TCP/IP協(xié)議棧。IwIP:針對(duì)RAM平臺(tái)的精簡(jiǎn)版的TCP/IP協(xié)議棧實(shí)現(xiàn)。Seastar:是一個(gè)開源的,基于C++11/14feature,支持高并發(fā)和低延遲的異步編程高性能庫(kù)。f-stack:騰訊開源的用戶空間協(xié)議棧,移植于FreeBSD協(xié)議棧,粘合了POSIXAPI,上層應(yīng)用(協(xié)程框架,Nginx,Redis),純C編寫,易上手。五、DPDK的影響力通信行業(yè)通信行業(yè)正逐步遷移至虛擬化,以便在其網(wǎng)絡(luò)環(huán)境中增強(qiáng)彈性、靈活性和標(biāo)準(zhǔn)化,隨著時(shí)間的推移,這種趨勢(shì)的發(fā)展已經(jīng)變得更加多元化。SDN、NFV、DPDK、Openflow和OpenvSwitch都得以使用。移動(dòng)網(wǎng)的PGW網(wǎng)元和寬帶網(wǎng)絡(luò)的BRAS類轉(zhuǎn)發(fā)設(shè)備,對(duì)轉(zhuǎn)發(fā)性能有著非常高的要求。如果用x86架構(gòu)的NFV服務(wù)器取代上述設(shè)備,由于Linux內(nèi)核的限制和通用I/O報(bào)文讀寫方式,這種基于傳統(tǒng)Linux和虛擬化技術(shù)的轉(zhuǎn)發(fā)平面萬(wàn)兆端口普遍僅有1Gbit/s以內(nèi)的轉(zhuǎn)發(fā)能力;而目前的電信級(jí)硬件轉(zhuǎn)發(fā)設(shè)備可以輕松做到64byte小報(bào)文不分組丟失線速轉(zhuǎn)發(fā)。下一代防火墻持續(xù)優(yōu)化網(wǎng)路安全需要不斷改進(jìn)防火墻的實(shí)施,這將受益于DPDK并不斷發(fā)展。下一代防火墻也可以是NFV解決方案的一部分。用于簡(jiǎn)單數(shù)據(jù)分組過(guò)濾的基本防火墻已演進(jìn)多年,可以執(zhí)行更加高級(jí)的應(yīng)用,比如入侵檢測(cè)與防御(IPS)、網(wǎng)絡(luò)殺毒、IPsec、SSL和應(yīng)用控制等。這些功能均位于數(shù)據(jù)平臺(tái),要求對(duì)數(shù)據(jù)流進(jìn)行深度數(shù)據(jù)包檢查、具備加密和壓縮功能,以及執(zhí)行大量數(shù)據(jù)分組內(nèi)容處理。下一代防火墻在設(shè)計(jì)時(shí)運(yùn)用了采用DPDK的WindRiver網(wǎng)絡(luò)加速平臺(tái)以及QuickAssist。DPDK提供了相應(yīng)的機(jī)制,支持通過(guò)其他高性能方法來(lái)替代Linux系統(tǒng)調(diào)用,從而避免Linux內(nèi)核出現(xiàn)的常見問(wèn)題。WindRiver網(wǎng)絡(luò)加速平臺(tái)能夠加速Apache服務(wù)器等本機(jī)Linux應(yīng)用,并為移植在網(wǎng)絡(luò)加速引擎上的安全應(yīng)用提供更高的加速性能。大數(shù)據(jù)分析關(guān)于涉及大數(shù)據(jù)分析的使用案例,Aspera公司與英特爾公司研究了超高速數(shù)據(jù)傳輸解決方案,該解決方案能夠在裸機(jī)和虛擬化硬件平臺(tái)上幫助商用互聯(lián)網(wǎng)連接達(dá)到可預(yù)測(cè)的超高WAN傳輸速度,包括超過(guò)往返時(shí)間為數(shù)百毫秒的網(wǎng)絡(luò),以及常見遠(yuǎn)距離WAN幾個(gè)百分點(diǎn)的數(shù)據(jù)分組丟失率。借助DPDK,軟件工程師可減少收發(fā)數(shù)據(jù)分組所需的內(nèi)存副本數(shù)量。Aspera公司因此成功地將測(cè)試系統(tǒng)上單個(gè)流數(shù)據(jù)的傳輸速度提高至37.75Gbit/s,加上以太網(wǎng)幀和IP數(shù)據(jù)分組標(biāo)頭,網(wǎng)絡(luò)利用率達(dá)到了39Gbit/s。通過(guò)在基于內(nèi)核的虛擬機(jī)(KVM)管理程序上進(jìn)行測(cè)試,對(duì)虛擬化平臺(tái)的傳輸性能開始了初步研究,并實(shí)現(xiàn)了16.1Gbit/s的初始傳輸速度。電網(wǎng)作為全球最大的電力公司,中國(guó)國(guó)家電網(wǎng)公司承擔(dān)著向大約11億人口供電的堅(jiān)決任務(wù)。SGCC依賴高性能計(jì)算集群確保電網(wǎng)的安全和平穩(wěn)運(yùn)行。伴隨著中國(guó)電網(wǎng)規(guī)模的不斷擴(kuò)大,SGCC急需增強(qiáng)其全數(shù)字實(shí)時(shí)仿真系統(tǒng),以滿足國(guó)家日益增長(zhǎng)的電力供應(yīng)需求。DPDK是其中一項(xiàng)關(guān)鍵組件,幫助將ADPSS的延遲降到50μs之內(nèi)。這也是為3,000臺(tái)發(fā)電機(jī)和30,000根電網(wǎng)線路創(chuàng)建大型電力系統(tǒng)仿真的必要條件。六、DPDK市場(chǎng)發(fā)展DPDK的大多數(shù)應(yīng)用最初是在電信領(lǐng)域。隨著CSP采用網(wǎng)絡(luò)虛擬化來(lái)降低運(yùn)營(yíng)成本并加快新服務(wù)的部署,他們虛擬化了需要高吞吐量和/或低延遲的用例,例如路由器,防火墻,無(wú)線電訪問(wèn)網(wǎng)絡(luò)(RAN)和演進(jìn)的分組核心(EPC)。虛擬化平臺(tái)的供應(yīng)商,在這些情況下,VNF和應(yīng)用程序已在其產(chǎn)品中利用了DPDK,以實(shí)現(xiàn)CSP的性能目標(biāo)。隨著CSP探索新的邊緣托管應(yīng)用,例如視頻緩存,監(jiān)控,增強(qiáng)現(xiàn)實(shí)(AR),輔助駕駛,零售和工業(yè)物聯(lián)網(wǎng),DPDK仍然是實(shí)現(xiàn)積極性能目標(biāo)的關(guān)鍵技術(shù)。類似DPDK最先在電信應(yīng)用程序中,對(duì)數(shù)據(jù)包處理功能的性能要求一樣,DPDK越來(lái)越多地應(yīng)用于企業(yè)和云當(dāng)中。例如,在2018年,VMware引入了他們的NSX-T數(shù)據(jù)中心軟件定義基礎(chǔ)結(jié)構(gòu)的基于DPDK的邊緣配置。此版本的NSX-T地址需要具有可變數(shù)據(jù)包大小的高數(shù)據(jù)包吞吐量的應(yīng)用程序以及支持具有以下功能的高速NIC的服務(wù)器高達(dá)100Gbps的北/南流量。通常,南北向流的包大小各不相同,數(shù)據(jù)包處理要求,即使它們只占總流量的不到20%。在此用例中,通過(guò)使用帶有小數(shù)據(jù)包(64字節(jié))的DPDK,英特爾和VMware的分析表明,性能提高了五倍。同時(shí)有幾家公司已將DPDK用于金融應(yīng)用,其中低延遲帶來(lái)了巨大的競(jìng)爭(zhēng)優(yōu)勢(shì)。例如,在高頻交易(HFT)中,延遲會(huì)直接影響交易者的交易效率算法策略及其超越競(jìng)爭(zhēng)對(duì)手的能力。信息周刊估計(jì),對(duì)于一家大型經(jīng)紀(jì)公司來(lái)說(shuō),一毫秒每年價(jià)值1億美元。DPDK是這個(gè)市場(chǎng)解決方案供應(yīng)商開發(fā)所依賴的關(guān)鍵技術(shù)。七、DPDK學(xué)習(xí)路線這里給大家推薦零聲教育全網(wǎng)獨(dú)家的【dpdk-網(wǎng)絡(luò)協(xié)議棧-vpp-OVS-DDos-虛擬化技術(shù)】課程體系,通過(guò)32個(gè)項(xiàng)目案例,2W+行手寫代碼,全面解析4個(gè)dpdk技術(shù)方向:7.1DPDK網(wǎng)絡(luò)專欄(1)dpdk基礎(chǔ)知識(shí)1.多隊(duì)列網(wǎng)卡,vmxnet/e10002.igb_uio與vfio模塊3.kni模塊4.hugepage的理解5.零拷貝6.dpdk與netmap區(qū)別7.dpdk的工作環(huán)境(2)網(wǎng)絡(luò)協(xié)議棧1.sh靜態(tài)arp表設(shè)置3.dpdk-icmp4.udp協(xié)議格式分析5.udp協(xié)議sendto,recvfrom實(shí)現(xiàn)6.dpdk-ip7.dpdk-tcp8.tcp協(xié)議棧bind,listen,accept實(shí)現(xiàn)9.tcp協(xié)議棧recv,send,close的實(shí)現(xiàn)10.tcp三次握手實(shí)現(xiàn)11.tcp四次揮手實(shí)現(xiàn)12.tcpacknum與seqnum的確認(rèn)機(jī)制實(shí)現(xiàn)13.tcp的并發(fā)連接設(shè)計(jì)14.epoll并發(fā)的實(shí)現(xiàn)15.tcp協(xié)議棧與epoll之間的回調(diào)實(shí)現(xiàn)(3)dpdk組件項(xiàng)目1.dpdk-ac2.dpdk-kni3./dev/kni的原理分析4.kni_dev的流程5.kni的t緩沖區(qū),rx緩沖區(qū)6.kni的用戶空間與內(nèi)核空間映射7.mbuf如何轉(zhuǎn)化為kernel的sk_buff8.dpdk-timer9.bpftrace的使用10.dpdk-bpf源碼流程(4)dpdk經(jīng)典項(xiàng)目1.dpdk-dns2.dpdk-gateway3.dpdk-ddos熵計(jì)算源碼4.ddosattach檢測(cè)精確度調(diào)試5.ddosattach測(cè)試T具h(yuǎn)ping36.布谷鳥hash原理與使用7.2儲(chǔ)存技術(shù)專欄(1)高效磁盤io讀寫spdk(C)1.存儲(chǔ)框架spdk,為技術(shù)棧打開扇存儲(chǔ)的大門2.spdk運(yùn)行環(huán)境與vhost3.NVMe與PCl的關(guān)系4.手把手實(shí)現(xiàn)spdk_server5.nvme與pcie以及手寫nvme讀寫操作6.bdev與blob之間的關(guān)系7.實(shí)現(xiàn)blob異步讀寫8.blobstore的讀寫操作實(shí)現(xiàn)與rpc的關(guān)系9.fio性能測(cè)試性能對(duì)比libaio,io_uring,psync10.fioplugin工作流程11.fioplugin開發(fā)(2)spdk文件系統(tǒng)的實(shí)現(xiàn)1.文件系統(tǒng)功能拆解2.spdk_env_init與spdk_appinit的差別3.spdk__thread_poll實(shí)現(xiàn)rpc回調(diào)4.fs_operations結(jié)構(gòu)體定義5.file_operations結(jié)構(gòu)體定義6.dir_operations結(jié)構(gòu)體定義7.syscall的hook實(shí)現(xiàn)8.io內(nèi)存管理9.基數(shù)樹對(duì)文件系統(tǒng)內(nèi)存管理10.spdk_blob的open,read,write,close11.測(cè)試用例與調(diào)試入口函數(shù)(3)spdkkv存儲(chǔ)的實(shí)現(xiàn)1.KV存儲(chǔ)拆解Set,Get,Mod,Del2.app/.a庫(kù)/so庫(kù)對(duì)于kv存儲(chǔ)的選擇3.bdev與blob對(duì)于kv存儲(chǔ)的選擇4.kvservice啟動(dòng)blob資源操作5.kvservice關(guān)閉blob資源回收6.kvservice接口set,get,modify,delete7.kv遍歷與查找實(shí)現(xiàn)8.page存儲(chǔ)chunk的管理9.pagechunk的get與put10.page單查找與多頁(yè)查找11.btree,artree,hashmap,radixtree,rbtree之間的選擇12.slab的實(shí)現(xiàn)13.slab分配slot與釋放slot14.為kv加上conf文件15.測(cè)試用例與性能測(cè)試7.3安全與網(wǎng)關(guān)開發(fā)專欄(1)可擴(kuò)展的矢量數(shù)據(jù)包處理框架vpp(c/c++)1.vpp命令詳解2.mac/ip轉(zhuǎn)發(fā)plugin3.load_balanceplugin4.flowtableplugin5.vpp源碼之間的差異6.多網(wǎng)卡數(shù)據(jù)接收與轉(zhuǎn)發(fā)7.解
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- Unit 2 Let's talk teens Reading 說(shuō)課稿-2024-2025學(xué)年高中英語(yǔ)牛津譯林版(2020)必修第一冊(cè)
- Unit 6 Section B 1a-2b說(shuō)課稿 2024-2025學(xué)年人教版(2024)七年級(jí)英語(yǔ)上冊(cè)
- 數(shù)控模具知識(shí)培訓(xùn)課件
- 江蘇省蘇州市新區(qū)2024-2025學(xué)年八年級(jí)上學(xué)期期末質(zhì)量監(jiān)測(cè)歷史卷(含答案)
- 貴州師范大學(xué)《VB語(yǔ)》2023-2024學(xué)年第一學(xué)期期末試卷
- 貴州黔南科技學(xué)院《提案制作與談判技巧》2023-2024學(xué)年第一學(xué)期期末試卷
- DB21-T 4078.4-2024 外來(lái)入侵植物監(jiān)測(cè)技術(shù)規(guī)程 第4部分:刺蒼耳
- Unit 4 What can you do(說(shuō)課稿)-2023-2024學(xué)年人教PEP版英語(yǔ)五年級(jí)上冊(cè)
- 2024版噪聲污染控制工程協(xié)議協(xié)議版B版
- 貴州工貿(mào)職業(yè)學(xué)院《湖南傳統(tǒng)民居》2023-2024學(xué)年第一學(xué)期期末試卷
- 水利工程全生命周期管理-洞察分析
- 《孫子兵法》與執(zhí)政藝術(shù)學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 九宮數(shù)獨(dú)200題(附答案全)
- 商業(yè)發(fā)票INVOICE模板
- 超聲波焊接作業(yè)指導(dǎo)書(共8頁(yè))
- 《你的生命有什么可能》PPT
- 雙梁橋式起重機(jī)設(shè)計(jì)
- 電機(jī)與電氣控制技術(shù)PPT課件
- 廢棄鉆井泥漿和壓裂返排液無(wú)害化處理研究報(bào)告
- 論文-基于單片機(jī)的搶答器.doc
- 便道及鋼板樁圍堰河道清淤專項(xiàng)施工方案
評(píng)論
0/150
提交評(píng)論