SR-IOV学习笔记

参考:《深入浅出DPDK》&前人的各种博客
SR-IOV全称Single Root IO Virtualization,单根虚拟化(多么高大上的名字>.<),是 Intel 在 2007年提出的一种基于硬件的虚拟化解决方案。

虚拟化背景

那什么又是虚拟化呢?抽象来说,虚拟化是资源的逻辑表示,虚拟化层将下层的资源抽象成另一种形式的资源,提供给上层调用。通过空间上分割(你用一部分我用一部分),时间上的分时(你用一秒我用一秒)以及模拟,虚拟化可以将一份资源抽象成多份。反过来说,虚拟化也可以将多份资源抽象成一份,比如说,通过对CPU、内存和I/O设备的虚拟化,可以为一个虚拟机提供完整的硬件能力的支持。
总的来说,虚拟化抽象了硬件层,允许多种不同的负载能共享一组资源。
虚拟化的优点非常明显,他可以显著提高服务器的使用率,能够进行动态分配,管理资源和负载的相互隔离,并提供高安全性和自动化。虚拟化还可以提供按需的服务配置和软件定义的资源编排,可以根据实际业务需求在云平台上扩展某类业务。

大致也可以看出俩,虚拟化实现主要有三部分的实现:

  • CPU虚拟化
  • 内存虚拟化
  • I/O虚拟化

CPU虚拟化和内存虚拟化,这里不大关注,我们可以重点看一下I/O虚拟化。

I/O虚拟化

I/O虚拟化包括管理虚拟设备和共享的物理硬件之间的IO请求的路由选择。实现方式有

  • I/O全虚拟化
  • I/O半虚拟化
  • I/O透传
    区别在于处理客户机和宿主机通信以及宿主机和宿主机架构上分别采用了不同的处理方式。
    在这里插入图片描述

I/O全虚拟化

如图所示,该方法可以模拟一些真实设备,一个设备的所有功能或总线结构(中断、DMA等)都可以在宿主机中模拟。客户机所能看到的就是一组统一的IO设备。宿主机截获客户机对IO设备的访问请求,通过软件模拟真实的硬件。
这种方式对客户急非常透明,无需考虑底层硬件的情况,不需要修改操作系统。但宿主机必须从硬件设备的最底层开始模拟,客户机完全感受不到这是在一个模拟的环境中,但这种效率比较低。

I/O半虚拟化

半虚拟化的意思是说,客户机操作系统能感知到自己时虚拟机,如上图所示,IO半虚拟化系统通过前端驱动/后端驱动实现的。客户机的驱动程序为前端,宿主机提供的与客户机通信的驱动程序为后端
前端驱动将客户机的请求通过与宿主机间的特殊通信机制发送给后端驱动,后端驱动在处理完请求再发送给物理驱动。比如,DPDK支持半虚拟化的前端virtio后端vhost
半虚拟化虽然和全虚拟化一样,都是使用软件完成虚拟化工作,但是机制不同。在全虚拟化中,所有对模拟IO设备的访问都会造成VM-Exit(虚拟机暂停运行,并将控制权交还给VMM或hypervisor),而在半虚拟化场景中,通过亲啊后端驱动程序的协商,使得数据传输中对共享内存的读写操作不会VM-Exit。
这种方式比较简单,软件处理起来也不会太慢,性能还算可以,但仍然达不到物理硬件的速度

I/O透传

这非常好理解,直接把物理设备分配给虚拟机使用,比如直接分配一个硬盘或者网卡给虚拟机(咋感觉这种处理已经偏离初始化了…),如上图所示。这种方式需要硬件平台具备IO透传技术,也就是网卡直通(passthough, 又是一个非常高大上的词)比如,Intel VT-d技术,这种方式可以获得近乎本地的性能,并且CPU开销不高。
这种方式优缺点很明显:

  • 高性能
  • 由于Intel VT-d的技术支持,其执行/O操作是大量减少,甚至避免VM-Exit
    缺点:
  • x86平台上的PCI和PCI-e设备有限,大量使用VT-d独立分配设备给客户机,会显著增加硬件成本(硬件厂商狂喜)
  • PCI/PCI-e透传的设备,动态迁移功能(从一台物理服务器迁移到另一台服务器上)受限。因为宿主机无法感知透传设备的内部状态。

