为虚拟化环境带来更强I/O性能!SR-IOV技术简介

news/2024/5/18 22:47:54 标签: ssd, NVMe, 固态硬盘

在 ICT 行业,不断提高硬件资源的使用效率是技术发展路线中亘古不变的主旋律。虚拟化作为其中最为主要的解决方式之一,其带来的影响早已不言而喻。而今天我们要说的,正是虚拟化中一项非常重要的技术 —— SR-IOV,也是下一代高端企业级存储设备不可或缺的重要功能。

SR-IOV 全称“Single Root I/O Virtualization”,简单说,它可以将单一的 PCIe 设备虚拟为多个功能设备并分配给不同的虚拟机直接访问使用,借此有效提升每一个虚拟机获得的 I/O 性能并降低延迟。要想进一步了解 SR-IOV 的神奇之处,我们需要先来了解一下常规硬件平台的构成:

常规系统架构的构成(引自 PCIe 6.0 Specification)
从上图可以看到,系统镜像 System Image(简称“SI”)的运行建立在各种硬件资源之上,如 CPU、系统内存、PCIe 树等。PCIe 树又以 Root Complex(简称“RC”)为根,通过 Root Port 连接 PCIe 设备或者 PCIe Switch,Switch 又是一个扇出结构,可以连接多个 PCIe设备。

单一系统镜像对于硬件资源的使用,其效率往往是比较低的。为了提高硬件资源的使用率,我们可以在上图的基础上增加一个虚拟化中间层 Virtualization Intermediary(简称“VI”),它是虚拟机的管理层,是物理机和虚拟机的中介,VI 可以是 hypervisor,也可以是 VMM,它可以为多个 SI 的运行提供支持,架构如下图所示:

配置了 VI 和更多 SI 后,系统架构的构成(引自 PCIe 6.0 Specification)
显然,这样做可以极大提高硬件资源的利用效率,并在一些场景下良好运行。但是,当 I/O 访问压力较高,其性能下降也会比较明显 —— 每一笔 I/O 都要经过 VI 的转译和处理,VI 自身的执行效率也就很容易成为整个系统的性能瓶颈。于是,SR-IOV 应运而生。

SR-IOV 的思路是,通过将 PCIe 设备虚拟为多个 Function(Virtual Function,简称“VF”),再经过一些地址转换或管理机制(如 SR-PCIM、TA、ATPT 等),供不同 SI 直接访问使用,这样 I/O 操作就不再需要经过 VI 去转译了。

应用 SR-IOV 后的系统架构(引自 PCIe 6.0 Specification)

  • PF:Physical Function,物理功能,一个 PF 对应一项 PCIe 物理功能,可以被物理主机发现和管理。它支持 SR-IOV Extended Capability 并可由 SR-PCIM、VI 或 SI 访问。
  • VF:Virtual Function,虚拟功能,一个 VF 就是一个轻量级的 PCIe Function, 可以由 SI 直接访问;一个 PCIe Device 可以虚拟为多个 VF 并同时为不同的 SI 提供服务,无需增加硬件投入。
  • SR-PCIM:Single Root PCI Manager,这是一个管理软件,用于配置 SR-IOV Extended Capability 寄存器,管理 PF 和VF 等。

SR-IOV 通过将 PF 分为多个 VF 为上层虚拟机使用,相当于虚拟机绕过 VI 直接使用 PCIe 设备处理 I/O 和传输数据。

至于 TA(Translation Agent)、ATS(Address Translation Services)、ATPT(Address Translation and Protection Table)、ATC(Address Translation Cache)、ACS(Access Control Service)等模块,都是可选的,也都是和地址访问有关的功能,在这些功能的互相配合下,让整个虚拟化方案更加健壮。不过,由于这些都是可选功能,受篇幅限制,本文不做展开。

既然 SR-IOV 可以提供的好处有这么多,在实际业务应用中,该如何配置和使用?让我们继续往下看。

设置 SR-IOV

SR-IOV 需要主机端和设备端相互配合才行,所以我们需要:

  • 一台支持 SR-IOV 的主机
  • 一个支持 SR-IOV 的 PCIe 设备,如,忆恒创源最新发布的 PBlaze7 7940 就支持该功能,并可以提供多达32个VF。

