论文部分内容阅读
龙芯2F处理器是一款实现64位的MIPSⅢ指令集的高性能通用处理器芯片,采用了先进的乱序执行技术和激进的存储系统设计,充分挖掘指令级并行性,已经达到世界先进通用处理器的要求。龙芯2F是基于MIPS架构的,不过在市场应用方面,X86处理器仍处于主导地位,同时MIPS架构下的应用程序功能有限,种类较少。龙芯为了走向市场,面向更多的用户,需要实现与X86架构的兼容,在它上面运行X86程序,甚至运行windows操作系统。这就需要通过动态二进制翻译的方法将X86架构下的应用程序代码翻译成MIPS指令,从而在龙芯机器上运行X86架构下的应用程序。
QEMU是众多动态二进制翻译器中的一种,它是由FabriceBellard编写的一套开源通用cpu模拟器,在进行模拟的时候,提供了系统模拟和进程模拟让用户根据自己的需要选择。同时QEMU实现了多种异构平台之间的映射,具有平台多样性、翻效率高、易移植的特点,因此在龙芯2F上我们选取了QEMU作为二进制翻译的媒介,实现龙芯2F的全系统虚拟,使得X86架构下的应用程序或者操系统可以运行在龙芯2F的机器上。QEMU在翻译的过程中会分配一块内存空间(Tcache)来存放已翻译好的目标代码,当再次执行到这些代码块的时候,可以直接转入到Tcache中执行,从而省去了重复翻译的过程,提高了运行速度。
由于二进制翻译的过程是纯软件操作的,主要问题就体现在程序的运行速度上。本文主要针对QEMU,研究如何为它的翻译缓存子系统Tcache设计一个高效的管理策略来存放已经翻译好的代码,研究内容包括Tcache的申请、分配、组织和替换策略。本文通过分析目前二进制翻译系统中已有的Tcache的替换算法并且比较它们之间的性能,最后结合QEMU的一些特点,提出了适合QEMU的Tcache管理方法,并且在全系统模拟的情况下,进行了实验验证,同时根据nbench基准测试进行了性能验证。实验数据表明,如果采用了一个合适的Tcache管理的策略,对整体的性能有着很大的提升。