一种基于Linux内核页表替换的内存访问模型追踪方法技术

技术编号:3850437 阅读:351 留言:0更新日期:2012-04-11 18:40
本发明专利技术是一种基于Linux内核页表替换的内存访问模型追踪方法,随着处理器速度与内存访问速度的差距越来越大,内存系统成为系统性能的瓶颈,不同性质的应用程序具有不同类型的内存访问模型,对内存行为的优化方式也不一样,而现有工具都不能高效的追踪程序的内存访问,导致内存优化的复杂性。本发明专利技术应用在Linux系统上,通过修改Linux内核,替换目标进程的页表。新的页表对于非代码段页面只保存一项,这样目标进程每次访问内存时都会发生缺页中断,在内核处理缺页中断时,记录相应的地址,就可以追踪特定目标进程的虚拟页面访问顺序,即程序的内存访问模型。本发明专利技术具有轻量级的特点,追踪内存访问速度快、追踪出的数据量小,而且不影响操作系统中其它进程的正常运行。使用本发明专利技术追踪出内存访问模型,可以指导程序的内存行为优化。

【技术实现步骤摘要】

本专利技术涉及操作系统和程序分析领域。
技术介绍
现在,处理器速度与内存访问速度的差距越来越大,己经达到了几个数量级,根据 最慢的部分决定系统的性能的原则,内存系统成为性能的瓶颈,因此亟需优化程序的内 存行为。不同性质的应用程序具有不同类型的内存访问模型,优化的方式也不一样。因 此如果我们能确定程序的内存访问模型,就能对症下药,进行预取优化。程序内存访问模型就是程序内存行为的描述,现在已有文献上并没有明确的定义, 而且现有工具都不能高效的追踪程序的内存访问,导致了程序性能分析的复杂性。国外对 于内存访问模型已经进行了初步的研究,Junghee等人的研究发现,如果事先知道程序 的内存访问模型,就可以做进一步的优化,提高程序的性能。Mary等人使用MPAT工具 (a memory pattern analysis tool)分析了三种不同的内存访问模型,以评估内存系统 的设计。他根据MPAT收集到的资料,用来分析软件、硬件在哪些方面需要改进以提高 内存系统的性能。其在论文中用高速缓存命中率随时间的变化这种形式来描述内存访问 模型。而且其未考虑多处理器、多核系统上,多线程程序的内存访问模型。Jonathan等 人则利用Chameleon框架软件包里的工具捕获应用程序里的简明内存签名(memory signature),并产生人工内存地址痕迹来模拟这个签名。Chameleon同时模拟空间和时 间局部性,能提供精确的人工痕迹。在现有的各种不同内存层次上,这个痕迹的cache 命中率和原来程序基本一样。他将Chameleon应用在高性能(HPC)程序上,通过使用抽 样技术来捕获到全面的、并行程序的内存签名,而且仅仅产生5倍的减速。国外也实现 了一些内存访问地址追踪工具,如valgrind等,它们的实现并不需要更改Linux内核, 而且追踪的是内存访问地址,而不是页面,这样对于高性能计算程序,获得的统计数据 量会出现存储空间爆炸的情况。本专利技术中的内存访问模型是指程序的虚拟内存页面访问顺序,以及每个页面访问的 持续时间(这样就能估算出每个页面的访问次数)。获取了程序的内存访问模型后就能指 导对程序的内存行为进行优化。
技术实现思路
本专利技术要解决的技术问题是克服现有技术不足,提出一种基于Linux内核进程页 表替换的内存访问模型追踪方法,该轻量级的追踪方法以页面地址为追踪粒度,具有速度快,产生的追踪数据量小的特点,适合于高性能计算程序的内存追踪需求。本专利技术采用的技术方案基于Linux内核进程页表替换的内存访问模型追踪方法, 其特征在于包括以下步骤(1) 引导程序创建出 一个子进程来执行要统计内存访问模型的目标程序,在目标程序执行 之前,父进程通过向Linux内核添加的系统调用a来启动统计过程,并将要统计的目标进程 号(—mt一pid—)传递进内核;(2) 另外申请一个页表,称之为假页表,假页表中对于非代码段的页面只保留一项,这样 对非代码段的每次内存访问都会产生缺页中断,除非一直访问某个地址;在切换到目标进程 的时候将假页表的地址传递给cr3寄存器,使操作系统与假页表建立联系;(3) 目标进程开始执行,由于使用了假页表,目标程序的每次访问内存都会触发缺页中断, 在处理缺页中断时,记录访问的内存页号和访问次数,即内存访问模型;通过向Linux内核 添加的系统调用c将内存访问模型数据取出到用户态;(4) 目标进程执行完后,通过向Linux内核添加的调用系统调用b结束统计过程。 在所述步骤(l)中系统调用a为向Linux内核中添加的新系统调用,用来启动统计过程和变量初始化工作;系统调用a首先判断我们要统计的目标进程号Cmt』idJ是否已经设置, 如果己经设置,说明另一个内存访问模型的统计正在进行,则启动失败;如果未设置,则设 置目标进程号(jnt一pid一)为引导程序传递给系统调用a的进程号;然后系统调用a初始化内 存访问模型追踪所需要的变量并创建一个假页表,将页表地址(_mt_pgd_)设置为假页表的地 址,同时备份真页表的地址。在所述步骤(2)中假页表与真页表的协作方式为在假页表每次触发缺页中断后,首先通 过真页表判断是否真正缺页若不缺页,则将真页表中保存的物理页信息复制到假页表中; 若缺页,则将要访问的页面加载入物理内存中,同时将真页表中对应项的值复制到假页表中; 最后将离开的页面在假页表中的表项值清零;这样,假页表中只有当前进程所处理的页面有 对应的物理页信息。在所述步骤(3)中系统调用c为向Linux内核中添加的新系统调用,引导程序通过不断调 用系统调用c将追踪到的内存访问模型数据取出到用户态。在所述步骤(4)中系统调用b为向Lirmx内核中添加的新系统调用,系统调用b负责终止 统计过程;其主要有2个工作, 一是将我们要统计的目标进程号Cmt—pidj归0, 二是释放 已经没用的假页表。本专利技术与现有技术相比的有益效果(l)本专利技术以页面为追踪粒度,具有追踪速度快的特点,可以追踪高性能计算等长时间运 行的程序,为程序优化提供指导。(2)本专利技术由于采用页面为粒度,还具有追踪出的数据量小的特点。附图说明图1为本专利技术向Linux内核添加的系统调用a的工作流程图; 图2为本专利技术的引导程序的工作流程图; 图3为本专利技术的Linux内核缺页中断函数调用关系图; 图4为本专利技术的Linux内核缺页中断函数代码示例; 图5为本专利技术的真、假页表交互逻辑图; 图6为本专利技术的缺页中断处理工作流程图。 具体实施例方式本专利技术采用如下步骤 (l)主要变量设置//目标进程的pid,为o表示没有启动 pid一t _mt—pid一;〃是否已将假页表的首地址传给cr3寄存器 bool _mt_tran —cr3—;〃假页表的首地址 pgd—t * —mt_pgd—;//用来备份真页表的首地址 ■pgd—t永 —mt_gd_pgd—;〃上次触发缺页中断的地址 unsigned long—l_mt—add—; (2)添加系统调用本专利技术向Linux内核中添加了 3个新系统调用,系统调用a用来启动统计过程,系 统调用b用来结束统计过程,系统调用c用来将追踪到的内存访问模型取出到用户态。 这样就可以在需要的时候对特定的目标进程启动统计过程,在不需要的时候结束统计过 程,最大限度的减少对原来系统运行的影响。其中系统调用a负责启动统计过程,如图1所示。它首先判断我们要统计的目标进 程号(—mt_pid—)是否己经设置。如果已经设置,说明另一个内存访问模型的统计正在进 行,则启动失败;如果未设置,则设置_加—pid—为引导程序传递给系统调用a的进程号。 然后系统调用a初始化内存访问模型追踪所需要的变量并创建一个假页表,将页表地址 (_mt—pgd—)设置为假页表的地址,同时备份真页表的地址(—mt—gd—pgd_)。若假页表创 建失败,则无效返回。系统调用b负责终止统计过程。其主要有2个工作, 一是将我们要统计的进程号 (一mt一pid一)归0, 二是释放已经没用的假页表。系统调用c被引导程序调用,将从内核获取的内存访问模型数据不断传送到用户态。 得到的内存访问模型,包括内存访问的地址和访问持续时间,可以用来指导预取、I/O 等优化。(3) 引导程序其过程如图2本文档来自技高网
...

【技术保护点】
一种基于Linux内核进程页表替换的内存访问模型追踪方法,其特征在于包括以下步骤: (1)引导程序创建出一个子进程来执行要统计内存访问模型的目标程序,在目标程序执行之前,父进程通过向Linux内核添加的系统调用a来启动统计过程,并将要统计的目标进程号传递进内核; (2)另外申请一个页表,称之为假页表,假页表中对于非代码段的页面只保留一项,这样对非代码段的每次内存访问都会产生缺页中断,除非一直访问某个地址;在切换到目标进程的时候将假页表的地址传递给cr3寄存器,使操作系统与假页表建立联系; (3)目标进程开始执行,由于使用了假页表,目标程序的每次访问内存都会触发缺页中断,在处理缺页中断时,记录访问的内存页号和访问次数,即内存访问模型;通过向Linux内核添加的系统调用c将内存访问模型数据取出到用户态; (4)目标进程执行完后,通过向Linux内核添加的调用系统调用b结束统计过程。

【技术特征摘要】

【专利技术属性】
技术研发人员:王雷王政李子星
申请(专利权)人:北京航空航天大学
类型:发明
国别省市:11[中国|北京]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1