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

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

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

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

实现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=$1pushd /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官网,这里不多说。


什么是SR-IOV?先用起来再说相关推荐

  1. 华为dra路由方式分为relay和proxy_华为云计算(3)——网络虚拟化

    ​关注微信公众号IT小组,获取更多干货知识~ 一.网络虚拟化 网络虚拟化在介绍网络虚拟化之前,需要考虑一个问题--为什么需要网络虚拟化呢?之所以要对网络进行虚拟化,是因为在没有进行虚拟化之前,每个服务 ...

  2. Tungsten Fabric SDN — for Akraino Based Network Edges

    目录 文章目录 目录 Tungsten Fabric as SDN for Akraino Based Network Edges Deployment Tungsten Fabric as SDN ...

  3. OpenStack 的 SR-IOV 虚拟机热迁移

    目录 文章目录 目录 前言列表 前言 SR-IOV Pass-through 虚拟机热迁移的问题 基于 macvtap 层的 SR-IOV 虚拟机热迁移 Workaround SR-IOV Pass- ...

  4. OpenStack 企业私有云的若干需求(7):电信行业解决方案 NFV

    本文转自网络文章,内容均为非盈利,一切版权原作者所有. 文章内容仅代表原作者独立观点,不代表本账号立场,转载此文章在于个人学习收藏,传递更多知识. 如有侵权,马上删除. 原文作者:世民谈云计算(微信公 ...

  5. 万兆电口网卡性能分析

    FM-ELX540BT2-T2 是一款PCI-E双口万兆双电口网卡,采用英特尔原装X540芯片,FM-ELX540BT2-T2是飞迈瑞克的一款新的电口万兆网卡,这也标志着万兆以太网进入更广阔的服务器市 ...

  6. CNA, FCoE, TOE, RDMA, iWARP, iSCSI等概念及 Chelsio T5 产品介绍

    鉴于研究所的需求,最近开始研究Chelsio T5(终结者5),本篇博文对相关技术的基础概念做了罗列,并给了一些扩展学习链接.后续自己将针对RDMA技术做进一步学习和研究! 核心基础概念 FCoE:以 ...

  7. 查看当前设备是否启用SR-IOV

    参考: 在 Windows Server 上為 Hyper-V 虛擬機配置 SR-IOV - HeyAdvice.net 虚拟化中的SR-IOV - 爱码网 Windows 使用PowerShell ...

  8. 华为云05之网络虚拟化

    华为云之网络虚拟化 网络虚拟化有三种实现方式: 1.直接是Domain0来完成网络虚拟化. 2.底层硬件层是一个智能的网卡(INIC),在VM侧装Tools,利用Tools的驱动来使用INIC,不过这 ...

  9. 我对互联网体系结构的认识

    1.引言 经过40多年的发展,互联网(Internet)已经成为集信息采集.传输.存储与处理于一体的信息社会的重要基础设施.Internet设计之初主要用于解决大型机等资源的时分复用问题,尽管计算技术 ...

  10. onload--Parameter Reference

    Parameter List The parameter list details the following: •The environment variable used to set the p ...

最新文章

  1. WindowsTime服务设置
  2. VC ActiveX 控件 开发总结
  3. 探索ArrayList自动改变size真相
  4. 关于 Repeater 控件嵌套的使用。在嵌套中添加 其它控件(如:按钮),并影响其它控件的方法,很重要哦,测试通过。...
  5. Java是世界上最好的语言!
  6. 05-windows下R安装包的几种方式
  7. PXC 安装 for 5.7
  8. Docker 运行Tensorboard 和 jupyter的正确方法
  9. 面试了一个 35+ 岁的大佬,一言难尽......
  10. SODB RBSP EBSP的区别
  11. Python实现高斯滤波
  12. Envi辐射定标及大气校正
  13. 音乐播放器 - iOS开发
  14. php转换透明ico,php在线生成ico文件的代码_PHP教程
  15. 用计算机编程解魔方,魔方程序 (详细的解释)
  16. 小程序微信运动时间戳格式转换+列表渲染微信运动数据
  17. 微信小程序 使用canvas绘图
  18. GAMES101-现代计算机图形学入门-闫令琪 - lecture15 光线追踪3 - 辐射度量学、渲染方程(Ray Tracing 3) - 课后笔记
  19. Normalized and Geometry-Aware Self-Attention Network for Image Captioning阅读笔记
  20. 洛谷P2294 [HNOI2005]狡猾的商人

热门文章

  1. C++ OpenCV透视变换综合练习
  2. 【拆机】SG105五口千兆交换机
  3. 北京大学计算机系孙小虎,孙小虎-北京大学物理学院技术物理系
  4. Codeup 1009-1012 python
  5. 环形嵌套进度条(带百分比)
  6. linux虚拟机联网问题:destination host unreachable
  7. 有没有免费的提词器?这款软件很好用
  8. 通过cv2读取视频,并在视频上画框
  9. 时间序列分析的表示学习时代来了?
  10. 实战:2019 强网杯 final Web Writeup