虚拟环境下负载感知型Credit调度算法研究(2)_毕业论文

毕业论文移动版

毕业论文 > 计算机论文 >

虚拟环境下负载感知型Credit调度算法研究(2)


2.相关技术介绍
2.1credit调度算法
Xen虚拟机的CPU调度分为三级:虚拟机监视器分配CPU时间片给各个虚拟CPU;虚拟CPU分配时间片给Guest操作系统的核心线程;Guest操作系统分配时间片给应用程序的用户线程。虚拟机调度属于最底层的调度。Credit虚拟机调度算法是Xen当前默认使用的调度算法[2]。
pCPU在这里指真实设备上的CPU,vCPU是虚拟机中模拟的CPU。每个处理器在每个时间片中能够提供300个credit。调度器把这些credit按照每个domain的权重分配给这些domain。vCPU有三种状态:under、over以及boost。Under意着这个vCPU仍然有credit使用;而over表明这个vCPU已经耗尽了它的credit;Boost状态的vCPU优先级最高。空闲的vCPU分配到任务后会被唤醒,这时,如果其优先级是Boost,这个vCPU会被允许以较低的响应延时运行。运行队列时,boost状态的vCPU排在队列的队首,over状态的vCPU在队尾。若vCPU的优先级相同,它们采用先进先出调度模式。当vCPU获得了足够的credit,它将被准许运行三个周期,每隔10ms,调度器借出100个credit,每30ms重新分配这些credit。当涉及到多核心架构时,如果一个pCPU的运行队列中没有under状态的vCPU,它会运行其它pCPU上可运行的vCPU。这种负载均衡机制保证在有可运行vCPU的系统中没有空闲的pCPU[3]。
2.2Xen的I/O虚拟化模块
为了保证系统的安全,当domainU使用虚拟设备驱动完成透明的I/O访问时,Xen虚拟机使用独立驱动域I/O Virtualization Model of Xen(IDD)来执行I/O操作。在这个模式中,设备驱动被划分为三个部分:fronted driver、backend driver和native driver。fronted driver运行在domainU内,backend driver和native driver运行在domain0。fronted把domainU的I/O请求和请求说明传送给backend driver,由native driver控制硬件完成I/O请求。Fronted driver和backend driver在I/O ring上传输I/O请求。I/O ring由domianU和domain0之间的内存共享来实现,它仅仅包含I/O的描述信息,I/O的数据不放入I/O ring。
虚拟机按照下面的方式传输数据包:Frontend driver通过hypercall(超级调用)把I/O请求的信息写入I/O ring,当domain0得到调度时,backend driver会处理这个I/O请求。Backend driver将I/O请求发送给native driver,之后I/O访问在硬件中完成。Backend 发送一个响应给frontend ,这个I/O操作就结束了。VM接受数据包则使用相反的处理过程。Xen提供了一个grant table(授权表)来实现DMA数据在domainU和domain0之间传递。每个domain文持一个grant table来表明哪个页可以被哪个domain访问。Xen有一个active grant table来记录每个domain的grant table 目录。
当domainU需要执行DMA时,frontend driver把grant reference(GR)和I/O请求放入I/O ring, domain0收到这个请求之后,请求Xen锁定这个GR相关的页,Xen将会检查这个GR并且做出响应。然后domain0发送一个DMA请求给真实的硬件,XenI/O架构如图1所示。
 Xen I/O架构
图1 Xen I/O架构
2.3SR-IOV
传统的I/O虚拟化,例如VMDq和direct I/O不能在设备同时运行时表现出高的I/O性能。对此,SR-IOV是一种更好的解决方式。SR-IVO技术通过避免额外的数据复制消除了驱动方面的瓶颈,它以较低的CPU占用率大大提高了虚拟机的吞吐量[4]。
SR-IOV设备拥有一个或者多个physical functions(PF),每个PF是一个完整的PCIe设备,它管理和配置所有的I/O资源[4]。VF由PF划分而来,它是实施I/O功能的简单PCIe设备,但它不可以管理物理NIC。运行在domain0的PF驱动可以直接访问所有PF资源并且配置、管理VF[5]。VF驱动运行在客户OS中,它可以直接访问对应的VF (责任编辑:qin)