不同的PMD可能需要不同的内核驱动程序才能正常工作。根据所用的PMD,应加载相应的内核驱动程序并将其绑定到网络端口。

1. UIO

一个小的内核模块,用于设置设备,将设备内存映射到用户空间并注册中断。在许多情况下,Linux内核中包含的标准uio_pci_generic模块可以提供uio功能。可以使用以下命令加载该模块:

sudo modprobe uio_pci_generic

注意:
uio_pci_generic模块不支持虚拟函数的创建。

作为uio_pci_generic的替代,DPDK还包括igb_uio模块,该模块可在上述kmod子目录中找到。可以如下所示加载它:

sudo modprobe uio
sudo insmod kmod/igb_uio.ko

注意
从DPDK v20.02开始默认禁用igb_uio模块。要构建它,应启用配置选项CONFIG_RTE_EAL_IGB_UIO。计划将igb_uio模块移动到其他git存储库。

注意
对于某些不支持传统中断的设备,例如如果使用虚拟功能(VF)设备,则可能需要使用igb_uio模块代替uio_pci_generic。

注意
如果启用了UEFI安全启动,则Linux内核可能会禁止在系统上使用UIO。因此,用于DPDK的设备应绑定到vfio-pci内核模块,而不是igb_uio或uio_pci_generic。有关更多详细信息,请参见下面的将网络端口绑定到内核模块和从内核模块解除绑定。

注意

如果用于DPDK的设备绑定到uio_pci_generic内核模块,请确保IOMMU已禁用或直通。可以在x86_64系统上的GRUB命令行中在inommu = pt上添加intel_iommu = off或amd_iommu = off或intel_iommu = on或intel_iommu = on,或者在aarch64系统上添加iommu.passthrough = 1。

由于DPDK 1.7及更高版本提供VFIO支持,因此对于支持使用VFIO的平台,可以选择使用UIO。

2. VFIO

与UIO相比,依靠IOMMU保护,驱动程序更强大,更安全。要使用VFIO,必须加载vfio-pci模块:

sudo modprobe vfio-pci

请注意,为了使用VFIO,您的内核必须支持它。从3.6.0版开始,Linux内核中已包含VFIO内核模块,通常默认情况下会提供VFIO内核模块,但是请查阅您的发行版文档以确保确实如此。

从Linux 5.7版开始的vfio-pci模块支持虚拟功能的创建。将PF绑定到vfio-pci模块后,用户可以通过sysfs接口创建VF,并将这些VF自动绑定到vfio-pci模块。

当PF绑定到vfio-pci时,它具有由随机生成的初始VF令牌。出于安全原因,此令牌是只写的,用户无法直接从内核读取它。要访问VF,用户需要使用令牌参数启动PF,以UUID格式设置VF令牌,然后可以使用此新令牌访问VF。

由于vfio-pci模块使用VF令牌作为内部数据来提供SR-IOV PF和VF之间的协作,因此DPDK可以对绑定到一个应用程序的所有PF设备使用相同的VF令牌。可以通过EAL参数–vfio-vf-token指定此VF令牌。

1. Generate the VF token by uuid command14d63f20-8445-11ea-8900-1f9ce7d5650d2. sudo modprobe vfio-pci enable_sriov=12. ./usertools/dpdk-devbind.py -b vfio-pci 0000:86:00.03. echo 2 > /sys/bus/pci/devices/0000:86:00.0/sriov_numvfs4. Start the PF:./x86_64-native-linux-gcc/app/testpmd -l 22-25 -n 4 -w 86:00.0 \--vfio-vf-token=14d63f20-8445-11ea-8900-1f9ce7d5650d --file-prefix=pf -- -i5. Start the VF:./x86_64-native-linux-gcc/app/testpmd -l 26-29 -n 4 -w 86:02.0 \--vfio-vf-token=14d63f20-8445-11ea-8900-1f9ce7d5650d --file-prefix=vf0 -- -i

另外,要使用VFIO,内核和BIOS都必须支持并配置为使用IO虚拟化(例如Intel®VT-d)。

注意
vfio-pci模块不支持在Linux 5.7之前的版本中创建虚拟功能。

为了在以非特权用户身份运行DPDK应用程序时正确运行VFIO,还应设置正确的许可权。这可以通过使用DPDK安装脚本(位于dpdk-setup.sh,位于usertools目录中)来完成。

注意
可以在没有IOMMU的情况下使用VFIO。尽管这与使用UIO一样不安全,但在IOMMU不可用的情况下,它的确使用户可以保持VFIO拥有的设备访问和编程的程度。

原文链接:http://doc.dpdk.org/guides/linux_gsg/linux_drivers.html