其实说白了,一台物理机上可用的物理网卡有限,该如何实现实现水平扩展呢,于是乎,SR-IOV技术应运而生。

PCI-e SRIOV

SR-IOV是一组硬件标准,允许一个PCIe设备(如网络接口卡)在硬件层面虚拟化,分割成多个虚拟功能(Virtual Functions, VFs),每个虚拟功能可以独立地被虚拟机使用。
理解起来还是比较简单的,它的工作方式是,SRIOV 依靠两个驱动程序,一个由 VM 系列管理,称为 VF(Virtual Function 虚拟功能),另一个由主机(虚拟机管理程序)管理,称为 PF(Physical Function物理功能),如图:
在这里插入图片描述

图片来源:https://knowledgebase.paloaltonetworks.com/KCSArticleDetail?id=kA14u000000HAixCAG&lang=en_US%E2%80%A9

简而言之,虽然只有有限的PCIe设备资源,但是可以通过一个PCIe设备资源的PF去创建不同的虚拟化资源(VF)供虚拟机使用。
但是很多人都会陷入一个误区:PF就是物理网卡。但PF并不是真实的物理网卡。PF仅代表物理网络接口卡(NIC)上的一个完整功能的实例。PF提供了完整的PCIe功能集,可以管理和控制该物理网卡。物理网卡上,可以有一个或多个PF。每个PF可以创建多个VF,让虚拟机独立使用这些VF。
启用SRIOV之后,物理NIC将通过VF与虚拟机(VF driver)进行数据交互,反之亦然。那么这样一来即可跳过中间的虚拟化堆栈(即VMM层),以达到近乎于纯物理环境的性能,完美的实现了I/O透传的优点,避免了其缺点。

但但但,它真就那么完美吗,它就没有缺点吗???那肯定不至于,毕竟现在SRIOV并没有占据所有市场,我们可以来简单的挑挑刺儿

  • VF虚拟机不能在线迁移,这在云网络的环境中是硬伤
  • SRIOV从物理网卡接收到的数据包将直接到达客户机的接收队列,或者从客户机发送队列发出的包将直接到达其他客户机(如同一个PF的VF)的接收队列,或者直接从物理网卡发出,绕过了宿主机的参与。但在很多场景,有需求要求网络包必须先经过宿主机的处理(如防火墙、负载均衡等)
  • 可扩展性差,由于VF是通过BDF(bus device function)号进行隔离的,所以每个VF都需要各自的配置空间,产生的额外开销较大,一些intel网卡中最大支持数量只有256。

由于这些局限,才有了后来Intel的scalable IOV和Nvida Mellnox的Scalale function(看看~大佬们的起名都这么相似)以及I/O半虚拟化的发展,感兴趣的可以去搜一搜。

  • 参考
    https://blog.csdn.net/wangdd_199326/article/details/90476728
    https://knowledgebase.paloaltonetworks.com/KCSArticleDetail?id=kA14u000000HAixCAG&lang=en_US%E2%80%A9
    https://blog.csdn.net/weixin_60043341/article/details/126467233
    https://docs.nvidia.com/networking/display/bluefielddpuosv385/scalable+functions

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/778737.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

警惕AI泡沫:巨额投资与回报失衡

尽管高科技巨头们在AI基础设施上投入巨资&#xff0c;但AI带来的收入增长尚未显现&#xff0c;揭示了生态系统末端用户价值的重大缺口。 红杉资本分析师David Cahn认为&#xff0c;AI企业需每年赚取约6000亿美元才能抵消其AI基础设施&#xff08;如数据中心&#xff09;的成本&…

基于Java的网上花店系统

