为了支持Userspace IO,DPDK可以选择如下三种类型的驱动:

  • uio_pci_generic
  • uio + igb_uio
  • vfio-pci

uio_pci_generic是内核原生的一种uio驱动,该驱动提供了uio功能,直接使用如下命令加载:

sudo modprobe uio_pci_generic

这个原生驱动是不支持VF设备创建的,因此DPDK也提供了另外一种uio驱动igb_uio,它是可以用于宿主机上来创建VF设备的。适用性比内核原生的uio_pci_generic更强一些,其中igb_uio.ko是由dpdk代码库编译出来的:

sudo modprobe uio
sudo insmod kmod/igb_uio.ko

从DPDK release 1.7开始,DPDK对VFIO进行了支持,因此VFIO Driver成了新的可选项:

sudo modprobe vfio-pci

当DPDK使用vfio来实现网络功能时可以直接加载该驱动。

特别注意:
对于使用VFIO驱动来使用DPDK的场景,必须保证:
1.硬件上支持支持VT-x、VT-d,BIOS中需要打开相关特性
2.对于物理机的内核中需要支持IOMMU特性(在启动参数添加 iommu=pt, intel_iommu=on

物理机上使用DPDK

在物理机上使用DPDK,需要内核中加载DPDK PMD Driver,那么需要使用如下命令加载DPDK的驱动:

modprobe uio
insmod igb_uio
usertools/dpdk-devbind.py --bind=igb_uio bb:ss.f

当然这里我们也可以使用上面介绍过的其他类型的内核模块:uio_pci_generic 或者 vfio-pci

虚拟机中使用DPDK

对于支持SR-IOV的网卡来说,比如Intel的X710/XL710网卡,在虚拟化的环境中使用,网卡可以进行透传,本文以透传的方式来进行实践介绍,对于支持SR-IOV的网卡来说,它分为PF和VF模块,在宿主机中需要加载对应的PF Driver和VF Driver来驱动这两个子模块。

宿主机

在宿主机上可以直接使用Linux kernel官方的intel PF驱动,比如i40e,也可以使用DPDK专用的 PMD PF驱动。如果使用了DPDK PMD PF 驱动,那么这个宿主机网络的管理权就完全交给DPDK了。

  • 方案一:i40e驱动
rmmod i40e (To remove the i40e module)
insmod i40e.ko max_vfs=2,2 (To enable two Virtual Functions per port)

通过重新加载intel提供的i40e驱动,并指定max_vfs参数来创建VF功能,对于该网卡的VF功能内核默认使用的驱动为i40evf,因此在使用dpdk之前,还需要在Host上将VF与i40evf驱动解绑,重新绑定到vfio-pci驱动上:

modprobe vfio-pci

宿主机中需要使用vfio_pci这个内核模块来对需要分配给客户机的设备进行隐藏, 从而让宿主机和未被分配该设备的客户机都无法使用该设备, 达到隔离和安全使用的目的。而在客户机不需要使用该设备后, 让宿主机使用该设备, 则需要将其恢复到使用原本的驱动。

这里也可以利用DPDK提供的脚本dpdk_bind_nic.py来设置:

usertools/dpdk-devbind.py --bind=vfio-pci  bb:ss.f

此时该VF已经由vfio驱动接管,对于上一章介绍的,如果在宿主机上使用VFIO DPDK,那么此时就已经满足了条件,但是我们此处是为了演示虚拟机中使用DPDK,所以此时不能启动DPDK去使用该VF,而需要在虚拟机中透传该设备来使用。

  • 方案二:DPDK PMD PF驱动

需要内核启动参数中使能iommu=pt, intel_iommu=on,然后启动后加载DPDK驱动:

modprobe uio
insmod kmod/igb_uio.ko
usertools/dpdk-devbind.py --bind=igb_uio bb:ss.f
echo 2 > /sys/bus/pci/devices/0000\:bb\:ss.f/max_vfs (To enable two VFs on a specific PCI device)

虚拟机

对于虚拟机来说,透传过来的VFIO网卡对于虚拟机来说就相当于是一个常规的物理网卡,默认就会使用该物理网卡对应的驱动,比如i40e driver,那么如果要在虚拟机中使用DPDK,就需要把虚拟网卡重新绑定到igb_uio驱动,这样就可以在虚拟机中使用DPDK了。实际上操作还是与宿主机中一样:

modprobe uio
insmod kmod/igb_uio.ko
usertools/dpdk-devbind.py --bind=igb_uio bb:ss.f

DPDK (1) - PMD驱动方案相关推荐

  1. DPDK网卡PMD驱动

    以/home/user/dpdk-stable-18.11.11/drivers/net/i40e目录下的驱动为例 源代码文件有 # ls base i40e_ethdev_vf.c i40e_log ...

  2. dpdk pmd驱动分析

    缘起dpdk_devbind.py 运行dpdk程序之前我们一般都会使用dpdk_devbind.py程序对指定的驱动与设备进行绑定与解绑(如下命令).那么dpdk_devbind.py程序是如何实现 ...

  3. DPDK pmd驱动初始化(十九)

    在没有引入pmd用户态网卡驱动之前, 网卡在收到报文后,网卡驱动会将报文从网卡缓冲区拷贝到内核, 接着内核在把报文拷贝到应用层,整个过程需要2次的拷贝以及系统调用.当应用层需要发送数据时,应用层将报文 ...

  4. dpdk pmd驱动初始化

    在没有引入pmd用户态网卡驱动之前, 网卡在收到报文后,网卡驱动会将报文从网卡缓冲区拷贝到内核, 接着内核在把报文拷贝到应用层,整个过程需要2次的拷贝以及系统调用.当应用层需要发送数据时,应用层将报文 ...

  5. 从 dpdk-20.11 移植 intel E810 百 G 网卡 pmd 驱动到 dpdk-16.04 中

    文章目录 前言 移植前的调研工作 dpdk-20.11 ice pmd 驱动源码的组成 移植问题与解决方案记录 16.04 使用 make 编译,20.11 使用 meson 与 ninja 方式编译 ...

  6. DPDK — Userspace PMD 源码分析

    目录 文章目录 目录 PMD driver 通过 IGB_UIO 与 UIO 进行交互 注册一个 UIO 设备 PMD 的应用层实现 Interrupt DPDK(中断模式) PMD driver 通 ...

  7. 【摄影补光灯调光驱动方案】低亮度无频闪无抖动无极调光调色IC芯片 LED美颜灯升压恒流芯片FP7209 最大可驱动300W

    一:方案名称: [摄影补光灯调光驱动方案]低亮度无频闪无抖动无极调光调色IC芯片 LED美颜灯升压恒流芯片FP7209 最大可驱动300W 二:方案描述: FP7209 是一颗非同步升压 LED 驱动 ...

  8. hdmi转lvds驱动方案。 输入支持vga,hdmi,av,输出支持lvds单通道和双通道

    hdmi转lvds驱动方案. 输入支持vga,hdmi,av,输出支持lvds单通道和双通道,支持ttl输出. 支持osd. RTD2660H全部资料,包括datasheet,参考源码,编译好的固件, ...

  9. 第三代电力电子半导体:SiC MOSFET学习笔记(三)SiC驱动方案

    如何为SiC MOSFET选择合适的驱动芯片?(英飞凌官方) 由于SiC产品与传统硅IGBT或者MOSFET参数特性上有所不同,并且其通常工作在高频应用环境中, 为SiC MOSFET选择合适的栅极驱 ...

  10. 【大功率摄影灯/舞台灯RGB调光驱动方案】DC-DC降压恒流LED双路调光芯片FP7126,共阳极高辉无频闪调光,调光深度可达万分之一

    方案名称 [大功率摄影灯/舞台灯RGB调光驱动方案]DC-DC降压恒流LED双路调光芯片FP7126,共阳极高辉无频闪调光,调光深度可达万分之一 描述 FP7126 是平均电流模式控制的 LED 驱动 ...

最新文章

  1. 【设计模式】代理模式 ( 动态代理 )
  2. 多进程爬虫(爬取小说)Python实现
  3. 现代密码学3.7--CCA安全
  4. 洛谷 P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm
  5. 基于centos6.7的docker私有仓库搭建
  6. ubuntu服务器创建共享文件夹,Ubuntu samba安装创建共享目录及使用
  7. oracle 存储过程设置回滚点,(转)oracle 存储过程事宜使用断点回滚 -savepoint
  8. 完美世界:笔试题(最小漂流船只数累计,主城之间的最小距离迪杰斯特拉)...
  9. 计算机怎么弹出专业团队,2018年专业技术人员继续教育答案92分
  10. 毫米和像素怎么换算_自己计算出来的关于像素和厘米单位的换算
  11. 小米路由器青春版开启SSH刷入Padavan固件
  12. python中数字的阶乘_python里面阶乘怎么打
  13. xcode清理缓存瘦身方法整理
  14. NetBeans IDE12.3无法卸载
  15. hardfault常见原因_STM32 出现 hardfault_handler 处理方法
  16. linux内核网络协议栈--netif_receive_skb()函数(八)
  17. 爬取B站视频 - m4s文件的相关研究
  18. Google Adsense通过西联快汇收取收入的详细步骤
  19. html语音输入功能讯飞,win10系统利用讯飞语音输入法实现电脑语音输入的方案介绍...
  20. cdoj1638 红藕香残玉簟秋,轻解罗裳,独上兰舟。

热门文章

  1. 电子版2寸照片的像素是多少
  2. 基于Python实现RRT与双向RRT算法
  3. FlexPaper — 可以用来仿豆丁网、百度文库的PDF在线阅读功能
  4. 计算机里文本格式,设置计算机以更改文本文档格式,如何更改文本文档格式-...
  5. android 桌面小插件下载地址,桌面小组件app下载
  6. 运筹学基础及其matlab,运筹学基础及其MATLAB应用
  7. 京东线报-京东实时线报-高级京东线报接口
  8. 网赚项目活动线报监控提醒
  9. Matlab画图程序
  10. c语言入门篇:程序调试方法