论文部分内容阅读
虚拟化技术具有资源共享、在线迁移、进程隔离等优点。它可以充分地利用计算资源,满足多种多样的计算需求,在集群、云计算方面起到了很大作用。图形处理器(Graphics Process Unit,GPU)具有处理能力强、高存储器带宽、低成本等特点。它不仅能很好地进行图形处理,在高性能计算方面也具有很强优势。近年来,由于虚拟化技术和GPU各自的优势,越来越多的研究者在虚拟化环境中利用GPU来进行高性能计算。 由于虚拟化技术使得GPU不便被虚拟机直接访问,再加上GPU厂商对于GPU硬件规范保密,虚拟化环境中GPU的使用和管理面临很大挑战。一方面,虽然目前已有一些研究者开发出GPU虚拟化框架,使得在虚拟机中可以使用GPU。但这些GPU虚拟化框架在进行实际应用中的高性能计算时性能较差,无法达到实际应用的性能要求。另一方面,当多个虚拟机同时在使用GPU时,不同虚拟机对GPU资源有不同的需求。这种情况下,需要一套基于GPU资源的调度管理系统来充分利用GPU资源,从而提高系统的整体性能。 针对目前虚拟化环境中GPU使用和管理所面临的问题,本文主要进行了以下工作。首先,改善了GPU虚拟化的性能,使得可以满足实际应用的需求。目前的GPU虚拟化框架采用远程API方法。该方法分为前端和后端两个部分。前端以动态库的形式被虚拟机中的CUDA(Compute Unified Device Architecture)程序加载,后端则是运行在宿主机中的一个程序。在这种机制下,首先前端重写虚拟机中的CUDA API,将API的名称和相应参数传递给后端。然后后端获得API的名称和参数,并使用宿主机上真实的GPU硬件设备执行相应的API。最后将API执行结果返回给前端。在这种方法下,前后端的数据传输是影响GPU虚拟化性能的一个重要因素。我们从数据传输量和数据传输次数两个方面对GPU虚拟化的性能进行了改善。为了减少数据传输量,基于内存虚拟化原理,提出了一种地址映射机制,将虚拟机中的虚拟地址直接映射到宿主机中的虚拟地址。为了减少数据传输次数,提出了一种推迟提交方法,将多个CUDA API的名称和参数信息缓存起来,一次性传给后端。其次,基于GPU资源提出了一套调度管理系统。该系统支持多个虚拟机并行使用GPU,并且根据虚拟机所需GPU资源数进行调度管理。 在KVM(Kernel-based Virtual Machine)平台上使用CUDA基准程序进行了实验评测。实验证明,地址映射机制可以将GPU虚拟化的性能提高到原来的2~3倍;推迟提交方法能优化GPU虚拟化的性能接近非虚拟化环境下的性能。调度管理系统能提高系统的整体性能,并且提高了GPU资源的利用率。