论文部分内容阅读
虚拟机就是由真实机器和软件所组成的一个虚拟环境,虚拟机及相关优化技术的研究,在遗产代码移植、硬件设计、程序性能提高、网络应用、系统安全等方面都有重要的意义,已经成为是现代编译技术研究的热点之一。其中,性能问题是研究的重点之一。为了提高虚拟机系统的性能,软硬件协同设计(Codesigned)为一种重要的设计方法。间接地址映射是影响这类系统性能的关键因素之一。为了降低在内存中查表的开销,软硬件协同设计系统中一般会增加一个硬件快表。采用一个好的替换策略,降低快表的缺失率,是获得性能的关键。
本人在硕士工作期间,参加了龙芯3号虚拟机的研究,针对虚拟机中间接地址映射问题和硬件快表的替换策略进行了较为深入的探索,并提出了一个高效的替换策略。与传统的LRU、FIFO、RANDOM替换算法相比,取得了较好的效果,分别将快表缺失率降低了32.09%、37.58%和84.86%。另外,还配合课题进行了二进制翻译中的X86浮点栈优化、Code Cache管理、二进制翻译过程中的特殊指令优化、龙芯3号系统级虚拟机设计等方面的工作,取得了较好的效果。
本文的主要内容如下:
第一、介绍了龙芯3号进程级虚拟机设计与实现中需要考虑的关键性问题及解决方案。龙芯3号虚拟机的目的是在龙芯3号硬件平台上稳定、高效、兼容性强地运行X86进程级程序。对于龙芯3号虚拟机来说,在健壮性够强的前提下,以高效性为目标,尽量多地支持X86进程级程序是系统实现的主要思路,此外要兼顾系统的可扩展性和模块化。
第二、也是本文的创新点。首先,作者运用软硬件协同设计设计思想,对虚拟机中的间接地址映射问题的解决方案进行探索,来达到优化虚拟机性能的目的。在龙芯3号虚拟机中,采用软件方法对硬件提供的快表—CAM实现进行模拟,得出CAM不同硬件参数下的缺失率,来辅助硬件设计和完善。接着,以大量的实验数据为基础,总结出了程序在执行过程中与间接地址映射相关的三个特性—1、程序需要映射的源地址动态执行出现的次数多,但静态(不重复)数量不大,且较为集中;2、在所有包含地址映射的指令中,Ret指令占的比例较大;3、源地址出现的动态序列具有阶段、循环重复的特性。随后,在硬件支持结构确定的基础上,以之前总结的程序执行中间接地址映射问题的特征为依据,通过对其他替换策略详尽的分析,提出了基于程序行为划分使用CAM的PCBPC(Partitioning CAM Basing on Programs’Character)算法。本算法比常用的LRU、FIFO和RANDOM替换算法更符合程序广日J接地址特征,能更合理地使用CAM,较大减少了CAM硬件的缺失率。
第三、对龙芯3号系统级虚拟机设计中需要考虑的核心问题进行调研和分析,主要包括:虚拟机的层次结构设计、处理器的虚拟、中断和异常的处理等问题。并探索出了一套可行的系统级虚拟机的实现方案。