目 录 1 网上花店商品销售网站概述 1.1 课题简介 1.2 设计目的 1.3 系统开发所采用的技术 1.4 系统功能模块 2 数据库设计 2.1 建立的数据库名称 2.2 所使用的表 3 网上花店商品销售网站设计与实现 1. 用户注册模块 2. 用户登录模块 3. 鲜花列表模块 4. 用户购物车…

2024年江苏省研究生数学建模竞赛B题人造革性能优化设计研究论文和代码

经过不懈的努力&#xff0c; 2024年江苏省研究生数学建模竞赛B题人造革性能优化设计研究论文和代码已完成&#xff0c;代码为C题全部问题的代码&#xff0c;论文包括摘要、问题重述、问题分析、模型假设、符号说明、模型的建立和求解&#xff08;问题1模型的建立和求解、问题2模…

微服务: Nacos部署安装与properties配置

Nacos 是阿里巴巴开源的一款用于动态服务发现、配置管理和服务管理的基础设施。Nacos 这个名称源自于 “Dynamic Naming and Configuration Service”。它主要是用于解决微服务架构中服务发现和配置管理的问题。 Nacos 单机模式的部署安装 1. 安装(Windows环境) Nacos是Java…

QDockWidget类详解

一.QDockWidget类概述 1.QDockWidget类 QDockWidget类提供了一个特殊的窗口部件&#xff0c;它可以是被锁在QMainWindow窗口内部或者是作为顶级窗口悬浮在桌面上。 QDockWidget类提供了dock widget的概念&#xff0c;dock widget也就是我们熟悉的工具面板或者是工具窗口。Do…

批导会计凭证程序报错,通过监控点和消息类来定位触发的位置

ZFIU001 批导会计凭证报错&#xff0c;通过监控点和消息类来定位触发的位置 在使用程序导入会计凭证的时候&#xff0c;发现报错&#xff0c;后面找了很久很久的系统标准程序&#xff0c;打断点才找到这个位置&#xff0c;使用监控点还是可以比较快速找到报错的原因的&#xff…

CentOS 7安装Elasticsearch7.7.0和Kibana

一. 准备安装包 elasticsearch和kibana&#xff1a;官网历史版本找到并下载&#xff08;https://www.elastic.co/cn/downloads/past-releases#elasticsearch&#xff09;ik分词器&#xff1a;GitHub下载&#xff08;https://github.com/infinilabs/analysis-ik/releases/tag/v…

【密码学】密码学五要素

密码学五要素是密码系统的基本组成部分&#xff0c;这五个要素共同构成了密码系统的框架。在实际应用中&#xff0c;密码系统的安全性依赖于密钥的安全管理以及算法的强度。 如果任何一方被泄露或破解&#xff0c;那么整个密码系统都将面临风险。因此&#xff0c;在设计和使用密…

DolphinScheduler-3.1.9 资源中心实践

前言 目前DolphinScheduler最新的稳定版本是 3.1.9 &#xff0c;基于此做些探索&#xff0c;逐渐深化学习路径&#xff0c;以便于加深理解。 3.2.1 是最新的版本。目前的稳定版本是 3.1.9 基础环境&#xff1a;Hadoop3.3, Java 8, Python3, MacOS14.2.1 一、本地伪分布式安装…

HTTP-概述

概念 :Hyper Text Transfer Protocol&#xff0c;超文本传输协议&#xff0c;规定了浏览器和服务器之间数据传输的规则。 原始数据格式 特点 1. 基于TCP协议:面向连接&#xff0c;安全&#xff08;三次握手&#xff09; 2. 基于请求-响应模型的:一次请求对应一次响应&#xf…

运行vue : 无法加载文件 C:\Program Files\nodejs\node_global\vue.ps1,因为在此系统上禁止运行脚本。

