前置的知识:

docker 的使用

  • vfio-pci 驱动程序:
    设备直通:允许用户空间程序直接访问设备。
    内存隔离:通过 IOMMU 提供内存隔离,确保设备只能访问被授权的内存区域。

virtio-pci:用于虚拟化环境中的Virtio设备通信,提供标准化的接口,简化虚拟机与物理主机之间的设备通信。提供易用的标准化接口,性能较高,但不如vfio-pci直接访问物理设备的性能高。


  • PCI总线
    PCI总线是一种标准的高速并行总线,允许多个硬件设备与计算机主板进行通信。PCI总线的设计目标是提供高带宽和低延迟的通信通道。
  • PCI设备
    PCI设备是通过PCI总线连接到计算机主板的硬件组件。这些设备通常包括:
    网络接口卡(NIC):用于连接以太网或其他网络类型。
    图形处理单元(GPU):用于图形渲染和计算。
    存储控制器:用于连接硬盘、固态硬盘(SSD)等存储设备。
    声卡:用于音频输入和输出。
    其他外设:如USB控制器、SATA控制器等。

查看系统中的所有PCI设备及其详细信息

lspci

lspci -v 命令查看设备的详细信息,包括设备ID、供应商ID、驱动程序等。例如:

lspci -v -s 00:03.0

加载内核模块:

modprobe vfio
modprobe vfio-pci

显示当前加载的模块:

lsmod

GRUB(GRand Unified Bootloader)是一个引导加载程序,用于引导操作系统内核。
帮助操作系统内核在启动时配置各种功能,包括IOMMU。通过编辑GRUB配置文件,可以向内核传递特定参数,以启用或配置IOMMU。
GRUB配置文件通常位于 /etc/default/grub。通过在这个文件中添加或修改内核参数,可以控制内核在启动时的行为。

对于ARM CPU,常见的内核参数包括:
iommu.passthrough=1:启用设备直通模式。
iommu.strict=1:启用严格模式,确保IOMMU在每次DMA操作后刷新TLB。
arm-smmu.disable_bypass=0:启用ARM SMMU(系统内存管理单元)的旁路模式。
iommu=pt:启用直通模式。


下载dpdk:

wget http://fast.dpdk.org/rel/dpdk-24.07.tar.xz

编译:

meson setup build -Dplatform=generic
ninja -C build

内部配置方面:

一般4G的机器, 在使用的dpdk 做开发的时候, 需要配置多少的大页面呢?
建议配置
对于 4GB 内存的机器,建议配置 256 到 512 个 2MB 的 Hugepages。具体数量可以根据实际需求进行调整。以下是一些参考:
256 个 2MB 的 Hugepages:总共占用 512MB 内存。
512 个 2MB 的 Hugepages:总共占用 1GB 内存。

配置 512 个 2MB 的大页内存

sudo sysctl -w vm.nr_hugepages=512

检查 Hugepages 配置

grep HugePages_ /proc/meminfo

创建挂载点

sudo mkdir -p /mnt/huge

挂载 hugetlbfs 文件系统

sudo mount -t hugetlbfs nodev /mnt/huge

卸载 /mnt/huge 挂载点

sudo umount /mnt/huge

验证挂载

mount | grep hugetlbfs
//输出
nodev on /mnt/huge type hugetlbfs (rw,relatime,pagesize=2M)

验证:

sudo ./build/app/dpdk-testpmd -c 0x3 -n 4 -- --total-num-mbufs=4096 -i

网络方面配置

多网卡配置:
image.png

验证:

//这将列出所有以太网设备及其 PCI 地址,例如:
$ lspci | grep Ethernet

00:05.0 Ethernet controller: Red Hat, Inc. Virtio network device
00:06.0 Ethernet controller: Red Hat, Inc. Virtio network device
00:07.0 Ethernet controller: Red Hat, Inc. Virtio network device

root at putao in ~
$ ip link show

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp0s5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether 00:1c:42:df:8f:5a brd ff:ff:ff:ff:ff:ff
3: enp0s6: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether 00:1c:42:9f:12:64 brd ff:ff:ff:ff:ff:ff
4: enp0s7: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether 00:1c:42:a2:aa:01 brd ff:ff:ff:ff:ff:ff
$ sudo ./usertools/dpdk-devbind.py --status

Network devices using kernel driver
===================================
0000:00:05.0 'Virtio network device 1000' if=enp0s5 drv=virtio-pci unused=vfio-pci *Active* (这个是虚拟机的网卡, 为了避免环境污染, 新加了2个网卡) 
0000:00:06.0 'Virtio network device 1000' if=enp0s6 drv=virtio-pci unused=vfio-pci
0000:00:07.0 'Virtio network device 1000' if=enp0s7 drv=virtio-pci unused=vfio-pci

0000:00:06.0 : 设备的pci地址
if=enp0s6:设备在操作系统中的网络接口名称。
drv=virtio-pci:表示这些设备当前使用的是 virtio-pci 驱动程序。
unused=vfio-pci:表示这些设备可以使用 vfio-pci 驱动程序,但当前未使用。
Active:表示 0000:00:05.0 设备当前处于活动状态。


docker-test 配置文件内容:

FROM ubuntu:20.04

# 安装必要的工具和依赖
RUN apt-get update && apt-get install -y \
    build-essential \
    meson \
    ninja-build \
    libnuma-dev \
    git \
    python3-pip
RUN pip3 install pyelftools

# 下载并编译DPDK
RUN git clone https://github.com/DPDK/dpdk.git /dpdk
WORKDIR /dpdk
RUN meson build -Dplatform=generic
RUN ninja -C build
RUN ninja -C build install

# 设置环境变量
ENV RTE_SDK=/dpdk
ENV RTE_TARGET=build

构建镜像:

docker build -t dpdk-test -f docker-dpdk .

arm镜像:

https://www.cnblogs.com/qs52/articles/17774024.html

sources.list

deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-backports main restricted universe multiverse
deb http://ports.ubuntu.com/ubuntu-ports/ jammy-security main restricted universe multiverse

更新

apt-get update

putao
8 声望1 粉丝

推动世界向前发展,改善民生。