dpdk如何与内核进行交互——vdev的用法
背景
dpdk是一个用户态程序,常用来bypass内核来处理数据报文,但是有时候,我们需要进行内核交互,如何来进行处理呢?本文将介绍vdev这个参数的使用,以及如何将网卡收到的报文送到内核,以及内核发送的报文送到网卡。
典型示例场景
dpdk-l2fwd
运行参数如下:
dpdk-l2fwd -l 3-5 -n 2 --hugepage-size 1024 --socket-mem 40960,0 -a 0000:ad:00.0 --vdev=net_tap_1,iface=vtap001 – -q 2 -p3 --no-mac-updating
作用: 将 0000:ad:00.0 设备收到的报文转发到 tap设备 vtap001,将vtap001收到的报文转发到 0000:ad:00.0 设备。这样就完成了数据报文与内核的交互处理。可以通过tcpdump在vtap001口,进行数据报文的抓包处理。
其他介绍
–vdev= 是 DPDK(Data Plane Development Kit)中一个非常重要的参数,用于创建和配置虚拟设备(Virtual Device)。这些设备不是物理硬件,而是由软件实现的,用于各种高级网络功能,如虚拟网卡、加密、压缩、AF_PACKET 接口等。
常见虚拟设备类型及使用示例
- net_virtio:Virtio 虚拟网卡(常用于虚拟机通信)
● path=/tmp/vhost.sock:与 QEMU 虚拟机通信的 Unix socket。
● queues=2:启用 2 个队列(多队列支持)。
● mac=…:指定 MAC 地址。
用途:DPDK 应用与 QEMU/KVM 虚拟机之间高速通信。
- net_tap:TAP 设备(与宿主机网络栈交互)
● iface=tap0:指定 TAP 接口名称。
● 启动后,宿主机上会出现 tap0 接口,可配置 IP、抓包等。
用途:将 DPDK 应用接入 Linux 网络栈,用于网关、防火墙等。
- net_pcap:基于 PCAP 的虚拟网卡(抓包/回放)
用途:测试、调试、流量回放。
- net_af_packet:AF_PACKET 接口(直接访问 Linux 网络设备)
● iface=eth1:绑定到 eth1 接口。
● 通过 AF_PACKET socket 抓取/发送数据包。
用途:在不使用 DPDK PMD 驱动的情况下访问物理网卡。
- crypto_aesni_mb:AESNI 多缓冲加密设备
用途:高性能对称加密(如 IPsec、TLS 加速)。
- compress_isal:Intel ISA-L 压缩设备
用途:数据压缩/解压缩加速。
总结
–vdev= 让 DPDK 不仅能驱动物理网卡,还能与虚拟机、宿主机网络、文件、加密硬件等交互,极大扩展了其应用场景。
虚拟设备 | 用途 | 典型参数 |
---|---|---|
net_virtio_user | 与虚拟机通信 | path=,queues=,mac= |
net_tap | 与Linux网络栈通信 | iface= |
net_pcap | 抓包/回放 | rx_pcap=,tx_pcap= |
net_af_packet | 访问物理网卡(非PMD) | iface= |
crypto_* | 加密加速 | - |
compress_* | 压缩加速 | - |