什么是SR-IOV?先用起来再说

这篇具有很好参考价值的文章主要介绍了什么是SR-IOV?先用起来再说。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

什么是SR-IOV?先用起来再说!

当然用起来之前还是得知道这东西是做什么的,以及相关的概念。

SR-IOV全称single root input/output virtualization,直译过来就是单根I/O虚拟化,怎么理解呢?首先SR-IOV最初的应用(也是我仅知的应用)是在网卡上,下图是一张SR-IOV示意图,单根的“根”即图片最底层的物理网卡,SR-IOV起到的作用是把一张物理网卡虚拟化成多个虚拟网卡给虚拟机(VM)用。

跳过产生背景、原理、优劣,我们先直接看实现。

sriov,云计算,linux,ubuntu

实现SR-IOV(顺便实现一下Netronome智能网卡的OVS卸载功能)

硬件条件
  • 一台支持SR-IOV的主机或服务器(主板),SR-IOV功能在BIOS中已开启;
    我的就是台普通的DELL Optiplex7070主机,BIOS一开始都没动,好在虚拟化功能都是默认开启或者之前已经有人开启过的

  • 一块支持SR-IOV且能安装于上述设备的网卡;
    我的是Netronome CX 25Gx2的智能网卡(奢侈)

关于如何查看主机/服务器对SR-IOV的支持:

查起来太费劲,不如直接到BIOS里面看一看有没有这个选项,像Intel的就在BIOS中的Advanced->CPU Setup界面下,有Intel Virtual TechnologyVT-d Feature选项,都设置为Enabled就好。AMD则是叫AMD-Vi。而且一般来讲,支持的话都会默认打开吧,至少我的是默认打开的。

网卡的产品介绍一般都会提到对SR-IOV的支持,这个查一查就好。

不满足以上硬件条件的话就别跟着做了。

系统和准备工作

我是基于Ubuntu 20.04.4,其他系统应该也没什么大碍,最好是Linux就是了。

在继续之前把系统intel_iommu打开:

先查看/proc/cmdline中是否有intel_iommu=on字样

$ cat /proc/cmdline

如果没有,修改/etc/default/grub文件,在其中的GRUB_CMDLINE_LINUX="",改为GRUB_CMDLINE_LINUX="intel_iommmu=on"(里面已有参数的话,多个参数用空格隔开),并执行sudo update-grub使修改生效(没有该命令的话是缺少软件包,执行:sudo apt-get install grub2-common),之后重启系统,再次查看iommu是否重新开启。使用dmesg | grep -e DMAR -e IOMMU以查看启动过程中与iommu有关的信息。

此外还需要安装虚机,我使用的是KVM,后续修改SR-IOV用的图形界面。其他的应该也支持SR-IOV吧。

Netronome网卡顺便一做的事(其他网卡就不用参考这条了)

其实我的初衷只是想做好Netronome网卡卸载OVS的实验,SR-IOV才是顺便一学的事情。

为了让Netronome网卡卸载OVS,需要更换网卡固件为flower,具体操作为:

$ cd /lib/firmware/netronome
$ rm -f *.nffw
$ for firmware in $(ls flower); do ln -sf flower/$firmware $firmware; done

还写了一个sh脚本,切换起来方便:

#!/bin/bash

# Usage: ./switch_firmware [bpf/flower/nic]

FIRMNAME=$1

pushd /lib/firmware/netronome
rm -f *.nffw
for firmware in $(ls $FIRMNAME); do ln -sf $FIRMNAME/$firmware $firmware; done
echo "Firmware re linked. Removing nfp mod..."
modprobe -r nfp
echo "nfp mod removed. Reloading nfp mod..."
modprobe nfp
echo "Firmware updated to $FIRMNAME."

这里我有一个BUG,一台主机切换flower固件后,lspci、ip link等都无法看到网卡,另一台机子就没问题。dmesg查看启动信息发现返回错误码(忘了多少了,后面补上)。

开始使用SR-IOV

我们把SR-IOV创建出的虚拟网卡称为VF,如下命令可以查看网卡物理端口enp3s0np0(称PF)最大支持创建的VF为55个;

$ cat /sys/class/net/enp3s0np0/device/sriov_totalvfs
55

