将I/O虚拟化融入存储技术云和虚拟化

2010-09-19    来源:网络世界    
[导读]随着新的I/O虚拟化(IOV)技术向PCI Express发展,用户须关注如何将IOV与现有的存储技术进行融合,从而实现完整的系统虚拟化解决方案。 虚拟化是当前的热点话题,但其核心问题

  [导读]随着新的I/O虚拟化(IOV)技术向PCI Express发展,用户须关注如何将IOV与现有的存储技术进行融合,从而实现完整的系统虚拟化解决方案。

  虚拟化是当前的热点话题,但其核心问题也在于虚拟。即通常让操作系统“认为”本身是独立运行在计算机上。但实际上是几个不同操作系统在共享一台计算机,每个操作系统都称作一个系统镜像 (System Image,SI)。由于存储器管理单元集成在主流计算机上,因此这种虚拟化在主流计算机上是完全可行的。不过这种技术并不是特别流行,因为这要模拟计算机中的所有设备,对性能造成极大影响。近期软硬件技术的发展提高了模拟速度,但仍有待改善。

  I/O虚拟化 (简称 IOV)说到底,就是把一个设备模拟成多个设备,所模拟成的多个设备能分别支持唯一的系统镜像。虚拟化发展到组件级,能够将系统处理器从繁重的设备模拟工作中解放出来,从而大幅提高性能。PCI SIG 工作小组正在定义,在PCI Express总线上实现虚拟设备接口的机制。上述工作完成后,就会为主流 IOV设计提供必要的标准,确保不同厂商的硅芯片解决方案能在不同操作系统的不同平台上协同工作。

  我们用当前的 PCI Express 前端逻辑配合 I/O 虚拟化技术,是否能顺利实现芯片虚拟呢?答案既是肯定的,也是否定的。诚然,这样一来,芯片就能同时分配给多个系统镜像,但如何虚拟化设备后端则是问题的关键所在。我们不妨再设想存储控制器的问题。显然,我们希望将连接的存储加以分区,这样系统镜像 X就能拥有专门分配给该分区的空间,系统镜像Y则不能访问该空间。

  PCI Express I/O 虚拟化

  我们不妨先来简单谈谈 I/O 虚拟化的系统视图。“系统镜像”是指 CPU、存储器、I/O 等构成的实际或虚拟系统。多个系统镜像可运行在一组或多组真实的硬件之上。举例来说,VMWare 等系统管理程序可在单核 CPU 台式电脑上同时运行 Windows XP 和 Linux,在此情况下,两个系统镜像共享一个 CPU、存储器、磁盘驱动器等。再举一个刀片服务器的例子,一个刀片运行 Windows XP,而另一个刀片则运行 Linux,这时每个系统镜像尽管并未共享CPU刀片上的硬件,但实际上却潜在共享I/O刀片上的硬件。

  不管如何进行物理分配,每个系统镜像都应“看到”自己的PCI层级架构。即便不共享终端设备,如I/O刀片上的两个光纤通道控制器,一个分配给 Linux 刀片,另一个则分配给了XP刀片,也必须采取一定的控制,以实现对PCI层级架构的可视化。如果共享终端设备,那么就必须限制每个系统镜像,使其仅能“看到”共享终端设备中属于自己的那一部分。

  设备需要将自身的物理硬件模拟为多个虚拟设备,使外面的观察人员认为这些虚拟设备是完全独立的。虚拟设备可做到以下几点:一是占用不同的 PCI 内存区域;二是对多种 PCI 配置存储器采用不同的设置,三是可分别作为 PCI 多功能设备。此外,设备还应确保跨“设备”流量内部隔离,这样就能避免虚拟设备间的数据溢出。

  从上述示例可以看出,单点连接到 PCI 层级架构的系统与多点连接到 PCI 层级架构的系统有着明显的区别。传统的单核CPU 台式电脑乃至传统的多路多核 CPU 服务器,以前仅通过单个逻辑连接点连接到 PCI 层级架构。与此相对应的是,刀片系统可支持新的层级视图,上层增强型 PCI Express 开关可通过多个根联合体 (Root Complex) 与整个 PCI 层级架构相连。因此,我们显然需要一些新的机制来确保每个根联合体去访问分配给它的那一部分 PCI 层级架构。

  鉴于上述两种系统类型差异巨大,同时也出于市场细分考虑以及避免复杂性,PCI SIG 决定将 I/O 虚拟化规范分为两部分。由于每个根联合体也可利用单根 I/O 虚拟化,因此上述两种规范应当是相互依赖的,这就形成了一种同心圆模式:单根 (Single Root) 规范建立在 PCI Express 基本规范基础之上,而多根 (Multi-Root) 规范则建立在单根规范基础之上。

  单根 I/O 虚拟化

  单根I/O虚拟化主要面向现有的 PCI 层级架构,其中的单核 CPU 及多核 CPU 电脑均通过单点连接到 PCI 层级架构。单根规范的目标之一是支持继续使用现有的根联合体芯片,但这会造成很大的局限性。同样,支持现有的开关芯片,也会造成一定的限制。考虑到上述要求,从总线角度来说,只能存在单一的存储器地址空间。虚拟化系统镜像的分区与分配在根联合体连接点的上层进行。我们通常认为,在根联合体之内或之上,会有某种类型的地址转换逻辑来支持虚拟化中间件,通常称作系统管理程序,以实现映射功能。用户当然需要新的 I/O 虚拟化端点设备,这种设备在设计和支持方面也面临着巨大的挑战。他们希望不修改芯片组,在此情况下虚拟化市场得以迅速向现有系统或简单衍生系统领域扩展,但这却造成了在执行虚拟化中间件功能时较大的软件负担。

  多根 I/O 虚拟化

  尽管 PCI Express 电缆规范会带来众多其他可能性,但多点连接层级架构最典型的实施范例仍采用带 PCI Express 背板的刀片服务器。这是一种全新的 PCIe 层级架构,基本属于一种微型架构。PCI SIG 的目标是“小型化”的系统,也就是说,系统典型实施的体积不会超过 3 英尺。可能最多带有 16 至32 个根端口,不过该层级架构也能支持更多根端口。此外,还有一个目标就是继续使用现有的根联合体芯片。不过,与单根不同的是,假设没有虚拟化中间件,系统分区的复杂性则转移到新的增强型 PCI Express开关中。多根系统的特别在于 PCI 层级架构分为多个虚拟层级架构,且共享同一物理架构。单根系统只有单一的存储器地址空间,且在其系统镜像中进行分区,而多根系统则针对每个虚拟架构提供全64 位存储器地址空间。配置管理软件与增强型开关和I/O虚拟化设备程序协作,对层级架构进行编程。这样,每个根联合体都能“看到”本部分的所有多根层级架构,就像单根层级架构一样。每个这种架构视图都称作虚拟架构。而需要注意的是,多根系统的每个虚拟架构都能单根分别启用,也可不启用,这样多根系统中的端点设备会面临两种模式分层的挑战。

  就虚拟化设备而言,每个系统镜像都应看到其自己的虚拟化配置空间和地址映射副本。事实上,设备需要 n 组 PCI 配置空间来支持n组虚拟功能。单根规范定义了轻量级虚拟功能,而多根规范则针对每个设备可用的虚拟架构需要全配置空间。笔者难以一一介绍不同类型的配置空间的具体差别,这涉及到高级虚拟化的问题。但就本文而言,只想特别说明的是,每个与IOV 设备互动的系统镜像都有自己的设备地址范围与配置空间。因此,IOV设备可根据访问哪个地址空间来与特定的系统镜像建立工作关系。

1
3