虚拟化下软件调度策略设计的辅助工具
计算机学院(国家示范性软件学院)
Helper Tool for software scheduling design under virtualization
本项目主要内容为在轻量级虚拟化技术的背景下设计快速高效软件调度策略的辅助工具。
随着21世纪云计算时代的到来,虚拟化技术得到复兴,人们设计了各种虚拟化的技术。在传统的虚拟化技术(系统虚拟化)中,虚拟机监控器(VMM)作为软硬件的衔接层,向上捕捉和提供虚拟机所需的ISA, 向下处理系统和用户的ISA。其主要技术包括处理器虚拟化、内存虚拟化和设备虚拟化。系统虚拟化让程序可以运行在不同的虚拟机中,每个虚拟机都安装了独立的操作系统,实现了程序之间的隔离。然而,系统虚拟化需要安装完整的操作系统,并配置相关的环境,过于笨重。
因此,轻量级虚拟化诞生了,它允许在原生操作系统中直接运行程序,其性能和部署速度都要优于系统虚拟化。但是,隔离性便成了一个问题。在经过Chroot、FreeBSD jail等探索之后,容器技术诞生了,其借助操作系统提供的多种隔离技术来提供进程级的隔离,易于移植到不同的操作系统之上。在标准化上,2015年OCI组织成立,为容器格式和运行时提供一个统一的行业标准,包括运行时规范和镜像规范。而Docker便是一个经典的开源容器引擎。
本项目首先会对动态软件分析进行研究。动态软件分析是在可控环境中运行程序或者模拟程序的执行过程,同时利用分析工具监控程序的所有操作,观察其执行流程和状态,获取执行中的各种数据。随后通过收集而来的数据来生成调度信息,让容器根据这些信息生成对应的动作。本项目将会提供状态封装、通信和操作机制,允许在用户空间代理中表达复杂的调度策略,并支持多种调度模型,包括从per-CPU到集中式,从运行方式到抢占式,且开销很低。
项目将会使程序绕开内核的调度器,以达到较快的速度和较大的吞吐量。工具的调度策略逻辑在Linux进程中运行,以代理的形式表示出来, 其通过API与内核进行交互。内核通过异步路径中的消息队列通知代理所有托管线程的状态更改,例如线程的创建、阻止与唤醒。随后代理在同步路径中使用基于事务的API提交线程的调度决策。本项目将支持并发执行多个策略、故障隔离以及将CPU资源分配给应用程序。此外,该工具还必须支持对机器进行分区和共享,以便可以并行执行多个调度策略。在发生某个容器故障或者系统更新时,该工具还需做到及时与主机内核解耦,部署、更新、回调甚至是使其崩溃,而避免需手动重启机器的巨大成本。
关于项目的研究方法,我们计划先搜寻有关此项目的论文并尝试复现。如果复现难度较大,我们将考虑从程序分析的视角理解前沿的实现方式和运行逻辑。为了更便于开发,我们将以Linux作为内核开发环境,使用Docker进行容器隔离。