创建VF也很简单,直接写入文件就行,比如分配2个VF给enp3s0np0

$ echo 2 > /sys/class/net/enp3s0np0/device/sriov_numvfs

这时lspci | grep Ethernet就能看到新添加的VF,以下设备中00:1f.603:00.0为物理网卡,03:08.003:08.1为新创建的VF虚拟网卡。此外使用ip linkifconfig等命令也可以看到新创建的VF信息,使用ethtool命令可以看到对应的driver为nfp_netvf

00:1f.6 Ethernet controller: Intel Corporation Ethernet Connection (5) I219-LM
03:00.0 Ethernet controller: Netronome Systems, Inc. Device 4000
03:08.0 Ethernet controller: Netronome Systems, Inc. Device 6003
03:08.1 Ethernet controller: Netronome Systems, Inc. Device 6003

这里ifconfig会发现多了四个接口:enp3s0v0enp3s0v1eth2eth4(创建VF前我也不知道哪多出来一个eth3)。03:08.0enp3s0v0eth2是对应的,剩下三个也是对应的,当03:08.0与某个虚机绑定后,enp3s0v0在host主机中消失,eth2还留着,官网没有详细解释,这部分还有点乱,希望以后能搞清楚怎么回事。

然后我们就可以把创建的VF与VM绑定了,这里我采用的是KVM的图形化管理器,因为懒得敲代码。

完成以后,VM就像有了自己的网卡,像是把物理网卡的端口拆成了几小份,分给每个VM使用。

不过从一开始的图片可以看出来,此时VM还是无法与同Host其他主机和外部主机通信的,我们还缺少一个Vitual Switch或者叫网桥,这里我们使用OVS,避免复杂,我们直接用Ubuntu的apt进行安装:

$ sudo apt update
$ sudo apt install -y openvswitch-switch

Netronome部分内容,其他网卡略过:

为了卸载OVS的kernel datapath,我们还需要使能OVS的硬件卸载模式,并重启OVS服务以生效:

$ ovs-vsctl set Open_vSwitch . other_config:hw-offload=true other_config:tc-policy=none
$ systemctl restart openvswitch-switch

此外网卡也要确认TC卸载标志位hw-tc-offload是否为on,flower固件默认是开启的。

$ ethtool -k enp3s0np0 | grep hw-tc-offloadhw-tc-offload: on

若非on可以:

$ ethtool -K enp3s0np0 hw-tc-offload on

创建网桥
$ ovs-vsctl add-br br0$ ovs-vsctl add-port br0 enp3s0np0$ ovs-vsctl add-port br0 eth2

这时外部主机和VM就可以互相通信了,VM用着同一块网卡的硬件资源,虚拟出自己的网卡,做到节省Host主机资源、提高性能等。

可惜的是我的Host主机太拉胯,开两个SR-IOV的虚机就死机,导致没做成SR-IOV的VM-VM实验。


Netronome部分内容,其他网卡略过:

OVS卸载相较于原始方案,区别就在于Netronome可以将Kernel中OVS的Fast path卸载到智能网卡,让原本由Kernel处理的流转移到硬件处理,进一步释放主机资源并提高性能。

使用如下命令即可查看已被卸载到网卡的流表:

# 查看卸载的流表

$ ovs-appctl dpctl/dump-flows type=offloaded# 查看未被卸载的流表$ ovs-appctl dpctl/dump-flows type=ovs

更多可以参考Netronome官网,这里不多说。文章来源地址https://www.toymoban.com/news/detail-834294.html


