tnblog
首页
视频
资源
登录

SRIOV 与 DPDK

5426人阅读 2022/12/26 16:23 总访问:3466971 评论:0 收藏:0 手机
分类: 容器编排

SRIOV 与 DPDK

SRIOV 基本介绍

PCI 简介


简单来讲:物理主机网卡资源直接挂载到虚拟机使用,不需要经过hypervisor的模拟和过滤,虚拟机发的命令直接送到物理设备。

PCIE 简介


由于PCI只支持一种规格的卡槽,而PCIE支持不同类型大小规格的卡曹,可以看作PCI的升级版。功能都一样的。

SR-IOV 简介


我们知道一台主机上肯定可以创建出不止一台虚拟机,但是PCIE硬件物理网卡设备只有一台所以根本不够分。所以SR-IOV就诞生了,主要作用于把物理网卡分成网卡池,这样就够用了。

SR-IOV 使用 physical functions (PF) 和 virtual functions (VF) 为 SR-IOV 设备管理全局功能。

PF:包含SR-IOV功能的完整PCIe设备,PF作为普通的PCIe设备被发现、管理和配置。PF通过分配VF来配置和管理SR-IOV功能。禁用SR-IOV后,主机将在一个物理网卡上创建一个PF。

VF:是轻量级PCIe功能(I/O 处理)的PCIe设备,每个VF都是通过PF来生成管理的,VF的具体数量限制受限于PCIe设备自身配置及驱动程序的支持,启用SR-IOV后,主机将在一个物理NIC上创建单个PF和多个VF。VF的数量取决于配置和驱动程序支持。
每个SR-IOV设备都可有一个PF(Physical Functions),并且每个PF最多可有64,000个与其关联的 VF(Virtual Function)。PF 可以通过寄存器创建VF,这些寄存器设计有专用于此目的的属性。一旦在PF中启用了 SR-IOV,就可以通过PF的总线、设备和功能编号(路由 ID)访问各个VF的PCI配置空间。
每个VF都具有一个PCI内存空间,用于映射其寄存器集。VF设备驱动程序对寄存器集进行操作以启用其功能,并且显示为实际存在的PCI设备。创建 VF
后,可以直接将其指定给虚拟机或各个应用程序。此功能使得虚拟功能可以共享物理设备,并在没有CPU和虚拟机管理程序软件开销的情况下执行 I/O。

DPDK简介


从前面的分析得知目前网络IO的实现的方式中,内核是导致性能瓶颈的原因所在,要解决性能问题就需要绕过内核,直接在用户态收发包。
1、内核bypass:通过UIO(Userspace I/O)旁路数据包,实现用户态数据包收发,减少上下文切换以及内存拷贝。
2、使用多核编程代替多线程编程:设置 CPU 的亲和性,将线程和 CPU 核进行一比一绑定,减少彼此之间调度切换。
3、使用大页内存代替普通的内存:减少 cache-miss。
4、采用无锁技术:解决资源竞争问题。

预先准备

前提


首先需要确保VT-D在BIOS层中的启动。
根据您使用的NIC,全局和/或每个NIC启用SRIOV功能,例如,应在BIOS级别为每个NIC禁用Intel x710。
升级内核引导行以启用intel_iomu=oniommu=pt

  1. grubby --update-kernel=ALL --args="iommu=pt intel_iommu=on"
  2. reboot

巨页(Hugepage)的支持


大多数网络应用程序使用巨大的页面,因此您可能需要启用该功能。请编辑/etc/default/grub并添加Hugepage.

  1. GRUB_CMDLINE_LINUX="nofb nomodeset vga=normal iommu=pt intel_iommu=on default_hugepagesz=1G hugepagesz=1G hugepages=16"
  2. #Rebuild grub.cfg
  3. grub2-mkconfig -o /boot/grub2/grub.cfg && reboot

配置创建与安装


安装SRIOV的yaml文件。

  1. git clone https://github.com/k8snetworkplumbingwg/sriov-cni.git
  2. cd sriov-cni
  3. kubectl apply -f images/k8s-v1.16/sriov-cni-daemonset.yaml


创建SRIOV配置文件。

  1. vim sriovdp-config.yaml


pfNames表示物理网卡的名字,em1#0-6表示em1物理网卡分出0-6个VF。
drivers表示设备注册的驱动程序名称。

  1. apiVersion: v1
  2. kind: ConfigMap
  3. metadata:
  4. name: sriovdp-config
  5. namespace: kube-system
  6. data:
  7. config.json: |
  8. {
  9. "resourceList": [{
  10. "resourceName": "intel_sriov_kernel0",
  11. "selectors": {
  12. "pfNames": ["em1#0-6"],
  13. "drivers": ["igbvf"]
  14. }
  15. }
  16. ]
  17. }
  1. kubectl apply -f sriovdp-config.yaml
  1. git clone https://github.com/k8snetworkplumbingwg/sriov-network-device-plugin.git
  2. cd sriov-network-device-plugin
  3. kubectl apply -f images/k8s-v1.16/sriov-cni-daemonset.yaml


