DPDK官方信息查看

总览

在这里插入图片描述

dpdk doc手册

  • dpdk doc文档、手册
https://www.dpdk.org/  ---> DPDK Core --->Document

各个版本的手册:
在这里插入图片描述

API 手册

  • API 手册
    介绍了当前版本的DPDK的 模块,源码(example例子的源码,各个文件分布,头文件、函数的源码等);
    在这里插入图片描述

guides 手册

guides 手册
在这里插入图片描述

如上所示, 比较重要的几个方面是:

Getting Started Guide for Linux

参见:dpdk 21.11 Getting Started Guide for Linux
主要分为:

  • 依赖
    系统参数、驱动
  • 编译
    如何编译 dpdk
  • 启动参数
    eal 启动参数解释
  • 其他功能点
    比如: rte_kni, 孤立 cpu, 性能调优点

Programmer’s Guide

详细介绍 DPDK 中的各个功能模块、lib库等。
比如: eal参数、各个组件/lib库(比如:rcu、ring、eal库,mempool, mbuf, rte_flow等等)/工具的原理、使用;

HowTo Guides

功能:
展示多个特性是如何测试的「包含:client怎么发包,测试程序怎么配置,怎么查看功能生效」以及 提供的一些 debug调试、故障排除/抓包/问题定位的建议。

参见:HowTo Guides

比如:测试 rte_flow
testpmd 配置 rte_flow;
client: 使用 scapy 发送包;
testpmd: 查看输出

DPDK Tools User Guides

dpdk 工具:比如

范例:
#./dpdk-pmdinfo -t  /opt/xxx/bin/dpvs
简单举支持的几个网卡驱动,如下所示:

ice 驱动:
在这里插入图片描述
ixgbe 驱动:
在这里插入图片描述
ixgbe vf 设备:
在这里插入图片描述

Note: uio_pci_generic 不可用于虚拟设备。

i40e 驱动:
在这里插入图片描述
mlx5 驱动:
在这里插入图片描述

Note:
如上所示:mlx 驱动的网卡,不需要 igb_uio/uio_pci_generic/vfio

bnxt 驱动:
在这里插入图片描述

范例如下:
# ./dpdk-hugepages.py -s
Node Pages Size Total
0    24    1Gb    24Gb
1    24    1Gb    24Gb
Hugepages mounted on /dev/hugepages /mnt/huge_1GB
----
# cat /proc/cmdline
BOOT_IMAGE=/vmlinuz-xxxx.x86_64 root=UUID=xxxxxxxx ro crashkernel=auto ixgbe.allow_unsupported_sfp=1 intel_idle.max_cstate=0 default_hugepagesz=1G hugepagesz=1G hugepages=48 isolcpus=1,2,3,4,5,6,7,8,9,18,19,20,21,22,23,24,25,26
-----
# cat /etc/fstab
...
nodev /mnt/huge_1GB hugetlbfs pagesize=1GB 0 0
-----
# cat /proc/meminfo |grep -i huge
AnonHugePages:      4096 kB
HugePages_Total:      48
HugePages_Free:       22
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:    1048576 kB
  • dpdk-procinfo
    dpdk-procinfo 作为dpdk备程序,展示port的统计信息、端口的配置,展示dpdk的内存(所以的ring以及具体的ring,所有的以及具体的mempool,mempool中的元素)信息等。
    参见:dpdk-procinfo Application
# 查看两个接口(port_0,port_1)的接口统计;

