本文讨论的是DirectPath I/O。

让我们由浅入深地通过一些问答来逐步展开DirectPath I/O的世界:

Q: 什么是DirectPath I/O?
A: VMware官方手册这么说:『通过 DirectPath I/O,虚拟机可以使用 I/O 内存管理单元访问平台上的物理 PCI 功能』
其实就是VM绕开了Hypervisor的管理,直接访问I/O设备。而最常见的I/O设备就是网卡。

Q: 为啥要用DirectPath I/O? (DirectPath I/O的优点)
A:  因为它绕开了hypervisor对I/O的处理,所以具有两大优点:
第一,速度快
第二,CPU的开销小

Q: DirectPath I/O的缺点?
A: VMware的手册中说:
配置了 DirectPath 的虚拟机不具有以下功能:
  • vMotion
  • 虚拟设备的热添加和热移除
  • 挂起和恢复
  • 记录和重放
  • Fault Tolerance
  • High Availability
  • DRS(受限的可用性。虚拟机可以属于某个群集,但不能在主机之间迁移)
  • 快照

Q: 为啥启用了DirectPath I/O,上述那么多功能都没法使用?
A: 以上功能比如vMotion、FT、HA、Snapshot等等,都是Hypervisor通过VMKernel来实现的。而DirectPath I/O绕开了Hypervisor,直接访问了物理网卡,自然这些功能就无法用了。

Q: 哇,这么多重要的功能不能用了!好吧,没有了vMotion,虚拟化还有什么意义!没有了HA,生产应用怎么敢虚拟化?这么看来DirectPath I/O完全就是个废品嘛。
A: 且慢,VMware vSphere 5.1的手册里面还有这么一段描述:
只有在 Cisco 统一计算系统 (UCS) 上通过 Cisco Virtual Machine Fabric Extender (VM-FEX) 分布式交换机配置有 DirectPath I/O 的虚拟机才具有下列功能。
  • vMotion
  • 虚拟设备的热添加和热移除
  • 挂起和恢复
  • High Availability
  • DRS
  • 快照

为啥呢?因为Cisco的UCS系统上的网卡很奇妙,这种被叫做VIC的网卡是一种高级的融合式网卡(CNA),可以虚拟化成多个vNIC。与HP的Flex-10网卡只能最多虚拟化成4个静态vNIC不同,Cisco UCS的VIC可以虚拟化成128个(型号1240)或256个(型号1280)vNIC。而且Cisco支持Dynamic vNIC,这种类型的vNIC不是固定的,可以随着VM的漂移而移动。通过和VMware的结合,Dynamic vNIC在VM移来或虚拟设备热添加时被创建出来,在VM移走或虚拟设备热移除时被删掉。这就解决了问题,即不通过Hypervisor的管理又能同时实现vMotion。解决了vMotion的问题,HA、DRS等等问题也就迎刃而解了。

所以说,应用了Cisco UCS VM-FEX分布式交换机,我们就可以做到既实现了DirectPath I/O的优点,又避免了其致命的缺点。

Q: 那么结合了VM-FEX vDS和DirectPath I/O,是不是就天衣无缝,完全没有缺点了呢?是不是在所有场合下都可以应用DirectPath I/O了呢?
A: No. 还有2个缺点。
首先Dynamic vNIC有数量限制,其数量的上限是IO Module(2204或2208)uplink数量乘以15减去4。
例如配置了2个2204 IO Module的UCS刀箱满配一共有8个上联链路,那么可以配置的Dynamic vNIC的上限就是8×15-4=116个。
实际情况是静态vNIC和vHBA还会占用一些vNIC数,所以116也不一定能达到。
而动态vNIC的总数限制就是一台物理主机上所有VM的所有网卡的数量上限。
116不是一个很大的数字,在某些应用的情况下,一台VM可能会需要2个以上的网卡,也就是会占用2个以上的动态vNIC,这导致了动态vNIC数量非常紧张。当无法创建新的动态vNIC时,新的虚拟机就无法创建出来,也无法向这台主机vMotion迁移虚拟机。

其次,要启用VM-FEX 结合的DirectPath I/O,虚拟机必须做内存保留(memory reservation),而且是所有内存都必须保留。这使得虚拟机插槽(slot)变得非常大,而且也使得主机无法充分利用内存,无法进行内存过量分配(overcommitment)。

结论:由于DirectPath I/O只有在I/O繁重的情况下才能发挥其优势。即使你使用了Cisco UCS,也要根据自己的情况来衡量是否需要采用VM-FEX分布式交换机来启用DirectPath I/O。套用一句老化,没有最好只有最合适。因此在进行架构设计的时候,请选择适合你的组织的方案,而不是盲目追求最快最新。



【参考文档】
1) VMware的官方手册 http://pubs.vmware.com/vsphere-51/topic/com.vmware.ICbase/PDF/vsphere-esxi-vcenter-server-51-networking-guide.pdf
2) Cisco文档
http://www.cisco.com/en/US/docs/unified_computing/ucs/sw/vm_fex/vmware/gui/config_guide/b_GUI_VMware_VM-FEX_UCSM_Configuration_Guide.pdf
3) Cisco VM-FEX用于vSphere部署的最佳实践
http://www.cisco.com/en/US/solutions/collateral/ns340/ns517/ns224/ns944/vm_fex_best_practices_deployment_guide_ns1124_Networking_Solutions_White_Paper.html