DPDK使用linux drivers(二十九)相关推荐

  1. 【Microsoft Azure 的1024种玩法】二十九.基于Azure VM快速实现网络入侵检测 (IDS) 及网络安全监视 (NSM)

    [简介] 数据包捕获是一个重要组件,可以实施网络入侵检测系统 (IDS) 并执行网络安全监视 (NSM). 我们可以借助开源 IDS 工具来处理数据包捕获,并检查潜在网络入侵和恶意活动的签名. 使用网 ...

  2. 2021年大数据Hadoop(二十九):​​​​​​​关于YARN常用参数设置

    全网最详细的Hadoop文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 本系列历史文章 前言 关于yarn常用参数设置 设置container分配最小内 ...

  3. 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验二十九:LCD模块

    实验二十九:LCD模块 据说Alinx 301支持 7"TFT,好奇的朋友一定疑惑道,它们3.2"TFT以及7"TFT等两者之间究竟有何区别呢?答案很简单,前者自带控制器 ...

  4. Bootstrap入门(二十九)JS插件6:弹出框

    Bootstrap入门(二十九)JS插件6:弹出框 加入小覆盖的内容,像在iPad上,用于存放非主要信息 弹出框是依赖于工具提示插件的,那它也和工具提示是一样的,是需要初始化才能够使用的 首先我们引入 ...

  5. SAP UI5 应用开发教程之二十九 - SAP UI5 的路由和导航功能介绍试读版

    一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 应用开发教程之一:Hello World SAP UI5 应用开发教程之二:SAP U ...

  6. FreeSql (二十九)Lambda 表达式

    FreeSql 支持功能丰富的表达式函数解析,方便程序员在不了解数据库函数的情况下编写代码.这是 FreeSql 非常特色的功能之一,深入细化函数解析尽量做到满意,所支持的类型基本都可以使用对应的表达 ...

  7. 【零基础学Java】—final关键字与四种用法(二十九)

    [零基础学Java]-final关键字与四种用法(二十九) 一.final关键字 final关键字代表最终.不可改变的 常见的四种用法: 可以用来修饰一个类 可以用来修饰一个方法 可以用来修饰一个局部 ...

  8. JavaScript学习(二十九)—JS常用的事件

    JavaScript学习(二十九)-JS常用的事件 一.页面相关事件 onload事件:当页面中所有的标签都加载完成后厨房该事件,格式:window.onload <body><sc ...

  9. WCF技术剖析之二十九:换种不同的方式调用WCF服务[提供源代码下载]

    原文:WCF技术剖析之二十九:换种不同的方式调用WCF服务[提供源代码下载] 我们有两种典型的WCF调用方式:通过SvcUtil.exe(或者添加Web引用)导入发布的服务元数据生成服务代理相关的代码 ...

  10. Spring Cloud 2.2.2 源码之二十九nacos客户端获取配置原理四

    Spring Cloud 2.2.2 源码之二十九nacos客户端获取配置原理四 MetricsHttpAgent的httpGet ServerHttpAgent的httpGet HttpSimple ...

最新文章

  1. vscode出现磁盘路径大小写问题_vscode下python使用相对路径失败问题
  2. Binary Tree Inorder Traversal
  3. 设△ABC的内角A,B,C,所对的边分别为a,b,c,且acosB-bcosA=3/5c,则tan(A-B)的最大值为
  4. 微软认知服务应用秘籍 – 与机器人聊知识
  5. so文件linux注册,SO文件格式
  6. Bootstrap 图片样式
  7. 38、linux shell常用函数,nice
  8. Java修饰符public,private,protected及默认的区别
  9. C#编写ActiveX控件
  10. html5 中的 wbe storage
  11. 测试思维:正向思维和逆向思维
  12. java roundup函数_随手记之Linux 2.6.32内核SYN flooding警告信息
  13. 基于遗传算法的柔性车间调度优化研究附Matlab代码
  14. K成本中心PO总账科目矛盾报错
  15. HM-3200: Tetramesh(四面体网格)
  16. 金庸小说人物知识图谱构建——获取共现关系
  17. 【LeetCode】解题309:Best Time to Buy and Sell Stock with Cooldown(动态规划)
  18. 使用tushare获取股票历史交易数据
  19. mysql中的汉字怎么转换_Mysql中文汉字转拼音的实现(每个汉字转换全拼)
  20. 玩转Jetson Nano(一)烧写系统

热门文章

  1. python的none是什么-python中stream=None什么意思?
  2. python语言if语句-Python中的if判断语句入门
  3. python字符串写入excel-python-xlwt写入excel详解
  4. 简明python教程 豆瓣-Python 有哪些入门学习方法和值得推荐的经典教材?
  5. JSR338(Java Persistence)
  6. 一个人越来越有出息的7大迹象
  7. LeetCode Find All Numbers Disappeared in an Array
  8. Linux中设置服务自启动的三种方式(转)
  9. java中的内部接口
  10. JS、CSS中的相对路径