创建网络连接定义SR-IOV类型。
请复制粘贴以下定义更新子网的值并将其应用于我们的群集:

  1. apiVersion: "k8s.cni.cncf.io/v1"
  2. kind: NetworkAttachmentDefinition
  3. metadata:
  4. name: sriov-kernelnet0
  5. annotations:
  6. k8s.v1.cni.cncf.io/resourceName: intel.com/intel_sriov_kernel0
  7. spec:
  8. config: '{
  9. "type": "sriov",
  10. "cniVersion": "0.3.1",
  11. "name": "sriov-kernelnet0",
  12. "spoofchk": "off",
  13. "type": "sriov",
  14. "vlan": 80,
  15. "ipam": {
  16. "type": "whereabouts",
  17. "range": "192.168.80.0/24",
  18. "range_start": "192.168.80.20",
  19. "range_end": "192.168.80.50",
  20. "gateway": "192.168.80.1"
  21. }
  22. }'


主密钥值是对工作节点中的 *_second nic*_ 的引用。

  1. kubectl apply -f networkattachdefinition-sriov.yaml


网络连接定义验证SR-IOV类型
让我们通过列出和描述新的网络连接定义来验证我们的工作

  1. kubectl get net-attach-def


使用SR-IOV接口创建Pod(内核驱动程序)

  1. vim pod0-case3.yaml
  1. $ cat pod0-case3.yaml
  2. apiVersion: v1
  3. kind: Pod
  4. metadata:
  5. name: pod0-case-03-sriov-kernel
  6. annotations:
  7. k8s.v1.cni.cncf.io/networks: sriov-kernelnet0
  8. spec:
  9. containers:
  10. - name: pod0-case-03
  11. image: docker.io/centos/tools:latest
  12. command:
  13. - /sbin/init
  14. resources:
  15. requests:
  16. intel.com/intel_sriov_kernel0: '1'
  17. limits:
  18. intel.com/intel_sriov_kernel0: '1'
  1. kubectl apply -f pod0-case3.yaml
  1. kubectl exec pod0-case-03 -- ethtool -i net2
  2. kubectl exec pod0-case-03 -- ethtool -i net1


更多:https://www.freesion.com/article/9204224669/
未完待续。。。


欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

评价

默认昵称

2023/3/9 15:14:39

mac地址会更改但vxlan解析后mac地址除了源mac地址改为cni0的地址外目的mac是c3 pod的mac. 这里的源地址是被改为flannel.1的mac地址吧 ,你这里写的是cni0的地址

分布式服务架构微服务架构概念的区别联系

分布式:分散压力。微服务:分散能力。当下理解分布式:不同模块部署在不同服务器上作用:分布式解决网站高并发带来问题集...

jsController中分割字符串的方法

js: varstr=OpenRule; varstrs=newArray(); strs=str.split(","); for(vari=0;i<strs.length;i++){ $(&q...

Service-stack.redis配置连接池读写分离(处理并发相关等)

配置连接池与读写分类 //写节点(主节点) List<string>writes=newList<string>(); writes.Add("123456a...

CSS相对定位绝对定位

一般相对定位和绝对定位可以配合起来使用 例如实现如下的效果 只需要在外层div设置为相对定位,在内部设置为绝对定位就...

C委托事件

1.什么是委托?  委托在C#里的意义和在现实里差不多,从字面意思理解即可。举个例子:领导委托小张去传递个文件,这就是...

asp.net core2.0 依赖注入 AddTransientAddScoped的区别

asp.net core主要提供了三种依赖注入的方式其中AddTransient与AddSingleton比较好区别AddTransient瞬时模式:每次都获取一...

Vue.js+Layer实现表格数据绑定更新

一:使用Vue.js绑定好数据与更新事件 使用v-on绑定好事件,在事件里边直接把该行数据传递进去,在更新方法里边就可以直接...

下划线、换行、回车、空格ASCII码值对照表

下划线,ASCII码95换行 , ASCII码10回车 , ASCII码13空格 , ASCII码32ASCII码表:Bin(二进制)Oct(八进制)Dec(十进制)Hex(...

数据读取器指定的"xx"不兼容。某个类型为"xx"的成员在同名的数据读取器中没有对应的列

报错的地方var result= _db.Database.SqlQuery<SMachine>(sql).FirstOrDefault();经过分析,是因为SqlQuery方法查询...

git 下载提交命令

一.先使用git clone下载一个项目 git clone '项目地址' 这里要注意: clone的项目里边会自带git的一些信息,...

微信开发四 接受用户普通消息回复消息

微信接收用户普通消息的文章可以在官方中直接看微信普通消息分类:接受用户文本消息 与 回复文本信息 注意在接收用户普通...

记忆糖的关系【阅读听力】

Link Between Memory and SugarSugar On The BrainIt’s long been understood that there is a connection between memory...

婚姻心脏健康的关系【阅读听力】

Marriage and Heart HealthPlenty of studies have found that being married is generally good for health. One study ze...

iframe自适应高度配合net core使用

去掉iframe边框frameborder="0"去掉滚动条scrolling="no"iframe 自适应高度如果内容是固定的,那么就...

net core中使用url编码解码操作

net core中暂时还没有以前asp.net与mvc中的server对象。获取url的编码与解码操作不能使用以前的server对象来获取。使用的是...
这一世以无限游戏为使命!
排名
2
文章
634
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 : 好是好,这个对效率影响大不大哇,效率高不高
ASP.NET Core 服务注册生命周期
剑轩 : http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术