
按 “硬件→系统→驱动→软件→FPGA→验证” 顺序全部是工程可用配置复制粘贴就能用。一、硬件与 BIOS 必开配置先做这个1. BIOS 关闭一切节能、开启性能进入 BIOS 关闭以下项不同主板名称略有差异C-State、C1E、C6、C7P-State、SpeedStep、睿频可选锁固定频率ASPMPCIe 节能虚拟化 VT-d / IOMMU必须开启用于 VFIO/DPDKPCIe 最大 payload设为1024B / 2048B / 4096B按 FPGA 支持最大PCIe 最大读请求 MRRS同 MPS2. 物理安装FPGA 网卡插在CPU 直连 PCIe slot通常离 CPU 最近的槽不要插在 PCH 桥接的槽链路速率确认lspci -vvv | grep LnkSta应为 Gen4 x16 / Gen3 x16二、Linux 内核启动参数最关键编辑/etc/default/grub在GRUB_CMDLINE_LINUX_DEFAULT加入plaintextisolcpus1,2,3 \ nohz_full1,2,3 \ rcu_nocbs1,2,3 \ intel_pstatedisable \ processor.max_cstate0 \ idlepoll \ pcie_aspmoff \ iommuon iommupt \ hugepagesz1G hugepages4 \ default_hugepagesz1G \ tscreliable \ nmi_watchdog0 \ irqaffinity0然后执行bash运行grub2-mkconfig -o /boot/grub2/grub.cfg reboot三、系统级优化开机执行1. 关闭干扰服务bash运行systemctl stop irqbalance systemctl disable irqbalance systemctl stop firewalld systemctl disable firewalld swapoff -a echo 0 /proc/sys/kernel/nmi_watchdog echo 0 /proc/sys/kernel/watchdog2. 网卡中断全部绑到隔离核外bash运行# 查看 FPGA 网卡 IRQ grep eth /proc/interrupts # 绑到核心0 echo 1 /proc/irq/XXX/smp_affinity3. 巨页确认bash运行grep -E HugePages_Total|Hugepagesize /proc/meminfo必须看到Hugepagesize: 1048576 kB(1G)HugePages_Total: 4四、DPDK / VFIO 绑定 FPGA 网卡用户态驱动1. 加载 VFIObash运行modprobe vfio modprobe vfio-pci2. 解绑内核驱动bash运行# 先查 BDF lspci | grep FPGA # 解绑 echo 0000:xx:xx.x /sys/bus/pci/devices/0000:xx:xx.x/driver/unbind # 绑定 vfio-pci echo 0000:xx:xx.x /sys/bus/pci/drivers/vfio-pci/bind3. DPDK 初始化示例bash运行./dpdk-devbind.py --bindvfio-pci 0000:xx:xx.x ./testpmd -l 1-2 -n 4 --socket-mem1024 -- --nb-cores2核心绑定-l 1-2对应 isolcpus 核五、CPU 核心与线程策略代码层面1. 线程绑核 实时优先级c运行// C 语言绑核示例 cpu_set_t cpuset; CPU_ZERO(cpuset); CPU_SET(1, cpuset); pthread_setaffinity_np(pthread_self(), sizeof(cpuset), cpuset); // 实时调度 struct sched_param param {.sched_priority 99}; sched_setscheduler(0, SCHED_FIFO, param);2. 内存属性DMA 缓冲区用1G 巨页设为写合并 WC / 非临时 NT避免缓存伪共享结构体按64B 对齐c运行struct pkt __attribute__((aligned(64)));六、FPGA 侧优化决定性1. PCIe DMA 配置使用AXI DMA / XDMA开启SG 模式描述符预取流水线传输FPGA 内部用Stream FIFO BRAM缓冲减少突发中断2. 协议卸载优先级从高到低RDMA(RoCEv2)单边读写x86 零参与UDP 硬件卸载校验和、流控全在 FPGA时间敏感网络 TSN802.1Qbv 时间门控3. 确定性设计报文处理固定周期流水线硬件打时间戳PTP/TSN不使用软核 CPU 做数据通路七、中断 vs 轮询策略直接选低延迟优先2μs纯轮询 polling禁用 MSI-X隔离核死循环查 FIFO 空满平衡性能MSI-X 中断上半部轮询中断绑隔离核批量 DMA 完成再通知八、实测验证命令判断是否优化到位1. PCIe 状态bash运行lspci -vvv | grep -A5 LnkSta确保Speed 为 Gen3/Gen4Width x16ASPM disabled2. 核心隔离bash运行ps -eo pid,psr,cmd | grep -E testpmd|your_app看 PID 是不是固定在 1/2/3 核3. 延迟测试DPDK testpmd 收发包延迟FPGA 内部寄存器回环测试PTP 时间戳差九、最终优化目标典型可达到端到端延迟 1.5 μs抖动 100 ns无调度抖动、无页缺失、无中断漂移