I/O虚拟化三步走 优化数据中心的运营

同服务器虚拟化一样,I/O虚拟化增加了一层抽象层来简化和优化数据中心运营。就I/O虚拟化而言,访问接口卡的服务器与实际的网卡(NIC)之间存在一个抽象层。I/O虚拟化的目标是能够跨多台服务器共享这些接口卡。

这项技术依赖于这样一个假设:大多数数据中心服务器不能在每时每刻完全利用网卡的最大能力。I/O虚拟化试图通过使更多的服务器访问每块网卡来更好地利用可用带宽。需要注意的是,I/O虚拟化并不向服务器提供带宽,它只是确保更多的可用带宽得到利用。

选择网卡共享方式

实施I/O虚拟化的第一步是了解这些系统采用什么方式,来对网卡和主机总线适配器(HBA)进行虚拟化。当前主要有三种共享网卡的方式。

第一种方式是不同服务器轮流使用接口卡。该方式适用于那种只在一天某些时刻被使用的昂贵的专用网卡。

第二种方式是使用允许每个端口被单独使用的多端口卡。尽管这没有提高带宽的使用率,因为每台服务器都有它自己的端口和带宽,但它的确降低了成本。例如,一个4端口卡每端口的价格,一般比购买4块独立网卡更便宜。但是,这时的挑战是多数服务器不能利用这么多的I/O端口。I/O虚拟化通过以每端口为基础共享网卡解决了这个问题,这样既发挥了多端口卡节省费用的优势,也使每个端口的使用情况得到改善,不过,还是没有得到完全的利用。

最后一种方式,也是最理想的方式,是选择支持单根I/O虚拟化(Single Root I/O Virtualization,SR-IOV)的网卡。这类网卡具有使多个主机共享一块网卡的智能性,非常适合I/O虚拟化系统。目前市场上万兆网卡还不多,而多数下一代FCoE(以太网光纤通道)卡将支持这项标准。根据使用的系统,支持SR-IOV的网卡应当能够跨多台服务器,有选择地共享这类网卡的带宽。

I/O虚拟化系统中的SR-IOV卡之所以使多个主机可以共享一块网卡,是它假定不同的服务器需要的峰值带宽分布在不同时间段。虚拟化系统支持一旦带宽使用需要超出一块卡的吞吐量,就将I/O溢出到备用卡上。

确定网卡与服务器的连接途径

在选择用于共享的网卡后,下一步是选择与访问I/O虚拟化系统的服务器连接的方式。目前,主要有三种方式:以太网、InfiniBand和PCIe。

由于PCIe卡就是被共享的,因此乍看起来PCIe似乎是最自然的合适选择。但是,PCIe并不是作为物理服务器之外的网络标准来设计的。

InfiniBand和以太网都是为连接网络而设计的,但不适合传送PCIe传输流。 InfiniBand具有支持PCIe带宽需求的性能,但它在后台互联(back-end interconnect)领域之外的采用率比较低。

另一方面,以太网非常普及,而且联网很方便。以太网目前若想传送PCIe传输流需要向以太网卡添加特殊的逻辑。未来,这种能力可能被内建到标准以太网卡中。

这三种连接方式的费用也相差很大,PCIe是最便宜的选择,以太网次之,InfiniBand最贵。总之,用户选择连接标准时必须根据自身情况,例如所需要的性能、网络可伸缩性,以及已有使用的技术等,来仔细研究每一种方式。

筛选服务器

最后一步是确定哪些服务器将用于I/O虚拟化系统。如果采用第一、二种网卡共享方式,即多台服务器轮流共享一块网卡,或每台服务器各分配一端口的方式,提供给服务器的带宽将被锁定。如果采用支持SR-IOV的共享卡方式,最大的问题则是,可能由于某台服务器消耗I/O资源过大,而导致其它服务器得不到I/O资源。尽管一些系统可以防止这种情况的发生,但这可能意味着为了保持系统内所有服务器的正常运行,那些对I/O资源要求较高的服务器将难以获得完全的满足。

最好的做法是确定环境中可能会具有这类高I/O需求的服务器,为它们提供独立的连接。你还可以利用备用卡,那样的话,I/O可溢出到备用卡。如果你知道将出现需求激增,多数I/O虚拟化系统还允许你动态地将特定网卡分配给特定服务器。

实施I/O虚拟化的最安全的方式之一,是将它用作冗余卡。因为多数服务器都具有冗余网络和存储连接,在一部10服务器机架中,这意味着多达20块额外的网卡。因此,可以将这些冗余网卡中的1~2块网卡转移到I/O虚拟化系统中,这可以通过将二级连接映射到 I/O虚拟化系统中的网卡上来完成。

【链接】部分I/O虚拟化产品概览

Aprius公司Aprius G80 I/O网关

Mellanox Technologies公司ConnectX-2适配卡

NextIO 公司N1400-PCM PCI Express高速交换机模块、N2800-ICA I/O整合专用设备

Virtensys公司VIO-4001和VIO-4008虚拟交换机

Xsigo Systems公司VP780 I/O控制器