# ./dpdk-proc-info -- -p 3 --xstats
EAL: No legacy callbacks, legacy socket not created
###### NIC extended statistics for port 0  #########
####################################################
rx_good_packets: 6864393
tx_good_packets: 17946209
rx_good_bytes: 434439746
tx_good_bytes: 1130778820
rx_missed_errors: 0
rx_errors: 0
tx_errors: 0
rx_mbuf_allocation_errors: 0
rx_q0_packets: 6864393
rx_q0_bytes: 434439746
rx_q0_errors: 0
rx_q1_packets: 0
rx_q1_bytes: 0
rx_q1_errors: 0
rx_q2_packets: 0
rx_q2_bytes: 0
rx_q2_errors: 0
rx_q3_packets: 0
rx_q3_bytes: 0
rx_q3_errors: 0
rx_q4_packets: 0
rx_q4_bytes: 0
rx_q4_errors: 0
rx_q5_packets: 0
rx_q5_bytes: 0
rx_q5_errors: 0
rx_q6_packets: 0
rx_q6_bytes: 0
rx_q6_errors: 0
rx_q7_packets: 0
rx_q7_bytes: 0
rx_q7_errors: 0
tx_q0_packets: 17946209
tx_q0_bytes: 1130778774
tx_q1_packets: 0
tx_q1_bytes: 0
tx_q2_packets: 0
tx_q2_bytes: 0
tx_q3_packets: 0
tx_q3_bytes: 0
tx_q4_packets: 0
tx_q4_bytes: 0
tx_q5_packets: 0
tx_q5_bytes: 0
tx_q6_packets: 0
tx_q6_bytes: 0
tx_q7_packets: 0
tx_q7_bytes: 0
tx_q8_packets: 0
tx_q8_bytes: 0
rx_crc_errors: 0
rx_illegal_byte_errors: 0
rx_error_bytes: 0
mac_local_errors: 0
mac_remote_errors: 0
rx_length_errors: 0
tx_xon_packets: 0
rx_xon_packets: 0
tx_xoff_packets: 0
rx_xoff_packets: 0
rx_size_64_packets: 3656912
rx_size_65_to_127_packets: 3207481
rx_size_128_to_255_packets: 0
rx_size_256_to_511_packets: 0
rx_size_512_to_1023_packets: 0
rx_size_1024_to_max_packets: 0
rx_broadcast_packets: 12
rx_multicast_packets: 0
rx_fragment_errors: 0
rx_undersize_errors: 0
rx_oversize_errors: 0
rx_jabber_errors: 0
rx_management_packets: 0
rx_management_dropped: 0
tx_management_packets: 0
rx_total_packets: 6889743
rx_total_bytes: 444098096
tx_total_packets: 17946209
tx_size_64_packets: 9349529
tx_size_65_to_127_packets: 8596680
tx_size_128_to_255_packets: 0
tx_size_256_to_511_packets: 0
tx_size_512_to_1023_packets: 0
tx_size_1024_to_max_packets: 0
tx_multicast_packets: 8
tx_broadcast_packets: 22
rx_mac_short_packet_dropped: 0
rx_l3_l4_xsum_error: 0
flow_director_added_filters: 192
flow_director_removed_filters: 0
flow_director_filter_add_errors: 0
flow_director_filter_remove_errors: 0
flow_director_matched_filters: 21
flow_director_missed_filters: 6856018
rx_fcoe_crc_errors: 0
rx_fcoe_dropped: 0
rx_fcoe_mbuf_allocation_errors: 0
rx_fcoe_packets: 0
tx_fcoe_packets: 0
rx_fcoe_bytes: 0
tx_fcoe_bytes: 0
rx_fcoe_no_direct_data_placement: 0
rx_fcoe_no_direct_data_placement_ext_buff: 0
tx_flow_control_xon_packets: 0
rx_flow_control_xon_packets: 0
tx_flow_control_xoff_packets: 0
rx_flow_control_xoff_packets: 0
rx_total_missed_packets: 0
out_pkts_untagged: 17946209
out_pkts_encrypted: 0
out_pkts_protected: 0
out_octets_encrypted: 0
out_octets_protected: 0
in_pkts_untagged: 0
in_pkts_badtag: 0
in_pkts_nosci: 0
in_pkts_unknownsci: 0
in_octets_decrypted: 0
in_octets_validated: 0
in_pkts_unchecked: 0
in_pkts_delayed: 0
in_pkts_late: 0
in_pkts_ok: 0
in_pkts_invalid: 0
in_pkts_notvalid: 0
in_pkts_unusedsa: 0
in_pkts_notusingsa: 0
rx_priority0_mbuf_allocation_errors: 0
rx_priority1_mbuf_allocation_errors: 0
rx_priority2_mbuf_allocation_errors: 0
rx_priority3_mbuf_allocation_errors: 0
rx_priority4_mbuf_allocation_errors: 0
rx_priority5_mbuf_allocation_errors: 0
rx_priority6_mbuf_allocation_errors: 0
rx_priority7_mbuf_allocation_errors: 0
rx_priority0_dropped: 0
rx_priority1_dropped: 0
rx_priority2_dropped: 0
rx_priority3_dropped: 0
rx_priority4_dropped: 0
rx_priority5_dropped: 0
rx_priority6_dropped: 0
rx_priority7_dropped: 0
rx_priority0_xon_packets: 0
rx_priority1_xon_packets: 0
rx_priority2_xon_packets: 0
rx_priority3_xon_packets: 0
rx_priority4_xon_packets: 0
rx_priority5_xon_packets: 0
rx_priority6_xon_packets: 0
rx_priority7_xon_packets: 0
rx_priority0_xoff_packets: 0
rx_priority1_xoff_packets: 0
rx_priority2_xoff_packets: 0
rx_priority3_xoff_packets: 0
rx_priority4_xoff_packets: 0
rx_priority5_xoff_packets: 0
rx_priority6_xoff_packets: 0
rx_priority7_xoff_packets: 0
tx_priority0_xon_packets: 0
tx_priority1_xon_packets: 0
tx_priority2_xon_packets: 0
tx_priority3_xon_packets: 0
tx_priority4_xon_packets: 0
tx_priority5_xon_packets: 0
tx_priority6_xon_packets: 0
tx_priority7_xon_packets: 0
tx_priority0_xoff_packets: 0
tx_priority1_xoff_packets: 0
tx_priority2_xoff_packets: 0
tx_priority3_xoff_packets: 0
tx_priority4_xoff_packets: 0
tx_priority5_xoff_packets: 0
tx_priority6_xoff_packets: 0
tx_priority7_xoff_packets: 0
tx_priority0_xon_to_xoff_packets: 0
tx_priority1_xon_to_xoff_packets: 0
tx_priority2_xon_to_xoff_packets: 0
tx_priority3_xon_to_xoff_packets: 0
tx_priority4_xon_to_xoff_packets: 0
tx_priority5_xon_to_xoff_packets: 0
tx_priority6_xon_to_xoff_packets: 0
tx_priority7_xon_to_xoff_packets: 0
####################################################
###### NIC extended statistics for port 1  #########
####################################################
rx_good_packets: 357928
tx_good_packets: 358509
rx_good_bytes: 33951354
tx_good_bytes: 32986232
rx_missed_errors: 0
rx_errors: 0
tx_errors: 0
rx_mbuf_allocation_errors: 0
rx_q0_packets: 357928
rx_q0_bytes: 33951354
rx_q0_errors: 0
rx_q1_packets: 0
rx_q1_bytes: 0
rx_q1_errors: 0
rx_q2_packets: 0
rx_q2_bytes: 0
rx_q2_errors: 0
rx_q3_packets: 0
rx_q3_bytes: 0
rx_q3_errors: 0
rx_q4_packets: 0
rx_q4_bytes: 0
rx_q4_errors: 0
rx_q5_packets: 0
rx_q5_bytes: 0
rx_q5_errors: 0
rx_q6_packets: 0
rx_q6_bytes: 0
rx_q6_errors: 0
rx_q7_packets: 0
rx_q7_bytes: 0
rx_q7_errors: 0
tx_q0_packets: 358509
tx_q0_bytes: 32986008
tx_q1_packets: 0
tx_q1_bytes: 0
tx_q2_packets: 0
tx_q2_bytes: 0
tx_q3_packets: 0
tx_q3_bytes: 0
tx_q4_packets: 0
tx_q4_bytes: 0
tx_q5_packets: 0
tx_q5_bytes: 0
tx_q6_packets: 0
tx_q6_bytes: 0
tx_q7_packets: 0
tx_q7_bytes: 0
tx_q8_packets: 0
tx_q8_bytes: 0
rx_crc_errors: 0
rx_illegal_byte_errors: 0
rx_error_bytes: 0
mac_local_errors: 0
mac_remote_errors: 0
rx_length_errors: 0
tx_xon_packets: 0
rx_xon_packets: 0
tx_xoff_packets: 0
rx_xoff_packets: 0
rx_size_64_packets: 31
rx_size_65_to_127_packets: 357883
rx_size_128_to_255_packets: 13
rx_size_256_to_511_packets: 1
rx_size_512_to_1023_packets: 0
rx_size_1024_to_max_packets: 0
rx_broadcast_packets: 1
rx_multicast_packets: 1
rx_fragment_errors: 0
rx_undersize_errors: 0
rx_oversize_errors: 0
rx_jabber_errors: 0
rx_management_packets: 0
rx_management_dropped: 0
tx_management_packets: 0
rx_total_packets: 383279
rx_total_bytes: 43635140
tx_total_packets: 358509
tx_size_64_packets: 24
tx_size_65_to_127_packets: 358476
tx_size_128_to_255_packets: 9
tx_size_256_to_511_packets: 0
tx_size_512_to_1023_packets: 0
tx_size_1024_to_max_packets: 0
tx_multicast_packets: 46
tx_broadcast_packets: 8
rx_mac_short_packet_dropped: 0
rx_l3_l4_xsum_error: 0
flow_director_added_filters: 0
flow_director_removed_filters: 0
flow_director_filter_add_errors: 0
flow_director_filter_remove_errors: 0
flow_director_matched_filters: 0
flow_director_missed_filters: 357279
rx_fcoe_crc_errors: 0
rx_fcoe_dropped: 0
rx_fcoe_mbuf_allocation_errors: 0
rx_fcoe_packets: 0
tx_fcoe_packets: 0
rx_fcoe_bytes: 0
tx_fcoe_bytes: 0
rx_fcoe_no_direct_data_placement: 0
rx_fcoe_no_direct_data_placement_ext_buff: 0
tx_flow_control_xon_packets: 0
rx_flow_control_xon_packets: 0
tx_flow_control_xoff_packets: 0
rx_flow_control_xoff_packets: 0
rx_total_missed_packets: 0
out_pkts_untagged: 358509
out_pkts_encrypted: 0
out_pkts_protected: 0
out_octets_encrypted: 0
out_octets_protected: 0
in_pkts_untagged: 0
in_pkts_badtag: 0
in_pkts_nosci: 0
in_pkts_unknownsci: 0
in_octets_decrypted: 0
in_octets_validated: 0
in_pkts_unchecked: 0
in_pkts_delayed: 0
in_pkts_late: 0
in_pkts_ok: 0
in_pkts_invalid: 0
in_pkts_notvalid: 0
in_pkts_unusedsa: 0
in_pkts_notusingsa: 0
rx_priority0_mbuf_allocation_errors: 0
rx_priority1_mbuf_allocation_errors: 0
rx_priority2_mbuf_allocation_errors: 0
rx_priority3_mbuf_allocation_errors: 0
rx_priority4_mbuf_allocation_errors: 0
rx_priority5_mbuf_allocation_errors: 0
rx_priority6_mbuf_allocation_errors: 0
rx_priority7_mbuf_allocation_errors: 0
rx_priority0_dropped: 0
rx_priority1_dropped: 0
rx_priority2_dropped: 0
rx_priority3_dropped: 0
rx_priority4_dropped: 0
rx_priority5_dropped: 0
rx_priority6_dropped: 0
rx_priority7_dropped: 0
rx_priority0_xon_packets: 0
rx_priority1_xon_packets: 0
rx_priority2_xon_packets: 0
rx_priority3_xon_packets: 0
rx_priority4_xon_packets: 0
rx_priority5_xon_packets: 0
rx_priority6_xon_packets: 0
rx_priority7_xon_packets: 0
rx_priority0_xoff_packets: 0
rx_priority1_xoff_packets: 0
rx_priority2_xoff_packets: 0
rx_priority3_xoff_packets: 0
rx_priority4_xoff_packets: 0
rx_priority5_xoff_packets: 0
rx_priority6_xoff_packets: 0
rx_priority7_xoff_packets: 0
tx_priority0_xon_packets: 0
tx_priority1_xon_packets: 0
tx_priority2_xon_packets: 0
tx_priority3_xon_packets: 0
tx_priority4_xon_packets: 0
tx_priority5_xon_packets: 0
tx_priority6_xon_packets: 0
tx_priority7_xon_packets: 0
tx_priority0_xoff_packets: 0
tx_priority1_xoff_packets: 0
tx_priority2_xoff_packets: 0
tx_priority3_xoff_packets: 0
tx_priority4_xoff_packets: 0
tx_priority5_xoff_packets: 0
tx_priority6_xoff_packets: 0
tx_priority7_xoff_packets: 0
tx_priority0_xon_to_xoff_packets: 0
tx_priority1_xon_to_xoff_packets: 0
tx_priority2_xon_to_xoff_packets: 0
tx_priority3_xon_to_xoff_packets: 0
tx_priority4_xon_to_xoff_packets: 0
tx_priority5_xon_to_xoff_packets: 0
tx_priority6_xon_to_xoff_packets: 0
tx_priority7_xon_to_xoff_packets: 0
####################################################