报错背景: 重装了win10系统,然后准备安装Vue,这个时候我已经安装好了node.js和npm,输入node -v和npm -v都有正确输出,但是每次输入npm install -g vue/cli 安装的时候,就会报错. 大家安装node.js的时候最好就是默认路径(C:\Program Files\nodejs),别去修改不然很多报错.(个人…

2-4 Softmax 回归的从零开始实现

就像我们从零开始实现线性回归一样&#xff0c; 我们认为softmax回归也是重要的基础&#xff0c;因此应该知道实现softmax回归的细节。 本节我们将使用刚刚在2-3节中引入的Fashion-MNIST数据集&#xff0c; 并设置数据迭代器的批量大小为256。 import torch from IPython impo…

Mysql数据库基础操作

Mysql数据库 基本概念 内核的作用&#xff1a;调用硬件资源 数据库的作用 使用数据库可以高效且条理分明地存储数据&#xff0c;使人们能够更加迅速、方便的管理数据。 数据、表、数据库 数据 描述事物的符号记录&#xff0c;包括数字&#xff0c;文字&#xff0c;图形&…

最新版情侣飞行棋dofm,已解锁高阶私密模式,单身狗务必绕道!(附深夜学习资源)

今天阿星要跟大家聊一款让阿星这个大老爷们儿面红耳赤的神奇游戏——情侣飞行棋。它的神奇之处就在于专为情侣设计&#xff0c;能让情侣之间感情迅速升温&#xff0c;但单身狗们请自觉绕道&#xff0c;不然后果自负哦&#xff01; 打开游戏&#xff0c;界面清新&#xff0c;操…

NATAPP内网穿透使用

1. natapp能干嘛 可以将本地的内网ip映射到外网上&#xff0c;远程访问该连接&#xff0c;实现外网展示网站。平时做的应用开发都只能在局域网本地访问&#xff0c;通过内网穿透&#xff0c;可以通过外网进行访问。 2. 注册用户 网址&#xff1a;https://natapp.cn/自行完成…

轻松创建对象——简单工厂模式(Java实现)

1. 引言 大家好&#xff0c;又见面了&#xff01;在上一篇文章中&#xff0c;我们通过Python示例介绍了简单工厂模式&#xff0c;今天&#xff0c;我们继续深入这个话题&#xff0c;用Java来实现简单工厂模式。 2. 什么是简单工厂模式 简单工厂模式&#xff08;Simple Facto…

Python使用matplotlib绘制图像时,中文图例或标题无法正常显示问题

Python使用matplotlib绘制图像时&#xff0c;中文图例或标题无法显示问题解决方法 一、问题描述二、解决方法 欢迎学习交流&#xff01; 邮箱&#xff1a; z…1…6.com 网站&#xff1a; https://zephyrhours.github.io/ 一、问题描述 Matplotlib库是Python中经常使用的绘图工…

[学习笔记]SQL学习笔记(连载中。。。)

学习视频&#xff1a;【数据库】SQL 3小时快速入门 #数据库教程 #SQL教程 #MySQL教程 #database#Python连接数据库 目录 1.SQL的基础知识1.1.表(table)和键(key)1.2.外键、联合主键 2.MySQL安装&#xff08;略&#xff0c;请自行参考视频&#xff09;3.基本的MySQL语法3.1.规…

Git-Unity项目版本管理

目录 准备GitHub新建项目并添加ssh密钥Unity文件夹 本文记录如何用git对unity 项目进行版本管理&#xff0c;并可传至GitHub远端。 准备 名称版本windows11Unity2202.3.9.f1gitN.A.githubN.A. GitHub新建项目并添加ssh密钥 GitHub新建一个repositorywindows11 生成ssh-key&…

go语言day09 通道 协程的死锁

Go语言学习——channel的死锁其实没那么复杂 - JackieZheng - 博客园 (cnblogs.com) 目录 通道 创建通道 1&#xff09;无缓冲通道 2&#xff09;有缓冲通道 通道的使用 1) 值从通道入口进 2) 值从通道出口出 信道死锁&#xff1a; 0&#xff09;死锁现场0 1&#xff09;死…