虚拟机域间RPC被广泛应用于虚拟机管理、远程终端、路由系统、分布式存贮系统等场合。一直以来,业界普遍使用传统的针对非虚拟化平台的通用RPC工具来部署这种应用,由于在设计之初未考虑虚拟化因素,通用RPC在虚拟机平台下性能损失严重,在vCUDA项目中,我们发现传统RPC如XMLRPC、ICE等在虚拟机条件下性能较差,原因来自以下几个方面:
本系统设计并实现了一个新的应用于虚拟机条件下的RPC系统:VMRPC,目的是充分挖掘虚拟机域间RPC的性能潜力,这种性能提升来自以下三个方面:VMRPC利用虚拟机内建的共享内存机制,同时实现数据表示和数据传输,取消了序列化过程。
VMRPC将RPC的主要框架放在用户层,从而避免了操作系统和VMM的负面影响,同时实现了真正的数据零拷贝,VMRPC直接利用虚拟机内建的异步机制。
为了增强VMRPC的通用性,我们将VMRPC抽象为三个部份:控制通道、异步通道和传输通道,这样对于特定的VMM系统,只需要根据自身特点替换其中一部份底层函数就可实现移植。
异步通道用来发送和接受通知,协调RPC双方的同步。控制通道为双方均可访问的小型共享区域,内含RPC索引、返回信息、栈信息和控制命令等,是VMRPC的管理中枢。传输通道是预分配的、可动态管理的大块共享内存区域,RPC中对于指针的引用和大额数据传输,通过这里进行。在这三个部分中,异步通道是唯一涉及VMM的部份,控制通道和传输通道均位于用户层,通过共享内存机制实现。 图一比较了传统RPC和VMRPC在架构上的不同。
我们在Xen和VMWare Workstation上实现了VMRPC的两个实例,并验证了它的性能。实验显示VMRPC在延迟、吞吐率、CPU开销上相对于传统RPC均有10倍乃至上百倍的性能提升。我们将VMRPC应用在vCUDA项目中,结果证明,VMRPC极大地消除了虚拟化造成的负面影响。
VMRPC充分利用了虚拟机平台的普遍特点和内建机制,在用户层直接表达和传输数据,实现了较低的响应延迟、较高的吞吐率和较低的CPU开销。VMRPC牺牲了透明性来换取高性能,特别适合于对响应时间、数据传输速率要求较高的虚拟机域间应用。随着虚拟化技术的进一步发展,更多的分布式应用将部署在虚拟机平台,从而为VMRPC提供了广阔的应用空间。