在主机侧,我们要确保 CPU 支持虚拟化,加载 vfio,使能 IOMMU 等。另外,我们要在 BIOS 中使能 ARI Support,如图所示:

主板 BIOS 截图
ARI 是 SR-IOV 中很重要的技术,它的全称是 Alternative Routing-ID Interpretation。从下图中可以看到,没有 ARI 时,16-bit 的 ID 由 8-bit Bus Number、5-bit Device Number 和 3-bit Function Number 组成,而应用的 ARI 之后,Device Number 的 bit 位被 Function Number 占用了,此时 16-bit 的 ID 由 8-bit Bus Number 和 8-bit Function Number 组成。这样做的好处是显而易见的:ARI Device 最高可以支持256个 Function,而 Non-ARI Device 只能最高支持8个。为什么 Device Number 可以被占用呢?这是因为 Device Number 主要是用在共享总线架构中的,比如 PCI 总线。而在点对点架构中,比如像 PCIe 架构下,Device Number 通常是用不到的。

Non-AIR 与 ARI 对比(引自 PCIe 6.0 Specification)

做完主机端设置,我们移步 PBlaze7 7940 SSD 的 SR-IOV 设置,通过配置 SR-IOV Extended Capability 寄存器实现。

SR-IOV Extended Capability 结构(引自 PCIe 6.0 Specification)
首先,我们通过 lspci 命令查看 SR-IOV Extended Capability 寄存器状态,此时可以看到 VF 数量为0。

在这里插入图片描述
然后,我们向 SR-IOV Extended Capability 寄存器中的 NumVFs 写 3,即设定 3 个 VF。此时,我们再通过 lspci 命令查看 SR-IOV Extended Capability 寄存器,确认 NumVFs 设置成功。

在这里插入图片描述
现在,我们可以看到多了3个 PCI 设备。下图红框中为 VF,蓝框为 PF。

在这里插入图片描述

不过,要使 VF 真正能够工作,我们还需要使用 Virtualization Management 命令配置控制器资源。PF 对应的是 Primary Controller,VF 对应的是 Secondary Controllers。具体需要设置的部分为控制器的 Virtual Queue Resource(VQ Resource)和 Virtual Interrupt Resource(VI Resource),前者负责管理队列的控制器资源,后者负责管理中断向量的控制器资源。下图为 VF1(位于01:00.01)的最终配置情况,红框部分为 VQ Resource配置,蓝框部分为 VI Resource 配置,绿框部分则是将该 controller 设置为 online。

在这里插入图片描述
此时查看控制器资源,可以看到资源已经配置成功。

在这里插入图片描述
接下来就是给各个 VF 创建 Namespace 的环节了,相信大家对这一步都已经非常熟悉,不多做介绍。我们使用的 SSD 为 PBlaze7 7940 的 3.84TB 容量点,在创建 VF 之前,PV 上的 Namespace 显示为 3.84TB。为了给 VF 也能创建 Namespace,我们重新分配了容量,如下图所示:

在这里插入图片描述
PV 上的 Namespace 是 /dev/nvme0n1,其它3个 VF 上的 Namespace 分别是 /dev/nvme2n2,/dev/nvme3n3,/dev/nvme4n4。这4个 Namespace 的容量都设定为 800GB。

最后,我们将每一个 VF 分别挂到一个虚拟机上,就可以实现每个系统镜像对单独的 VF 进行直接访问啦。

SR-IOV 实测

在刚刚结束的美国 FMS2023 闪存峰会上,我们对 PBlaze7 7940 SSD 的 SR-IOV 功能进行了实时演示,通过设定4个不同容量的 VF 并将它们挂载到4个虚拟机当中。

在这里插入图片描述

PBlaze7 7940 SSD 支持 VF 性能配额管理,实现不同 VF 之间的性能隔离,避免因某一个虚拟机访问压力突然增加对其它虚拟机业务性能造成影响。在演示过程中,我们将4个 VF 的 Namespace 性能分别限制为 800MB/s、1200MB/s、1600MB/s 和 2400MB/s,从实测结果来看,每一个虚拟机获得的最终读性能可完美匹配我们预先设定好的带宽限制。

