0

0

Linux sriov-network-device-plugin 的 VF 资源暴露与 DPDK pod 调度

冷炫風刃

冷炫風刃

发布时间:2026-02-26 15:02:02

|

251人浏览过

|

来源于php中文网

原创

根本原因是vf未绑定vfio-pci驱动;需确认sr-iov启用、手动绑定驱动、持久化配置,并确保dpdk pod正确挂载/dev/vfio及pci地址匹配。

linux sriov-network-device-plugin 的 vf 资源暴露与 dpdk pod 调度

VF 设备没出现在 /dev/vfio/ 下,DPDK pod 启动失败报 open /dev/vfio/xx: no such device

根本原因不是插件没装,而是 VF 没被正确绑定到 vfio-pci 驱动。sriov-network-device-plugin 只负责上报资源,不负责驱动绑定。

实操建议:

Warp
Warp

新一代的终端工具(内置AI命令搜索)

下载
  • 确认 VF 已启用:ip link show 看是否有 ens1f0v0 类似接口;再查 lspci -k -s $(lspci | grep Ethernet | grep -v Virtual | head -1 | awk '{print $1}') 看 kernel driver 是否为 vfio-pci
  • 若显示 igb_uioixgbevf,需手动解绑重绑:echo 0000:82:00.1 > /sys/bus/pci/devices/0000:82:00.1/driver/unbind,再 echo 0000:82:00.1 > /sys/bus/pci/drivers/vfio-pci/bind
  • 持久化绑定需写入 /etc/modprobe.d/vfio.conf:添加 options vfio-pci ids=8086:154c,8086:154d(用 lspci -n -s 0000:82:00.1 查 vendor:device ID)
  • 注意:绑定 vfio-pci 后,VF 将无法作为常规网卡使用(ip link 不再可见),这是 DPDK 必要代价

sriov-network-device-plugin 报错 failed to list sriov network devices: no SR-IOV capable devices found

插件扫描的是 host 上已启用 SR-IOV 的 PF,不是 VF 数量,也不是是否创建了 NetworkAttachmentDefinition。

实操建议:

  • 检查 PF 是否开启 SR-IOV:cat /sys/class/net/ens1f0/device/sriov_numvfs —— 值必须 > 0;若为 0,需先 echo N > sriov_numvfs(N ≤ max_vfs)
  • 确认 PF 驱动支持 SR-IOV:ethtool -i ens1f0 | grep firmware,Intel 卡需 firmware ≥ 7.0,Mellanox 需 MLNX_OFED ≥ 5.0
  • 某些云厂商(如 AWS EC2、Azure HBv3)禁用 host 层 SR-IOV,插件必然扫不到 —— 此时不能硬上,得换用 ENA/EFA DPDK 驱动或放弃 VF 直通
  • 插件默认只扫 net 子系统设备,若 PF 被移出 net 命名空间(如某些容器运行时异常),也会漏掉

DPDK pod 启动后 rte_eth_dev_count_avail() 返回 0

不是插件没暴露资源,而是 pod 没拿到 VF 的 vfio-pci 设备节点,或 DPDK 应用没用对 PCI 地址。

实操建议:

  • 进 pod 执行 ls /dev/vfio/ —— 若为空,说明 device plugin 没成功挂载设备,检查 pod annotation:k8s.v1.cni.cncf.io/networks: '[{"name": "sriov-net", "interface": "net1"}]' 和对应 NetworkAttachmentDefinitionresourceName 是否匹配插件配置的 resourcePrefix(如 intel.com/sriov_net
  • 确认 pod spec 中有 securityContext.privileged: true,且 volumeMounts 包含 /dev/vfio(插件自动注入,但若用了自定义 runtimeClass 或 seccomp,可能被拦截)
  • DPDK 初始化时用的 PCI 地址必须和 lspci 在 pod 内看到的一致;别直接抄宿主机的地址 —— 容器内 PCI domain 可能不同,用 dpdk-devbind.py --status 看实际绑定情况
  • DPDK 20.11+ 默认启用 IOMMU,若宿主机 BIOS 关闭 VT-d/AMD-Vi,或内核启动参数没加 iommu=pt intel_iommu=onrte_eal_init 会静默失败

多个 DPDK pod 调度到同一节点,出现 VF 设备冲突或性能骤降

本质是资源隔离失效:VF 共享同一个 PF 的硬件队列和中断,且插件默认不校验 VF 分配唯一性。

实操建议:

  • SriovNetworkNodePolicy 中设置 deviceType: vfio-pci 并启用 isRdma: false(即使不用 RDMA,也建议显式声明),避免插件误把 VF 当成普通网络设备复用
  • 给每个 VF 分配独立的 MSI-X vector(非共享),并在 pod annotation 中通过 pod.alpha.kubernetes.io/device-capabilities 传递中断亲和性要求(需配合 kubelet --feature-gates=DevicePlugins=true
  • 监控 ethtool -S ens1f0 | grep tx_queue_.*packets —— 若多个 pod 对应的 VF 出现 queue 0/1 严重倾斜,说明流量没均衡,需调 PF 的 DCB 或 VMDq 参数,而非只调 pod
  • 最易忽略的一点:DPDK 应用若用 RTE_ETH_RX_OFFLOAD_CHECKSUM,而硬件校验和卸载未在 PF 层统一关闭(ethtool -K ens1f0 rx off tx off),会导致部分 VF 收包异常,现象是偶发丢包且无错误日志

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end=' ', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

192

2023.09.27

python print用法与作用
python print用法与作用

本专题整合了python print的用法、作用、函数功能相关内容,阅读专题下面的文章了解更多详细教程。

13

2026.02.03

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1657

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

506

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2310

2025.12.29

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

40

2026.01.19

class在c语言中的意思
class在c语言中的意思

在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

707

2024.01.03

python中class的含义
python中class的含义

本专题整合了python中class的相关内容,阅读专题下面的文章了解更多详细内容。

22

2025.12.06

Golang 实际项目案例:从需求到上线
Golang 实际项目案例:从需求到上线

《Golang 实际项目案例:从需求到上线》以真实业务场景为主线,完整覆盖需求分析、架构设计、模块拆分、编码实现、性能优化与部署上线全过程,强调工程规范与实践决策,帮助开发者打通从技术实现到系统交付的关键路径,提升独立完成 Go 项目的综合能力。

1

2026.02.26

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 9.7万人学习

Git 教程
Git 教程

共21课时 | 3.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号