# 查看 traffic manage(tm) 流量关联相关的端口配置:
# ./dpdk-proc-info --  --show-tm
EAL: No legacy callbacks, legacy socket not created
========== show - TM PMD ==========
  - Generic for port (0)
	  -- driver name net_ixgbe
	  -- max vf (0)
	  -- max tx queues (64)
	  -- number of tx queues (9)
  - MAX: nodes (137) levels (3) children (128)
  - identical nodes: non leaf (1) leaf (1)
  - Shaper MAX:
	  -- total (137)
	  -- private (137) private dual (0)
	  -- shared (0) shared dual (0)
  - mark support:
	  -- vlan dei: GREEN (0) YELLOW (0) RED (0)
	  -- ip ecn tcp: GREEN (0) YELLOW (0) RED (0)
	  -- ip ecn sctp: GREEN (0) YELLOW (0) RED (0)
	  -- ip dscp: GREEN (0) YELLOW (0) RED (0)
  - mask stats (0x0) dynamic update (0x0)
  - sched MAX:
	  -- total (1)
	  -- sp levels (1)
	  -- wfq children per group (0)
	  -- wfq groups (0)
	  -- wfq weight (1)
  - CMAN support:
	  -- WRED mode: pkt (0) byte (0)
	  -- head drop (0)
	  -- MAX WRED CONTEXT: total (0) private (0) shared (0)
  - Level 0
	  -- node MAX: 1 non leaf 1 leaf 0
	  -- indetical: non leaf 1 leaf 1
  - Level 1
	  -- node MAX: 8 non leaf 8 leaf 0
	  -- indetical: non leaf 1 leaf 1
  - Level 2
	  -- node MAX: 128 non leaf 0 leaf 128
	  -- indetical: non leaf 1 leaf 1
  - Generic for port (1)
	  -- driver name net_ixgbe
	  -- max vf (0)
	  -- max tx queues (64)
	  -- number of tx queues (9)
  - MAX: nodes (137) levels (3) children (128)
  - identical nodes: non leaf (1) leaf (1)
  - Shaper MAX:
	  -- total (137)
	  -- private (137) private dual (0)
	  -- shared (0) shared dual (0)
  - mark support:
	  -- vlan dei: GREEN (0) YELLOW (0) RED (0)
	  -- ip ecn tcp: GREEN (0) YELLOW (0) RED (0)
	  -- ip ecn sctp: GREEN (0) YELLOW (0) RED (0)
	  -- ip dscp: GREEN (0) YELLOW (0) RED (0)
  - mask stats (0x0) dynamic update (0x0)
  - sched MAX:
	  -- total (1)
	  -- sp levels (1)
	  -- wfq children per group (0)
	  -- wfq groups (0)
	  -- wfq weight (1)
  - CMAN support:
	  -- WRED mode: pkt (0) byte (0)
	  -- head drop (0)
	  -- MAX WRED CONTEXT: total (0) private (0) shared (0)
  - Level 0
	  -- node MAX: 1 non leaf 1 leaf 0
	  -- indetical: non leaf 1 leaf 1
  - Level 1
	  -- node MAX: 8 non leaf 8 leaf 0
	  -- indetical: non leaf 1 leaf 1
  - Level 2
	  -- node MAX: 128 non leaf 0 leaf 128
	  -- indetical: non leaf 1 leaf 1