在这里插入图片描述
在这里插入图片描述

PBlaze7 7940 系列 PCIe 5.0 企业级 NVMe SSD

PBlaze7 7940 是忆恒创源(Memblaze)面向新 AI 技术应用、虚拟化、云计算等高性能部署使用场景打造的全新一代 PCIe 5.0 企业级 SSD。采用长江存储晶栈Xtacking X3 NAND,与目前主流的 PCIe 4.0 SSD 相比,PBlaze7 7940 有着高达1.5倍以上的性能提升,4K 随机读性能 2800K IOPS,顺序读写带宽分别达到 14GB/s 和 10GB/s,即使和同类 PCIe 5.0 SSD 相比也能保持领先。

在这里插入图片描述

它采用最新的硬件设计,在公司自主 MemSpeed 5.0 技术合集的深度优化下,硬件效率被进一步发挥,并带来更低的功耗与发热,优化的散热设计,也使其更加适合于数据中心密集型部署。PBlaze7 7940提供U.2、E1.S、E3.S、HHHL AIC四种产品形态,3.2TB-15.36TB容量点,全方位满足不同企业客户的部署使用需求。


http://www.niftyadmin.cn/n/5018928.html

相关文章

干了三年的功能测试,让我女朋友跑了,太难受了...

简单概括一下 先说一下自己的情况,普通本科,19年通过校招进入深圳某软件公司,干了3年多的功能测试,21年的那会,因为大环境不好,我整个人心惊胆战的,怕自己卷铺盖走人了,我感觉自己不…

如何保持 SSH 会话不中断?

哈喽大家好,我是咸鱼 不知道小伙伴们有没有遇到过下面的情况: 使用终端(XShell、secureCRT 或 MobaXterm 等)登录 Linux 服务器之后如果有一段时间没有进行交互,SSH 会话就会断开 如果正在执行一些非后台命令&#…

Java从入门到精通-数组(三)

0. 数组 1. 数组概述 练习1: 创建一个整数数组,存储喜欢的5个数字,并编写代码打印出这些数字。 创建一个整数数组 public class Main {public static void main(String[] args) {// 创建一个整数数组,存储5个喜欢的数字int[] f…

行业追踪,2023-09-11

自动复盘 2023-09-11 凡所有相,皆是虚妄。若见诸相非相,即见如来。 k 线图是最好的老师,每天持续发布板块的rps排名,追踪板块,板块来开仓,板块去清仓,丢弃自以为是的想法,板块去留让…

【MyBatis】一、MyBatis概述与基本使用

Mybatis概述 Mybatis是一个半自动化的框架&#xff0c;需要自己写sql语句&#xff0c;对比JDBC其有耦合性更低的SQL语句与Java代码&#xff0c;各司其职不相互冗杂&#xff0c;对比Hibernate与JPA其又有更灵活的SQL编写能力。 环境搭建 引入相关依赖并打jar包 <dependenc…

leaflet 加载地图-引入各种地图

leaflet 加载地图-引入各种地图 一、智图地图 1、Geoq.Normal.Gray &#xff08;或 Geoq.Normal.Map&#xff09;灰色 let gaoDeLayer L.tileLayer.chinaProvider(Geoq.Normal.Gray);gaoDeLayer.addTo(this.map);2、Geoq.Normal.Warm 黄色 let gaoDeLayer L.tileLayer.chin…

使用 Nginx 实现企业微信域名配置中的校验文件跳转

背景 在企业微信中配置业务域名时&#xff0c;通常需要在该域名的根路径下放置一个校验文件&#xff0c;以验证域名的所有权。然而&#xff0c;如果该域名是第三方的&#xff0c;你可能无法直接在根路径下放置文件。在这种情况下&#xff0c;你可以使用 Nginx 来实现校验文件的…

CCF CSP题解:最大的矩形(201312-2)

链接和说明 OJ链接&#xff1a;传送门 本题代码为LA姐所作&#xff0c;笔者仅负责帮其调通代码。特此声明。 AC代码 #include<iostream> #include<cmath> using namespace std;int main() {int n;scanf("%d", &n);//矩形个数int *rec (int *) m…