剛拿到dpdk學習任務的時候一臉懵,這麼多內容根本不知道從哪看起,走了很多彎路,效率很低,故記錄下本文,幫助有需要的人。
本文分四部分介紹dpdk原始碼的組織架構。由dpdk庫和應用程式提供的 makefiles 位於 $(rte_sdk)/mk 中。
配置模板位於 $(rte_sdk)/config。這些模板描述了為每個目標啟用的選項。 配置檔案許多可以為dpdk庫啟用或禁用的選項,包括除錯選項。使用者應該檢視配置檔案並熟悉這些選項。配置檔案同樣也用於建立標頭檔案,建立的標頭檔案將位於新生成的目錄中。
庫檔案原始碼位於目錄$(rte_sdk)/lib中。按照慣例,庫指的是為應用程式提供api的任何**。通常,它會生成乙個(.a)檔案,這個目錄中可能也儲存一些核心模組。
lib目錄包含如下專案
lib
+-- librte_cmdline # 命令列介面
+-- librte_distributor # 報文分發器
+-- librte_eal # 環境抽象層
+-- librte_ether # pmd通用介面
+-- librte_hash # 雜湊庫
+-- librte_ip_frag # ip分片庫
+-- librte_kni # 核心nic介面
+-- librte_kvargs # 引數解析庫
+-- librte_lpm # 最長字首匹配庫
+-- librte_mbuf # 報文及控制緩衝區操作庫
+-- librte_mempool # 記憶體池管理器
+-- librte_meter # qos metering 庫
+-- librte_net # ip相關的一些頭部
+-- librte_power # 電源管理庫
+-- librte_ring # 軟體無鎖環形緩衝區
+-- librte_sched # qos排程器和丟包器庫
+-- librte_timer # 定時器庫
驅動程式是為裝置(硬體裝置或者虛擬裝置)提供輪詢模式驅動程式實現的特殊庫。 他們包含在drivers子目錄中,按照型別分類,各自編譯成乙個庫,其格式為 librte_pmd_x.a ,其中 x 是驅動程式的名稱。
驅動程式目錄下有個 net 子目錄,包括如下專案:
drivers/net
+-- af_packet # 基於linux af_packet的pmd
+-- bonding # 繫結pmd驅動
+-- cxgbe # chelsio terminator 10gbe/40gbe pmd
+-- e1000 # 1gbe pmd (igb and em)
+-- enic # cisco vic ethernet nic poll-mode driver
+-- fm10k # host inte***ce pmd driver for fm10000 series
+-- i40e # 40gbe poll mode driver
+-- ixgbe # 10gbe poll mode driver
+-- mlx4 # mellanox connectx-3 poll mode driver
+-- null # null poll mode driver for testing
+-- pcap # pcap poll mode driver
+-- ring # ring poll mode driver
+-- szedata2 # szedata2 poll mode driver
+-- virtio # virtio poll mode driver
+-- vmxnet3 # vmxnet3 poll mode driver
+-- xenvirt # xen virtio poll mode driver
部分 driver/net 目錄包含乙個base子目錄,這個目錄通常包含使用者不能直接修改的**。 任何修訂或增強都應該x_osdep.c或x_osdep.**件完成。請參閱base目錄中本地的自述檔案以獲取更多的資訊。應用程式目錄包含用於測試***dk(如自動測試)或輪詢模式驅動程式(test-pmd)的例項應用程式:
+-- chkincs # test program to check include dependencies
+-- cmdline_test # test the commandline library
+-- test # autotests to validate dpdk features
+-- test-acl # test the acl library
+-- test-pipeline # test the ip pipeline framework
+-- test-pmd # test and benchmark poll mode drivers
example目錄包含示例應用程式,顯示了如何使用庫:
examples
+-- cmdline # example of using the cmdline library
+-- exception_path # sending packets to and from linux tap device
+-- helloworld # basic hello world example
+-- ip_reassembly # example showing ip reassembly
+-- ip_fragmentation # example showing ipv4 fragmentation
+-- ipv4_multicast # example showing ipv4 multicast
+-- kni # kernel nic inte***ce (kni) example
+-- l2fwd # l2 forwarding with and without sr-iov
+-- l3fwd # l3 forwarding example
+-- l3fwd-power # l3 forwarding example with power management
+-- l3fwd-vf # l3 forwarding example with sr-iov
+-- link_status_interrupt # link status change interrupt example
+-- load_balancer # load balancing across multiple cores/sockets
+-- qos_meter # qos metering example
+-- qos_sched # qos scheduler and dropper example
+-- timer # example of using librte_timer library
+-- vmdq_dcb # example of vmdq and dcb receiving
+-- vmdq # example of vmdq receiving
+-- vhost # example of userspace vhost and switch
參考資料:dpdk官網說明文件
服務框架原始碼
include stdio.h include windows.h service statusm servicestatus service status handlem servicestatushandle boolbrunning true void winapiservicemain dw...
spring原始碼框架
2.bean容器 讀取到bean的定義後,例項化bean,把bean資訊存放到容器 通過如下 進行例項化 class type field.gettype object o type.getconstructor newinstance 3.例項化以後不會直接放進容器,可以對例項化的bean進行增強...
Node框架Express原始碼
主檔案 function url.parse req.url,true let requestmethod req.method.tolowercase let i 0 function next err let layer 取出來的路徑 可能是正則型別 if err else else else ...