# 显示 mem ring
# ./dpdk-proc-info --  --show-ring | grep arp_ring_c0  -A 30
ring <arp_ring_c0>@0x17f887180
  flags=2
  size=2048
  capacity=2047
  ct=0
  ch=0
  pt=0
  ph=0
  used=0
  avail=2047
ring <arp_ring_c1>@0x17f882ec0
  flags=2
  size=2048
  capacity=2047
  ct=0
  ch=0
  pt=0
  ph=0
  used=0
  avail=2047
ring <arp_ring_c2>@0x1a3ffbd80
  flags=2
  size=2048
  capacity=2047
  ct=0
  ch=0
  pt=0
  ph=0
  used=0
  avail=2047

# ./dpdk-proc-info --  --show-ring=arp_ring_c0
EAL: No legacy callbacks, legacy socket not created
========== show - RING ==========
  - Name (arp_ring_c0) on socket (0)
  - flags:
	  -- Single Producer Enqueue (0)
	  -- Single Consmer Dequeue (2)
  - size (2048) mask (0x7ff) capacity (2047)
  - count (0) free count (2047)
  - full (0) empty (1)
 
 # 展示mempool 信息
 # ./dpdk-proc-info --  --show-mempool | grep -i dp_vs_dest_pool_20 -A 20