到了这里,关于什么是SR-IOV?先用起来再说的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Proxmox VE 8.1 Kernel 6.5.13-5-pve ,无法支持核显 SR-IOV 的问题

    我的之前的博客《利用显卡的SR-IOV虚拟GPU技术,实现一台电脑当七台用》介绍了 Proxmox VE 7.x 上启用核显虚拟化的方法。 并给出了两个脚本,快速启用核显的SR-IOV。该脚本在 Promox VE 7.x 和 8.x 都做了测试。 近期重新在 Proxmox VE 8.1 上部署,发现无法正常工作。  经过检查发现是

    2024年04月11日
    浏览(33)
  • 再说不会用python计算地球表面多边形面积,可不能了!(记录五种可行方法)

    由于地理投影导致导致每个像元实际地面面积不同,越靠近北极实际面积越小,越靠近赤道实际面积越大, 如果不进行面积加权就简单平均,会导致温度较实际温度偏低。 直接使用卫星地图的计算面积功能就会遇到这样的问题,多数卫星地图的计算面积功能是将地图假设为

    2024年02月01日
    浏览(31)
  • 为什么网吧的电脑用起来不卡?

    因为自己的电脑不适合打游戏,但我又想打,所以我对网吧的电脑开始研究起来 之前我在自己的笔记本上打游戏的时候,会出现人物名字和人物的位置不匹配的情况,有一次打游戏正打的火热,电脑却突然蓝屏并嗡嗡的响,我顿时一脸懵逼,于是长按电源键10秒才关机。 我就

    2024年02月10日
    浏览(53)
  • Linux驱动基础(HC-SR04超声波模块)

    本篇文章将讲解HC-SR04超声波模块的驱动程序编写,有了上篇SR501模块驱动程序编写的基础后这篇文章大家将会学的非常轻松。 HC-SR04超声波模块是一种常用于距离测量和障碍物检测的模块。它通过发射超声波信号并接收回波来计算所测量物体与传感器之间的距离。 HC-SR04超声波

    2024年02月05日
    浏览(35)
  • GEEer成长日记四:Landsat8_SR计算NDVI并时间序列分析

    前两次我们介绍了MODIS_NDVI和LANDSAT8_NDVI产品的时间序列,它们都是基于Landsat8_TOA影像制成的。实际工作中我们还需要通过LANDSAT8_SR影像进行NDVI时间序列分析,那么该怎么开展工作呢?本期我们就来介绍介绍。 下一期我们将介绍Sentinel-2数据在时间序列方面的研究。  如果想深入

    2023年04月14日
    浏览(24)
  • 《计算机是怎样跑起来的》

    2023/5/29 - 2023/5/30 如果仅仅把技术当作一个黑盒,只把时间花在学习其表面上,而并没有探索到其本质,就绝不应该认为自己已经\\\"懂\\\"了。 带着问题阅读正文的内容 1、计算机是执行输入、运算、输出的机器 2、程序是指令和数据的集合 3、计算机的处理方式有时和人们的思维习

    2024年02月07日
    浏览(28)
  • 【计算机是怎么跑起来的】基础:计算机三大原则

    想玩硬件,就要先了解硬件,从0开始了解一下我们日常使用的计算机呀~。 参考书:计算机是怎么跑起来的 输入,运算,输出是计算机硬件的基本工作原理。 换句话说:计算机是执行输入,运算,输出的三种操作的机器。 输入 指的是将外部信息通过输入设备(例如键盘、鼠

    2024年02月02日
    浏览(26)
  • SpringBoot 和 SpringCloud 有什么区别,一起来学习了解他们

    Spring Boot和Spring Cloud是两个非常流行的Java开发框架,它们都是由Spring Framework开发的,但是它们的定位和功能有所不同。本文将介绍Spring Boot和Spring Cloud的区别。 Spring Boot是一个轻量级的应用程序框架,它的目的是使Spring应用程序的开发变得更加快速和容易。Spring Boot通过自动

    2024年02月14日
    浏览(26)
  • 入职第一天:先用Git管好你的代码!

    本文并非面向完全的 Git 初学者,也不会详细介绍每一个 Git 命令和它的所有选项。相反,本文的目标读者是那些已经有一些基础,至少知道如何在本地仓库进行基本的版本控制操作,包括 git add , git commit 和 git log ,但是还没有在企业环境中真正使用 Git 进行过项目开发的开

    2024年02月13日
    浏览(39)
  • 一起来看看元宇宙为什么有必要与IPFS进行精确组合?

    基本上,元宇宙的所有产品都将是NFT,但这将导致越来越多的NFT数据,这也是元宇宙寻求突破的地方。 重要的是,数据必须永久存储,数据不能被操作以确保唯一性。也许你已经猜到了,在区块链中有满足这些要求的,即IPFS分布式存储。 Filecoin是一个激励层,运行在IPFS和区

    2024年02月10日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包