论文部分内容阅读
摘要:针对于同一物理节点上的不同虚拟机之间网络网络通信的特点,本文提出并实现了一种基于内存共享的KVM虚拟机网络通信的方法,该方法能提高KVM网络I/O的吞吐量。
关键词:KVM;网络;优化
中图分类号:TP391.9 文献标识码:A 文章编号:1007-9599 (2012) 21-0000-02
1 引言
由于虚拟化技术的不断发展,虚拟化技术越来越多地应用于实际环境中。虚拟机天然的隔离特性使得虚拟化技术在服务器整合、软件调试、系统安全和灾难恢复等众多方面发挥出了重要的作用,然而这种特性也使虚拟机之间的信息交互和数据传输变得困难。在一些虚拟化网络的实际应用中,比如网格计算、web服务、分布式存储系统等,虚拟机之间的数据通信十分频繁,并且这些虚拟机经常配置在同一物理节点上,实际的通信过程中并不需要经过真实的物理网络。
在内核虚拟机(Kernel-based Virtual Machine,KVM)中,对这种网络通信并没有做特别的优化,而是将其和普通的虚拟机网络通信同等对待,等待VM和宿主机操作系统的统一处理。为此,针对于同一物理节点上的不同虚拟机之间网络网络通信的特点,本文设计并实现了一种基于内存共享提高KVM网络I/O吞吐量的方法。
2 KVM半虚拟化I/O框架及其网络架构
目前I/O虚拟化的实现主要有三种:软件I/O全虚拟化,基于类虚拟化的I/O虚拟化,基于硬件辅助的I/O虚拟化。这三种方法在KVM的I/O虚拟化框架中都或多或少的有所体现。例如KVM要求物理机CPU支持Intel VT/AMD-V技术,与其相应的基于硬件辅助的I/O虚拟化技术会作为辅助手段,提高全虚拟化的QEMU提高I/O虚拟化的性能。除此之外,Russell等在2007年提出的virtio半虚拟化框架也已经被KVM加入支持。
2.1 KVM半虚拟化I/O框架[1]
virtio是一组通用模拟设备的抽象。在KVM中,virtio是Linux内核所提供的一个API接口,通过在Linux内核中加入virtio抽象层,就可以通过调用virtio设计实现的API,实现为多种不同类型的VMM提供不同种类的虚拟I/O设备的目的。有了半虚拟化VMM之后,客户操作系统能够实现一组通用的接口,在一组后端驱动程序之后采用特定的设备模拟。后端驱动程序不需要是通用的,因为它们只实现前端所需的行为。图1为virtio结构示意图。
关键词:KVM;网络;优化
中图分类号:TP391.9 文献标识码:A 文章编号:1007-9599 (2012) 21-0000-02
1 引言
由于虚拟化技术的不断发展,虚拟化技术越来越多地应用于实际环境中。虚拟机天然的隔离特性使得虚拟化技术在服务器整合、软件调试、系统安全和灾难恢复等众多方面发挥出了重要的作用,然而这种特性也使虚拟机之间的信息交互和数据传输变得困难。在一些虚拟化网络的实际应用中,比如网格计算、web服务、分布式存储系统等,虚拟机之间的数据通信十分频繁,并且这些虚拟机经常配置在同一物理节点上,实际的通信过程中并不需要经过真实的物理网络。
在内核虚拟机(Kernel-based Virtual Machine,KVM)中,对这种网络通信并没有做特别的优化,而是将其和普通的虚拟机网络通信同等对待,等待VM和宿主机操作系统的统一处理。为此,针对于同一物理节点上的不同虚拟机之间网络网络通信的特点,本文设计并实现了一种基于内存共享提高KVM网络I/O吞吐量的方法。
2 KVM半虚拟化I/O框架及其网络架构
目前I/O虚拟化的实现主要有三种:软件I/O全虚拟化,基于类虚拟化的I/O虚拟化,基于硬件辅助的I/O虚拟化。这三种方法在KVM的I/O虚拟化框架中都或多或少的有所体现。例如KVM要求物理机CPU支持Intel VT/AMD-V技术,与其相应的基于硬件辅助的I/O虚拟化技术会作为辅助手段,提高全虚拟化的QEMU提高I/O虚拟化的性能。除此之外,Russell等在2007年提出的virtio半虚拟化框架也已经被KVM加入支持。
2.1 KVM半虚拟化I/O框架[1]
virtio是一组通用模拟设备的抽象。在KVM中,virtio是Linux内核所提供的一个API接口,通过在Linux内核中加入virtio抽象层,就可以通过调用virtio设计实现的API,实现为多种不同类型的VMM提供不同种类的虚拟I/O设备的目的。有了半虚拟化VMM之后,客户操作系统能够实现一组通用的接口,在一组后端驱动程序之后采用特定的设备模拟。后端驱动程序不需要是通用的,因为它们只实现前端所需的行为。图1为virtio结构示意图。