mempool <dp_vs_dest_pool_20>@0x120026a640
  flags=10
  socket_id=1
  pool=0x120016a440
  iova=0xe0026a640
  nb_mem_chunks=1
  size=131071
  populated_size=131071
  header_size=64
  elt_size=320
  trailer_size=64
  total_obj_size=448
  private_data_size=0
  ops_index=5
  ops_name: <ring_mp_mc>
  avg bytes/object=448.003418
  internal cache infos:
    cache_size=0
  common_pool_count=131028
  no statistics available

# ./dpdk-proc-info --  --show-mempool=dp_vs_dest_pool_20
EAL: No legacy callbacks, legacy socket not created
========== show - MEMPOOL ==========
  - Name: dp_vs_dest_pool_20 on socket 1
  - flags:
	  -- No spread (n)
	  -- No cache align (n)
	  -- SP put (n), SC get (n)
	  -- Pool created (y)
	  -- No IOVA config (n)
  - Size 131071 Cache 0 element 320
  - header 64 trailer 64
  - private data size 0
  - memezone - socket 1
  - Count: avail (131028), in use (43)
  - ops_index 5 ops_name ring_mp_mc
 
 # 
  • dpdk-dumpcap
    功能:作为备程序,抓取dpdk主程序进入,出去的流量,写入到文件中。
    前提条件:dpdk主程序中存在初始化包抓包框架,已知testpmd初始了该框架,其他的dpdk程序没有初始化。
    区分:和dpdk-pdump 程序区分。
    参见:DPDK packet capture libraries and tools
    在这里插入图片描述
    在这里插入图片描述

Testpmd Application User Guide

testpmd 是dpdk中很重要的一个example app, 可以测试多种场景。

Network Interface Controller Drivers

网卡的特性(speed, link status, LRO, LSO, RSS, Flow control, crc/checksum offload),各个网卡驱动(虚拟设备的驱动,I40e, ixgbe , Mlx5, ice)等等

参见:
Network Interface Controller Drivers
dpdk supported nics
各个网卡下的性能报告

Release Notes

发布记录,每个版本的new features, bugfixes, known issues, api变更 等;

FAQ

dpdk中的常见的问题;

  • Sample Applications User Guides
    介绍dpdk中自带的多个范例(sample/examples)的编译方式,如何启动,运行等;
  • HowTo Guides
  • DPDK Tools User Guides
    dpdk 的辅助工具使用,比如 dpdk-pdump 抓包, dpdk-devbind 网卡绑定等;
  • Network Interface Controller Drivers
    网卡的特性(speed, link status, mtu、 LRO, LSO, RSS, SR-IOV、FEC、Flow control, crc/checksum offload),各个网卡驱动(虚拟设备的驱动,af_packet pmd, kni pmd, I40e, ixgbe , ice, Mlx5, bnx2x )等等

dpdk支持的硬件

  • dpdk支持的硬件信息
https://www.dpdk.org/  ---> DPDK Core --->

在这里插入图片描述

dpdk 源码下载

  • dpdk 源码下载
    推荐方法一;
  • 方法一:
    参见:dpdk官方tar包下载
    https://www.dpdk.org/ —> DPDK Core —> Download
    在这里插入图片描述
  • 方法二:
    从github中下载;

版权声明:本文为legend050709原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。