CN114297101A - 一种记录内存访问来源的方法及系统 - Google Patents
一种记录内存访问来源的方法及系统 Download PDFInfo
- Publication number
- CN114297101A CN114297101A CN202111675383.9A CN202111675383A CN114297101A CN 114297101 A CN114297101 A CN 114297101A CN 202111675383 A CN202111675383 A CN 202111675383A CN 114297101 A CN114297101 A CN 114297101A
- Authority
- CN
- China
- Prior art keywords
- memory access
- memory
- address
- main memory
- module
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明的实施例公开一种记录内存访问来源的方法及系统,涉及计算机技术领域,所述方法包括:用于执行内存访问指令的内存读写执行模块在收到内存访问指令时,判断所述内存访问指令所要访问的目标内存地址是否属于预设的监控内存地址范围;若所述目标内存地址属于预设的监控内存地址范围,则所述内存读写执行模块执行所述内存访问指令,并通过设置于CPU物理核中的内存访问记录缓存模块记录本次内存访问信息;所述内存访问记录缓存模块将记录的内存访问信息按记录时间先后顺序写回预设的计算机主内存地址范围对应的主内存缓冲区内。本发明扩大了可被记录的内存地址范围,也保持系统性能基本不受影响。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种记录内存访问来源的方法及系统。
背景技术
在计算机系统中,内存是重要的组成部分。计算机程序在运行过程中的数据全部保存在内存中。对内存中的数据的窃取是黑客程序的最常用手段和目标,记录并监控内存访问来源是追踪黑客程序的有效手段。
目前,记录内存访问来源的方案常见的有以下三种:
第一种方案是设置硬件断点。X86硬件下的硬件调试寄存器支持对内存读写触发异常。X86硬件下定义了DR0-DR7调试寄存器。DR0–DR3记录需调试的内存地址,DR7管理和配置调试条件。将内存虚地址填入寄存器DR0–DR3,并配置DR7控制读写内存虚拟地址时产生异常。指令在执行时,若读出或写入的内存虚拟地址与DR0–DR3的地址一致,硬件将触发#DB异常,在异常处理函数中,可记录读写内存的指令地址。
这种方案在系统启动阶段,需要分配足够大的内存区间,读写指令缓存区,用于保存所有的地址读写指令地址。将需追踪的地址配置到DR0-DR3寄存器中,任何对DR0-DR3中内存地址的读写触发#DB异常。在#DB异常函数中,将硬件保存到异常堆栈上的指令地址(IP)保存至读写指令缓存区(如图1所示)。当读写指令缓存区写满时,转存至磁盘。但这种方案,在进入处理函数时,硬件需要切换堆栈,并将返回指令地址,返回堆栈地址及其他信息保存到堆栈。异常处理函数需要将通用寄存器保存到堆栈。在异常处理完毕后,要在寄存器反序弹出,恢复在原始位置。整个流程的开销很大,当需持续抓取内存访问指令时,会严重降低系统的性能。
第二种方案是应用工具动态二进制插桩框架,可以监控程序的每一步执行,提供了丰富的API,可以在二进制程序程序运行过程中插入各种函数实现对程序的追踪,比如说要统计一个程序执行了多少条指令,每条指令的地址等信息。从概念上理解,动态二进制插桩框架类似于一个JIT(Just-In-Time)编译器,读取可执行程序的指令,重新翻译后模拟执行。
动态二进制插桩框架提供一种指令级插桩模式,在这种模式下,所有的指令都会被遍历并执行桩程序。为每一个指令添加回调函数,并判断当指令读写指定内存区间时,记录指令地址,可达到记录指令访问来源的目的。
第三种方案是利用调试工具gdb。gdb是Unix/Linux操作系统下常用的调试器。gdb的watch命令提供对内存读写设置断点。当设置watch某一个虚拟内存地址后,在程序执行的过程中,对这个虚拟内存的读或写操作都触发断点,程序暂停执行,可记录执行读写指令的地址。
但是,第二种方案和第三种方案中,类似即时翻译工具或者类似gdb的调试器,都无法在生产环境下使用,他们的主要工作场景是在研发的调试阶段或者出错后的现场排查阶段。同时,黑客的侵入过程可能发生在各个应用程序甚至操作系统,用户无法实现每个应用程序启动时都使用即时翻译工具或gdb跟踪程序执行,这将极大的降低生产环境的性能;另外若操作系统漏洞被黑客攻击,非法内存读写发生在操作系统内,即时翻译工具或gdb无法使用。
发明内容
有鉴于此,本发明实施例提供一种记录内存访问来源的方法及系统,能够解决现有记录内存访问来源的方案,被记录的内存地址有限、影响系统性能、易被攻击导致系统不能正常工作的问题。
第一方面,本发明实施例提供一种记录内存访问来源的方法,包括:
用于执行内存访问指令的内存读写执行模块在收到内存访问指令时,判断所述内存访问指令所要访问的目标内存地址是否属于预设的监控内存地址范围;其中,所述监控内存地址范围记录在设置于CPU物理核中的MSR寄存器中;
若所述目标内存地址属于预设的监控内存地址范围,则所述内存读写执行模块执行所述内存访问指令,并通过设置于CPU物理核中的内存访问记录缓存模块记录本次内存访问信息;所述内存访问信息包括所述内存访问指令的指令地址、目标内存地址以及内存访问时的进程页表基地址;
所述内存访问记录缓存模块将记录的内存访问信息按记录时间先后顺序写回预设的计算机主内存地址范围对应的主内存缓冲区内;其中,所述主内存地址范围记录在所述MSR寄存器中。
本实施例提供的一种记录内存访问来源的方法,通过在CPU内部添加了专用硬件模块内存访问记录缓存模块,用于保存访问指定内存区间的指令地址,硬件直接保存指令IP,无需软件参与,扩大了可被记录的内存地址范围,保持系统性能基本不受影响。
结合第一方面,在第一方面的第一种实施方式中,所述内存访问记录缓存模块记录本次内存访问信息,包括:
所述内存访问记录缓存模块判断用于记录内存访问信息的缓存队列是否已满;
若所述缓存队列未满,则所述内存访问记录缓存模块将本次内存访问信息存入所述缓存队列尾部;
所述内存访问记录缓存模块更新所述缓存队列已记录数据的尾部位置标识值。
本实施例,所述内存访问记录缓存模块通过缓存队列记录内存访问信息,因此在缓存队列未满时,即可记录内存访问信息,记录后更新其尾部位置标识值,即可实现内存访问信息的物理记录,记录方式简单高效。
结合第一方面的第一种实施方式,在第一方面的第二种实施方式中,所述内存访问记录缓存模块将记录的内存访问信息按记录时间先后顺序写回预设的计算机主内存地址范围对应的主内存缓冲区内,包括:
所述内存访问记录缓存模块判断所述缓存队列已记录数据的头部位置标识值是否等于尾部位置标识值;
若所述缓存队列已记录数据的头部位置标识值不等于尾部位置标识值,则所述内存访问记录缓存模块将所述缓存队列中所述头部位置标识值对应位置的内存访问信息写回所述主内存缓冲区内。
本实施例中,内存访问记录缓存模块在每次记录时,通过比较缓存队列的头部位置标识值和尾部位置标识值来确定内存访问记录缓存模块是否已满,若未满,则可以记录内存访问信息,判断方式简单。
结合第一方面的第二种实施方式,在第一方面的第三种实施方式中,所述内存访问记录缓存模块将所述缓存队列中所述头部位置标识值对应位置的内存访问信息写回所述主内存缓冲区内,包括:
所述内存访问记录缓存模块判断所述MSR寄存器记录的主内存缓冲区存储标识值是否等于第一预设值;其中,所述主内存缓冲区存储标识值的初始值为第二预设值,所述第一预设值用于表征所述主内存缓冲区已满,所述第二预设值用于表征所述主内存缓冲区未满;
若所述主内存缓冲区存储标识值不等于第一预设值,则所述内存访问记录缓存模块获取所述主内存缓冲区起始地址和已存储的内存访问信息数量;
所述内存访问记录缓存模块将所述缓存队列中所述头部位置标识值对应位置的内存访问信息写入所述主内存缓冲区内,且写入起始位置为A0+offset*N;其中,所述A0为所述主内存缓冲区起始地址,offset为所述主内存缓冲区已存储的内存访问信息数量,N为所述缓存队列中记录的每条内存访问信息的长度;
所述内存访问记录缓存模块令head=head+1,offset=offset+1;其中,head为所述缓存队列已记录数据的头部位置标识值;
所述内存访问记录缓存模块判断A0+offset*N是否等于A1;其中,A1为所述主内存缓冲区结束地址;
若A0+offset*N等于A1,则所述内存访问记录缓存模块将所述MSR寄存器记录的主内存缓冲区存储标识值设置为第一预设值,并发送主内存缓冲区满的中断信号给CPU,以等待所述CPU处理后将所述主内存缓冲区存储标识值重置为第二预设值。
本实施例中,通过MSR寄存器记录主内存缓冲区存储标识值,内存访问记录缓存模块在将内存访问指令相关信息写入主内存缓冲区时,首先根据主内存缓冲区存储标识值判断主内存缓冲区是否为满,不满的时候才进行信息的写入,将有效地提高系统的性能。
结合第一方面,在第一方面的第四种实施方式中,所述预设的监控内存地址范围包括:多块不连续的内存区间分别对应的多个地址范围。
本实施例,可以记录多块不连续的内存区间的内存访问记录,进一步提高了内存访问记录的灵活性和全面性。
结合第一方面、第一方面的第一种、第二种、第三种或第四种实施方式,在第一方面的第五种实施方式中,所述内存访问信息还包括:所述内存访问指令的访问类别、CPU标识;
所述内存访问记录缓存模块记录本次内存访问信息,包括:
所述内存访问记录缓存模块分别用8字节保存所述指令地址、目标内存地址、内存访问时的页表基地址,且借用8字节的所述指令地址的最高位来记录所述访问类别,借用8字节的所述目标内存地址的最高12bit来记录所述CPU标识。
本实施例中,根据虚拟地址的长度特征设置内存访问记录缓存模块记录的每次内存访问记录的占用空间,并充分利用每个字节,采用最少字节最大化记录有用信息,进一步提高了内存访问记录缓存模块的缓存空间利用率,提高系统性能。
结合第一方面的第五种实施方式,在第一方面的第六种实施方式中,在所述内存访问记录缓存模块记录本次内存访问信息之后,所述方法还包括:
通过进程信息获取模块读取记录的内存访问信息中的进程页表基地址;
所述进程信息获取模块遍历操作系统的进程队列,获取与当前读取的进程页表基地址相匹配的进程的进程信息;所述进程信息至少包括进程标识和进程名称;
所述进程信息获取模块将当前读取的指令地址、目标内存地址、读写类别、CPU标识及匹配到的进程信息对应转存到指定文件中。
本实施例中,进一步解决了进程页表基地址对用户分析内存读写记录很不友好,用户无法把页表基地址与进程的相关信息关联的问题,不仅可以通过进程信息获取模块获取进程信息提供给用户,还可以将内存地址,读写类别,指令地址,CPU标识,进程标识,进程名称等信息转存到文件中,便于存档和用户离线查看,是内存访问记录兼顾在线记录和离线查看的功能。
第二方面,本发明实施例提供一种记录内存访问来源的系统,包括:用于执行内存访问指令的内存读写执行模块,还包括:设置于CPU物理核中的内存访问记录缓存模块和MSR寄存器;
所述MSR寄存器,用于存储预设的监控内存地址范围以及预设的用于保存内存访问信息的主内存地址范围;
所述内存读写执行模块,用于在收到内存访问指令时,判断所述内存访问指令所要访问的目标内存地址是否属于所述MSR寄存器存储的所述监控内存地址范围,若是,则执行所述内存访问指令访问内存,并向所述内存访问记录缓存模块发送本次内存访问信息;所述内存访问信息包括所述内存访问指令的指令地址、目标内存地址以及内存访问时的进程页表基地址;
所述内存访问记录缓存模块,用于记录收到的本次内存访问信息,并将记录的内存访问信息按记录时间先后顺序写回所述主内存地址范围对应的主内存缓冲区内。
本实施例提供的一种记录内存访问来源的方法,通过在CPU内部添加了专用硬件模块内存访问记录缓存模块,用于保存访问指定内存区间的指令地址,硬件直接保存指令IP,无需软件参与,扩大了可被记录的内存地址范围,保持系统性能基本不受影响。
结合第二方面,在第二方面的第一种实施方式中,所述内存访问记录缓存模块,包括:缓存队列、尾部位置寄存器、第一判断子模块、存入子模块、尾部标识更新子模块和写回模块;
所述缓存队列,用于记录内存访问信息;
所述尾部位置寄存器,用于记录所述缓存队列已记录数据的尾部位置标识值;
所述第一判断子模块,用于在收到本次内存访问信息时,判断所述缓存队列是否已满;
所述存入子模块,用于在所述第一判断子模块的判断结果为否时,将所述本次内存访问信息存入所述缓存队列尾部;
所述尾部标识更新子模块,用于在所述存入子模块将所述本次内存访问信息存入所述缓存队列尾部后,更新所述尾部位置寄存器记录的尾部位置标识值;
所述写回模块,用于将所述缓存队列记录的内存访问信息按记录时间先后顺序写回主内存缓冲区。
本实施例,所述内存访问记录缓存模块通过缓存队列记录内存访问信息,因此在缓存队列未满时,即可记录内存访问信息,记录后更新其尾部位置标识值,即可实现内存访问信息的物理记录,记录方式简单高效。
结合第二方面的第一种实施方式,在第二方面的第二种实施方式中,所述内存访问记录缓存模块还包括:头部位置寄存器,用于记录所述缓存队列已记录数据的头部位置标识值;
所述写回模块,包括:
第二判断子模块,用于判断所述头部位置寄存器记录的头部位置标识值是否等于所述尾部位置寄存器记录的尾部位置标识值;
写回子模块,用于在所述第二判断子模块的判断结果为否时,将所述缓存队列中所述头部位置标识值对应位置的内存访问信息写回所述主内存缓冲区内。
本实施例中,内存访问记录缓存模块在每次记录时,通过比较缓存队列的头部位置标识值和尾部位置标识值来确定内存访问记录缓存模块是否已满,若未满,则可以记录内存访问信息,判断方式简单。
结合第二方面的第二种实施方式,在第二方面的第三种实施方式中,所述MSR寄存器还用于记录主内存缓冲区存储标识值;
所述写回子模块,包括:
第一判断单元,用于在所述第二判断子模块的判断结果为否时,判断所述主内存缓冲区存储标识值是否等于第一预设值;其中,所述主内存缓冲区存储标识值的初始值为第二预设值,所述第一预设值用于表征所述主内存缓冲区已满,所述第二预设值用于表征所述主内存缓冲区未满;
获取单元,用于在所述第一判断单元的判断结果为否时,获取所述主内存缓冲区起始地址和已存储的内存访问信息数量;
写回单元,用于将所述缓存队列中所述头部位置标识值对应位置的内存访问信息写入所述主内存缓冲区内,且写入起始位置为A0+offset*N;其中,所述A0为所述主内存缓冲区起始地址,offset为所述主内存缓冲区已存储的内存访问信息数量,N为所述缓存队列中记录的每条内存访问信息的长度;
第一设置单元,用于在所述写回单元将所述缓存队列中所述头部位置标识值对应位置的内存访问信息写入所述主内存缓冲区内后,更新所述头部位置寄存器记录的头部位置标识值为head=head+1,并令offset=offset+1;其中,head为所述头部位置寄存器记录的头部位置标识值;
第二判断单元,用于判断A0+offset*N是否等于A1;其中,A1为所述主内存缓冲区结束地址;
第二设置单元,用于在所述第二判断单元的判断的结果为是时,将所述MSR寄存器记录的主内存缓冲区存储标识值设置为第一预设值,并发送主内存缓冲区满的中断信号给CPU,以等待所述CPU处理后将所述主内存缓冲区存储标识值重置为第二预设值。
本实施例中,通过MSR寄存器记录主内存缓冲区存储标识值,内存访问记录缓存模块在将内存访问指令相关信息写入主内存缓冲区时,首先根据主内存缓冲区存储标识值判断主内存缓冲区是否为满,不满的时候才进行信息的写入,将有效地提高系统的性能。
结合第二方面,在第二方面的第四种实施方式中,所述预设的监控内存地址范围包括:多块不连续的内存区间分别对应的多个地址范围。
本实施例,可以记录多块不连续的内存区间的内存访问记录,进一步提高了内存访问记录的灵活性和全面性。
结合第二方面、第二方面的第一种、第二种、第三种或第四种实施方式,在第二方面的第五种实施方式中,所述内存访问信息还包括:所述内存访问指令的访问类别、CPU标识;
所述内存访问记录缓存模块,分别用8字节保存所述指令地址、目标内存地址、内存访问时的页表基地址,且借用8字节的所述指令地址的最高位来记录所述访问类别,借用8字节的所述目标内存地址的最高12bit来记录所述CPU标识。
本实施例中,根据虚拟地址的长度特征设置内存访问记录缓存模块记录的每次内存访问记录的占用空间,并充分利用每个字节,采用最少字节最大化记录有用信息,进一步提高了内存访问记录缓存模块的缓存空间利用率,提高系统性能。
结合第二方面的第五种实施方式,在第二方面的第六种实施方式中,所述记录内存访问来源的系统,还包括:进程信息获取模块;
所述进程信息获取模块,包括:
页表基地址读取子模块,用于读取所述内存访问记录缓存模块和/或所述主内存缓冲区记录的内存访问信息中的进程页表基地址;
进程队列遍历子模块,用于遍历操作系统的进程队列,获取与当前读取的进程页表基地址相匹配的进程的进程信息;所述进程信息至少包括进程标识和进程名称;
文件存储子模块,用于将当前读取的指令地址、目标内存地址、读写类别、CPU标识及匹配到的进程信息对应转存到指定文件中。
本实施例中,进一步解决了进程页表基地址对用户分析内存读写记录很不友好,用户无法把页表基地址与进程的相关信息关联的问题,不仅可以通过进程信息获取模块获取进程信息提供给用户,还可以将内存地址,读写类别,指令地址,CPU标识,进程标识,进程名称等信息转存到文件中,便于存档和用户离线查看,是内存访问记录兼顾在线记录和离线查看的功能。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1为利用硬件断点寄存器保存读写内存指令地址示意图;
图2为本发明一种记录内存访问来源的方法实施例一流程图;
图3为含内存读写记录缓存的CPU核心架构图;
图4为本发明一种记录内存访问来源的方法实施例二流程图;
图5为本发明一种记录内存访问来源的系统实施例一的结构示意图;
图6为本发明一种记录内存访问来源的系统实施例二的结构示意图;
图7为本发明一种记录内存访问来源的系统实施例三的结构示意图;
图8为本发明一种记录内存访问来源的系统实施例四的结构示意图;
图9为本发明一种记录内存访问来源的系统实施例五的结构示意图。
具体实施方式
下面结合附图对本发明实施例一种记录内存访问来源的方法及系统进行详细描述。
应当明确,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
图2为本发明一种记录内存访问来源的方法实施例一的流程图,如图2所示,本实施例的方法可以包括以下步骤S101-S103:
步骤S101、用于执行内存访问指令的内存读写执行模块在收到内存访问指令时,判断所述内存访问指令所要访问的目标内存地址是否属于预设的监控内存地址范围,是则执行步骤S102。
其中,所述监控内存地址范围记录在设置于CPU物理核中的模型特定寄存器(MSR,Model Specific Register)中。
本实施例中,所述MSR寄存器包括共5个寄存器,可以预先设置控制本内存核心是否打开内存读写记录追踪的第一个寄存器MSR Memory Trace Control,长度为4个字节(32个bit),其bit 1-bit 31为预留,bit 0就是用于控制本内存核心是否打开内存读写记录追踪的控制值,例如bit 0=1(true),表示打开内存读写记录追踪,bit 0=0(false),表示不打开内存读写记录追踪。在判断目标内存地址是否属于预设的监控内存地址范围之前,可以根据此值进行预判断,如果bit 0=0,则直接返回不属于预设的监控内存地址范围,如果bit 0=1,则继续判断内存访问指令所要访问的目标内存地址是否为设置的监控内存地址,这样将有效地的提高系统的性能。
其中,监控内存地址范围包括预先设置监控内存地址的起始地址和监控内存地址的结束地址进行限定,其中,监控内存地址的起始地址存储在所述MSR寄存器的第二个寄存器MSR Traced Memory Base寄存器中,监控内存地址的结束地址存储在所述MSR寄存器的第三个寄存器MSR Traced Memory Limit寄存器中,预先设置MSR Traced Memory Base寄存器和MSR Traced Memory Limit寄存器这两个寄存器的格式完全相同,长度为8个字节(64个bit),这个寄存器的63:12bit保存了地址的63:12bit,11:0bit必须为0。
优选地,为了更好的表示不连贯的监控内存地址,可以设置多个监控内存地址的起始地址和结束地址,来表示多块不连续的内存区间分别对应的多个地址范围,从而达到对多个不连续的内存区间进行监控。相应地,为记录多块不连续的内存区间分别对应的多个地址范围,可以将MSR Traced Memory Base/MSR Traced Memory Limit扩展为多个,每个MSR Traced Memory Base/MSR Traced Memory Limit别用于记录一块连续的内存区间的监控地址起始地址/结束地址。
本实施例中,如果内存读写执行模块判断结果为目标内存地址不属于预设的监控内存地址范围,则直接去一级数据缓存获取数据。
步骤S102、所述内存读写执行模块执行所述内存访问指令,并通过设置于CPU物理核中的内存访问记录缓存模块记录本次内存访问信息。
其中,所述内存访问信息包括所述内存访问指令的指令地址、目标内存地址以及内存访问时的进程页表基地址。
本实施例中,内存访问信息使用了24个字节,格式如下表1所示:
表1.内存访问信息格式表
偏移 | 长度字节 | 字段 |
0 | 8 | 目标内存地址 |
8 | 8 | 内存访问指令的指令地址 |
16 | 8 | 内存访问时的进程页表基地址 |
图3为含内存读写记录缓存的CPU核心架构图,如图3中所示,本发明实施例在CPU核心中添加一个内存访问记录缓存模块1和MSR寄存器2,该内存访问记录缓存模块1一边从CPU核心中的内存读写执行模块接收数据,一边将自身缓存的内存读写记录写回主内存。MSR寄存器2用于记录监控内存地址范围。具体地,图3所示的CPU核心执行内存读写的基本流程如下步骤1)-5)所述:
1)取指令
CPU核心从指令寄存器(IP,Instruction Pointer)获取当前指令所在的内存地址,CPU核心以IP为关键字从指令缓存(Instruction Cache)中查询当前指令的内容,若查到,则将指令码发送到指令解码模块做解码操作,若未查到,则向下级缓存直至内存中查询当前指令的内容。
2)指令解码
为提升CPU性能,现代CPU内部使用的指令与用户编程使用的指令不完全一致。以X86为例,X86提供的用户指令为3-15变长指令,但是在CPU内部,指令解码模块将变长指令重新解码为一个或多个定长的指令后再执行。
3)发射
发射模块的作用是将解码后的指令序列发送给指令调度器。调度器负责识别指令类别,并将各类型的指令发送到对应的指令执行模块,例如调度器会将内存读写类型的指令发送到内存读写执行模块3。
4)内存读写指令
为支持高性能的获取内存读写记录,本发明实施例在CPU核心中添加一个内存访问记录缓存模块1,如图3所示,内存访问记录缓存模块1可用一个缓存队列13保存内存访问信息,并使用头位置指针head(头部位置标识值)和尾位置指针tail(尾部位置标识值)指示当前未写回主内存的记录位置。该缓存队列13的长度由硬件预先设定,比如4096个或8192个。采用缓存队列13进行内存访问信息的存储,其具有的读写特性为先进先出,此特性便于后续进行按照时间对内存访问信息进行操作。
图3中的内存读写执行模块3在收到内存访问指令后,在向数据缓存查询内存内容之前,先判断当前收到的内存访问指令所要访问的目标内存地址是否属于MSR寄存器2记录的预设的监控内存地址范围,若是,则内存读写执行模块3执行当前内存访问指令(内存读写执行模块以被读写的内存地址为索引,按一级数据缓存→二级数据缓存→主内存的顺序,逐级查询内存数据,并更新缓存状态),并将当前内存访问指令的内存地址+IP地址信息发送给所述内存读写记录缓存模块1,内存读写记录缓存模块1将本次内存访问信息存入缓存队列13,更新尾位置指针tail。
5)提交
内存读写指令执行完毕后,提交模块负责更新指令寄存器内容并清除中间状态。
其中,内存访问记录缓存模块1是添加在每一个CPU物理核,增加的MSR寄存器也增加在每一个CPU物理核,因此软件对每一个CPU物理核配置后,各个物理核的内存读取记录可同时工作。分配在主内存中的缓冲区也建议分配在不同的地址空间,可保证写回主内存操作也可以并发工作,即可支持多CPU。
步骤S103、所述内存访问记录缓存模块将记录的内存访问信息按记录时间先后顺序写回预设的计算机主内存地址范围对应的主内存缓冲区内。
其中,所述主内存地址范围记录在所述MSR寄存器中。
本实施例中,主内存缓冲区可以通过设置主内存缓冲区的起始地址和主内存缓冲区的结束地址进行定义。
如图3所示结构,内存读写记录缓存模块1还用于将缓存队列内的数据写回主内存,并更新头位置指针head。当主内存缓冲区存满后,发送异常给CPU,请求后续处理。为了保证内存访问信息能成功写入主内存缓冲区,在写入前,需要判断主内存缓冲区是否满,满的话,就发送异常通知CPU,如果没有满才进行写入操作,从而有效地提高系统的性能。其中,所述主内存缓冲区的起始地址存储在所述MSR寄存器的第四个寄存器MSR MemoryTrace Log Base寄存器个,主内存缓冲区的结束地址存储在所述MSR寄存器的第五个寄存器MSR Memory Trace Log Limit寄存器中,则在往主内存缓冲区写入内存访问信息前,可通过读取判断MSR Memory Trace Log Base寄存器和MSR Memory Trace Log Limit寄存器记录的值以确定写入地址范围。
作为一可选实施例,所述内存访问记录缓存模块记录本次内存访问信息,包括S1021-S1023:
S1021:所述内存访问记录缓存模块判断用于记录内存访问信息的缓存队列是否已满;否则执行S1022。
本实施例中,采用队列(queue)保存内存访问信息,那么相应的队列就有头位置指针(head),尾位置指针(tail)和队列长度(queue_length),当(tail+1)%queue_length=head时,则说明队列已满,反之(tail+1)%queue_length!=head时,则说明队列未满,具有判断简单且准确的优点。
S1022:所述内存访问记录缓存模块将本次内存访问信息存入所述缓存队列尾部。
本实施例中,在(tail+1)%queue_length!=head时,则可以将内存访问信息存入所述缓存队列尾部,即放在(tail+1)%queue_length的位置。
S1023:所述内存访问记录缓存模块更新所述缓存队列已记录数据的尾部位置标识值。
本实施例中,每次完成将一次内存访问信息存入所述缓存队列尾部后,需要设置所述缓存队列已记录数据的尾部位置标识值tail=tail+1,便于下次信息的写入。
作为一可选实施例,所述步骤S103,包括:
S1031:所述内存访问记录缓存模块判断所述缓存队列已记录数据的头部位置标识值是否等于尾部位置标识值,否则执行S1032。
本实施例中,所述缓存队列的tail=head时,及所属缓存队列的头部位置标识值等于尾部位置标示值时,则说明队列中所有记录都已经写回主内存,否则,则说明队列中还有记录没有写回主内存缓冲区。
S1032:所述内存访问记录缓存模块将所述缓存队列中所述头部位置标识值对应位置的内存访问信息写回所述主内存缓冲区内。
本实施例中,缓存队列的tail!=head时,则head处指向的位置肯定记录有内存访问信息,则可以将此位置的记录写回主内存缓冲区。
本实施例提供的一种记录内存访问来源的方法,通过在CPU内部添加硬件模块内存读写记录缓存,用于将访问属于预设的监控内存地址范围的内存访问指令相关信息(即内存访问来源)进行保存,因采用硬件直接保存指令IP至主内存缓存区,无需软件参与,扩大了可被记录的内存地址范围,保证了系统性能基本不受影响。
图4为本发明一种记录内存访问来源的方法实施例二流程图,如图4所示,本实施例的方法包括S201-S212:
S201:用于执行内存访问指令的内存读写执行模块在收到内存访问指令时,判断所述内存访问指令所要访问的目标内存地址是否属于预设的监控内存地址范围,是则执行S202。
S202:所述内存读写执行模块执行所述内存访问指令,并将内存访问信息发送给设置于CPU物理核中的内存访问记录缓存模块。
S203:所述内存访问记录缓存模块判断用于记录内存访问信息的缓存队列是否已满;否则执行S204。
S204:所述内存访问记录缓存模块将本次内存访问信息存入所述缓存队列尾部。
优选地,如上述表1所示,由于虚拟地址的实际长度无需64bit(即8字节),在4级页表下,虚拟地址空间最多48bit。其余的高位地址或者全0或者全1,因此可以借用被读写内存地址的最高位来表示该记录是读操作还是写操作。根据其他的高位内容可以很容易的恢复最高位的原始值。同样原因,借用指令地址的高12bit,保存CPU的id。由于内存记录中保存的内存地址和指令地址都是虚拟地址,为区分不同记录之间的虚拟地址是否属于同一个进程,将发送内存访问时的页表基地址也保存在记录中。则细化后的内存访问信息格式如下表2所示:
表2.内存访问信息细化格式表
作为一可选实施例,本步骤S204之后,还包括S2041-S2043:
S2041:通过进程信息获取模块读取记录的内存访问信息中的进程页表基地址。
S2042:所述进程信息获取模块遍历操作系统的进程队列,获取与当前读取的进程页表基地址相匹配的进程的进程信息。
所述进程信息至少包括进程标识和进程名称。
S2043:所述进程信息获取模块将当前读取的指令地址、目标内存地址、读写类别、CPU标识及匹配到的进程信息对应转存到指定文件中。
本实施例中,读取内存读写记录中的页表基地址,并遍历操作系统的进程队列,逐个对比进程的页表基地址与读写记录中的页表基地址是否相同。若相同,表明找到了读写内存的进程,进而从进程数据结构中获取到进程id,进程名称等其他信息。可以将内存地址,读写类别,指令地址,CPU id,进程id,进程名称等信息转存到文件中。
S5205:所述内存访问记录缓存模块更新所述缓存队列已记录数据的尾部位置标识值。
S206:所述内存访问记录缓存模块判断所述缓存队列已记录数据的头部位置标识值是否等于尾部位置标识值,否则执行S207。
S207:所述内存访问记录缓存模块判断所述MSR寄存器记录的主内存缓冲区存储标识值是否等于第一预设值;否则执行S208。
其中,所述主内存缓冲区存储标识值的初始值为第二预设值,所述第一预设值用于表征所述主内存缓冲区已满,所述第二预设值用于表征所述主内存缓冲区未满。
本实施例中,为了保证内存访问信息能成功写入主内存,在写入前需要判断主内存缓冲区是否满,满的话就发送异常通知CPU,如果没有满才进行写入操作,其中,主内存缓冲区的大小应为内存访问信息长度(如24字节)的整数倍,其存储标识值可以写入MSRMemory Trace Log Full寄存器。当MSR Memory Trace Log Full的值=1(true),表征所述主内存缓冲区已满,当MSR Memory Trace Log Full的值=0(false),表征所述主内存缓冲区未满。
S208:所述内存访问记录缓存模块获取所述主内存缓冲区起始地址和已存储的内存访问信息数量。
本实施例中,当MSR Memory Trace Log Full的值!=1(true)时,表征所述主内存缓冲区未满,则可以读取MSR Memory Trace Log Base寄存器中存储的主内存缓冲区起始地址,同时/随后再获取已存储的内存访问信息数量offset,便于后面计算内存访问信息应存储的位置。
S209:所述内存访问记录缓存模块将所述缓存队列中所述头部位置标识值对应位置的内存访问信息写入所述主内存缓冲区内,且写入起始位置为A0+offset*N;
其中,所述A0为所述主内存缓冲区起始地址,offset为所述主内存缓冲区已存储的内存访问信息数量,N为所述缓存队列中记录的每条内存访问信息的长度。
本实施例中,假设MSR Memory Trace Log Base的值为100,主内存缓冲已存储的内存访问信息数量offset=3,N=24,则可以将缓存队列中的内存访问信息写回到主内存缓冲区172地址。
S210:所述内存访问记录缓存模块令head=head+1,offset=offset+1。
其中,head为所述缓存队列已记录数据的头部位置标识值。
本实施例中,将内存访问记录缓存模块令head=head+1,offset=offset+1,便于后续队列存储内存访问信息或者及时的设置主内存缓冲区存储标识值。
S211:所述内存访问记录缓存模块判断A0+offset*N是否等于A1;是则执行S212。
其中,A1为所述主内存缓冲区结束地址。
本实施例中,A0+offset*N的值表示地址A0到A0+offset*N已经写满了内存访问信息,进行A0+offset*N是否等于A1的判断,主要就是实现主内存缓冲区是否还能写入内存访问信息的判断,如果相等,则无法再写入内存访问信息。
S212:所述内存访问记录缓存模块将所述MSR寄存器记录的主内存缓冲区存储标识值设置为第一预设值,并发送主内存缓冲区满的中断信号给CPU,以等待所述CPU处理后将所述主内存缓冲区存储标识值重置为第二预设值。
本实施例中,当A0+offset*N等于A1时,则说明主内存缓冲区已经无空间再写入内存访问信息,则应立即将主内存缓冲区存储标识值设置为第一预设值(true),并发送主内存缓冲区满的中断信号给CPU。CPU收到缓存区满的中断后,可以在中断处理函数中将缓冲区内容转存至磁盘,或者重新分配一块内存。处理完毕后,将Memory Trace Log Full恢复为0。若重新分配了缓冲区,需更新MSR Memory Trace Log Base/MSR Memory Log BufferLimit寄存器。
本实施例提供的一种记录内存访问来源的方法,通过在CPU内部添加硬件模块内存读写记录缓存,用于将访问属于预设的监控内存地址范围的内存访问指令相关信息(包括:内存访问指令的指令地址、目标内存地址、内存访问时的进程页表基地址、内存访问指令的访问类别、CPU标识)进行保存,保存的内存访问来源信息具有全面的特点;同时内存访问记录缓存模块在将内存访问指令相关信息写入主内存缓冲区时,首先根据主内存缓冲区存储标识值判断主内存缓冲区是否为满,不满的时候才进行信息的写入,将有效地提高系统的性能。
基于相同的技术构思,本发明实施例还提供了一种记录内存访问来源的系统,如图5所示,该系统包括:用于执行内存访问指令的内存读写执行模块3,还包括:设置于CPU物理核中的内存访问记录缓存模块1和MSR寄存器2;
MSR寄存器2,用于存储预设的监控内存地址范围以及预设的用于保存内存访问信息的主内存地址范围。具体地,MSR寄存器2包括:第一个寄存器MSR Memory Trace Control寄存器,用于控制本内存核心是否打开内存读写记录追踪;第二个寄存器MSR TracedMemory Base寄存器,用于记录监控内存地址的起始地址;第三个寄存器MSR TracedMemory Limit寄存器,用于记录监控内存地址的结束地址,各MSR寄存器的功能如前所述,此处不再赘述。
优选地,所述预设的监控内存地址范围包括:多块不连续的内存区间分别对应的多个地址范围。相应地,为记录多块不连续的内存区间分别对应的多个地址范围,可以将MSR寄存器2中的MSR Traced Memory Base/MSR Traced Memory Limit扩展为多个,每个MSR Traced Memory Base/MSR Traced Memory Limit别用于记录一块连续的内存区间的监控地址起始地址/结束地址。
内存读写执行模块3,用于在收到内存访问指令时,判断所述内存访问指令所要访问的目标内存地址是否属于MSR寄存器2存储的所述监控内存地址范围,若是,则执行所述内存访问指令访问内存,并向内存访问记录缓存模块1发送本次内存访问信息;所述内存访问信息包括所述内存访问指令的指令地址、目标内存地址以及内存访问时的进程页表基地址。
内存访问记录缓存模块1,用于记录收到的本次内存访问信息,并将记录的内存访问信息按记录时间先后顺序写回所述主内存地址范围对应的主内存缓冲区内。优选地,所述内存访问信息还包括:所述内存访问指令的访问类别、CPU标识;内存访问记录缓存模块1,分别用8字节保存所述指令地址、目标内存地址、内存访问时的页表基地址,且借用8字节的所述指令地址的最高位来记录所述访问类别,借用8字节的所述目标内存地址的最高12bit来记录所述CPU标识。
图6为本发明一种记录内存访问来源的系统实施例二的结构示意图,如图6所示,本实施例在图5所示系统实施例一的结构的基础上,进一步地,内存访问记录缓存模块1,包括:缓存队列13、尾部位置寄存器16、第一判断子模块11、存入子模块12、尾部标识更新子模块15和写回模块14;
缓存队列13,用于记录内存访问信息;
尾部位置寄存器16,用于记录缓存队列13已记录数据的尾部位置标识值;
第一判断子模块11,用于在收到本次内存访问信息时,判断缓存队列13是否已满;
存入子模块12,用于在第一判断子模块11的判断结果为否时,将所述本次内存访问信息存入缓存队列13尾部;
尾部标识更新子模块15,用于在存入子模块12将所述本次内存访问信息存入所述缓存队列尾部后,更新尾部位置寄存器16记录的尾部位置标识值;
写回模块14,用于将缓存队列13记录的内存访问信息按记录时间先后顺序写回主内存缓冲区。
图7为本发明一种记录内存访问来源的系统实施例三的结构示意图,如图7所示,本实施例在图6所示系统实施例二的结构的基础上,进一步地,内存访问记录缓存模块1还包括:头部位置寄存器17,用于记录所述缓存队列已记录数据的头部位置标识值;
写回模块14,包括:
第二判断子模块141,用于判断头部位置寄存器17记录的头部位置标识值是否等于尾部位置寄存器16记录的尾部位置标识值;
写回子模块142,用于在第二判断子模块141的判断结果为否时,将缓存队列13中所述头部位置标识值对应位置的内存访问信息写回所述主内存缓冲区内。
图8为本发明一种记录内存访问来源的系统实施例四的结构示意图,如图8所示,本实施例在图7所示系统实施例三的结构的基础上,进一步地,MSR寄存器2还用于记录主内存缓冲区存储标识值;具体地,所述MSR寄存器2还包括:第四个寄存器MSR Memory TraceLog Base寄存器,用于记录主内存缓冲区的起始地址;第五个寄存器MSR Memory TraceLog Limit寄存器,用于记录主内存缓冲区的结束地址。
图8所示实施例中,写回子模块142,包括:
第一判断单元1426,用于在第二判断子模块141的判断结果为否时,判断所述主内存缓冲区存储标识值是否等于第一预设值;其中,所述主内存缓冲区存储标识值的初始值为第二预设值,所述第一预设值用于表征所述主内存缓冲区已满,所述第二预设值用于表征所述主内存缓冲区未满;
获取单元1425,用于在第一判断单元1426的判断结果为否时,获取所述主内存缓冲区起始地址和已存储的内存访问信息数量;
写回单元1424,用于将缓存队列13中所述头部位置标识值对应位置的内存访问信息写入所述主内存缓冲区内,且写入起始位置为A0+offset*N;其中,所述A0为所述主内存缓冲区起始地址,offset为所述主内存缓冲区已存储的内存访问信息数量,N为所述缓存队列中记录的每条内存访问信息的长度;
第一设置单元1423,用于在写回单元1424将缓存队列13中所述头部位置标识值对应位置的内存访问信息写入所述主内存缓冲区内后,更新所述头部位置寄存器记录的头部位置标识值为head=head+1,并令offset=offset+1;其中,head为所述头部位置寄存器记录的头部位置标识值;
第二判断单元1422,用于判断A0+offset*N是否等于A1;其中,A1为所述主内存缓冲区结束地址;
第二设置单元1421,用于在第二判断单元1422的判断的结果为是时,将MSR寄存器2记录的主内存缓冲区存储标识值设置为第一预设值,并发送主内存缓冲区满的中断信号给CPU,以等待所述CPU处理后将所述主内存缓冲区存储标识值重置为第二预设值。
图9为本发明一种记录内存访问来源的系统实施例五的结构示意图,如图9所示,本实施例在图8所示系统实施例四的结构的基础上,进一步地,所述记录内存访问来源的系统,还包括:进程信息获取模块4;
进程信息获取模块4,包括:
页表基地址读取子模块41,用于读取所述内存访问记录缓存模块1和/或所述主内存缓冲区记录的内存访问信息中的进程页表基地址。
进程队列遍历子模块42,用于遍历操作系统的进程队列,获取与当前读取的进程页表基地址相匹配的进程的进程信息;所述进程信息至少包括进程标识和进程名称。
文件存储子模块43,用于将当前读取的指令地址、目标内存地址、读写类别、CPU标识及匹配到的进程信息对应转存到指定文件中。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random AccessMemory,RAM)等。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。
Claims (14)
1.一种记录内存访问来源的方法,其特征在于,包括:
用于执行内存访问指令的内存读写执行模块在收到内存访问指令时,判断所述内存访问指令所要访问的目标内存地址是否属于预设的监控内存地址范围;其中,所述监控内存地址范围记录在设置于CPU物理核中的MSR寄存器中;
若所述目标内存地址属于预设的监控内存地址范围,则所述内存读写执行模块执行所述内存访问指令,并通过设置于CPU物理核中的内存访问记录缓存模块记录本次内存访问信息;所述内存访问信息包括所述内存访问指令的指令地址、目标内存地址以及内存访问时的进程页表基地址;
所述内存访问记录缓存模块将记录的内存访问信息按记录时间先后顺序写回预设的计算机主内存地址范围对应的主内存缓冲区内;其中,所述主内存地址范围记录在所述MSR寄存器中。
2.根据权利要求1所述的记录内存访问来源的方法,其特征在于,所述内存访问记录缓存模块记录本次内存访问信息,包括:
所述内存访问记录缓存模块判断用于记录内存访问信息的缓存队列是否已满;
若所述缓存队列未满,则所述内存访问记录缓存模块将本次内存访问信息存入所述缓存队列尾部;
所述内存访问记录缓存模块更新所述缓存队列已记录数据的尾部位置标识值。
3.根据权利要求2所述的记录内存访问来源的方法,其特征在于,所述内存访问记录缓存模块将记录的内存访问信息按记录时间先后顺序写回预设的计算机主内存地址范围对应的主内存缓冲区内,包括:
所述内存访问记录缓存模块判断所述缓存队列已记录数据的头部位置标识值是否等于尾部位置标识值;
若所述缓存队列已记录数据的头部位置标识值不等于尾部位置标识值,则所述内存访问记录缓存模块将所述缓存队列中所述头部位置标识值对应位置的内存访问信息写回所述主内存缓冲区内。
4.根据权利要求3所述的记录内存访问来源的方法,其特征在于,所述内存访问记录缓存模块将所述缓存队列中所述头部位置标识值对应位置的内存访问信息写回所述主内存缓冲区内,包括:
所述内存访问记录缓存模块判断所述MSR寄存器记录的主内存缓冲区存储标识值是否等于第一预设值;其中,所述主内存缓冲区存储标识值的初始值为第二预设值,所述第一预设值用于表征所述主内存缓冲区已满,所述第二预设值用于表征所述主内存缓冲区未满;
若所述主内存缓冲区存储标识值不等于第一预设值,则所述内存访问记录缓存模块获取所述主内存缓冲区起始地址和已存储的内存访问信息数量;
所述内存访问记录缓存模块将所述缓存队列中所述头部位置标识值对应位置的内存访问信息写入所述主内存缓冲区内,且写入起始位置为A0+offset*N;其中,所述A0为所述主内存缓冲区起始地址,offset为所述主内存缓冲区已存储的内存访问信息数量,N为所述缓存队列中记录的每条内存访问信息的长度;
所述内存访问记录缓存模块令head=head+1,offset=offset+1;其中,head为所述缓存队列已记录数据的头部位置标识值;
所述内存访问记录缓存模块判断A0+offset*N是否等于A1;其中,A1为所述主内存缓冲区结束地址;
若A0+offset*N等于A1,则所述内存访问记录缓存模块将所述MSR寄存器记录的主内存缓冲区存储标识值设置为第一预设值,并发送主内存缓冲区满的中断信号给CPU,以等待所述CPU处理后将所述主内存缓冲区存储标识值重置为第二预设值。
5.根据权利要求1所述的记录内存访问来源的方法,其特征在于,所述预设的监控内存地址范围包括:多块不连续的内存区间分别对应的多个地址范围。
6.根据权利要求1-5任一项所述的记录内存访问来源的方法,其特征在于,所述内存访问信息还包括:所述内存访问指令的访问类别、CPU标识;
所述内存访问记录缓存模块记录本次内存访问信息,包括:
所述内存访问记录缓存模块分别用8字节保存所述指令地址、目标内存地址、内存访问时的页表基地址,且借用8字节的所述指令地址的最高位来记录所述访问类别,借用8字节的所述目标内存地址的最高12bit来记录所述CPU标识。
7.根据权利要求6所述的记录内存访问来源的方法,其特征在于,在所述内存访问记录缓存模块记录本次内存访问信息之后,所述方法还包括:
通过进程信息获取模块读取记录的内存访问信息中的进程页表基地址;
所述进程信息获取模块遍历操作系统的进程队列,获取与当前读取的进程页表基地址相匹配的进程的进程信息;所述进程信息至少包括进程标识和进程名称;
所述进程信息获取模块将当前读取的指令地址、目标内存地址、读写类别、CPU标识及匹配到的进程信息对应转存到指定文件中。
8.一种记录内存访问来源的系统,包括:用于执行内存访问指令的内存读写执行模块,其特征在于,还包括:设置于CPU物理核中的内存访问记录缓存模块和MSR寄存器;
所述MSR寄存器,用于存储预设的监控内存地址范围以及预设的用于保存内存访问信息的主内存地址范围;
所述内存读写执行模块,用于在收到内存访问指令时,判断所述内存访问指令所要访问的目标内存地址是否属于所述MSR寄存器存储的所述监控内存地址范围,若是,则执行所述内存访问指令访问内存,并向所述内存访问记录缓存模块发送本次内存访问信息;所述内存访问信息包括所述内存访问指令的指令地址、目标内存地址以及内存访问时的进程页表基地址;
所述内存访问记录缓存模块,用于记录收到的本次内存访问信息,并将记录的内存访问信息按记录时间先后顺序写回所述主内存地址范围对应的主内存缓冲区内。
9.根据权利要求8所述的记录内存访问来源的系统,其特征在于,所述内存访问记录缓存模块,包括:缓存队列、尾部位置寄存器、第一判断子模块、存入子模块、尾部标识更新子模块和写回模块;
所述缓存队列,用于记录内存访问信息;
所述尾部位置寄存器,用于记录所述缓存队列已记录数据的尾部位置标识值;
所述第一判断子模块,用于在收到本次内存访问信息时,判断所述缓存队列是否已满;
所述存入子模块,用于在所述第一判断子模块的判断结果为否时,将所述本次内存访问信息存入所述缓存队列尾部;
所述尾部标识更新子模块,用于在所述存入子模块将所述本次内存访问信息存入所述缓存队列尾部后,更新所述尾部位置寄存器记录的尾部位置标识值;
所述写回模块,用于将所述缓存队列记录的内存访问信息按记录时间先后顺序写回主内存缓冲区。
10.根据权利要求9所述的记录内存访问来源的系统,其特征在于,所述内存访问记录缓存模块还包括:头部位置寄存器,用于记录所述缓存队列已记录数据的头部位置标识值;
所述写回模块,包括:
第二判断子模块,用于判断所述头部位置寄存器记录的头部位置标识值是否等于所述尾部位置寄存器记录的尾部位置标识值;
写回子模块,用于在所述第二判断子模块的判断结果为否时,将所述缓存队列中所述头部位置标识值对应位置的内存访问信息写回所述主内存缓冲区内。
11.根据权利要求10所述的记录内存访问来源的系统,其特征在于,所述MSR寄存器还用于记录主内存缓冲区存储标识值;
所述写回子模块,包括:
第一判断单元,用于在所述第二判断子模块的判断结果为否时,判断所述主内存缓冲区存储标识值是否等于第一预设值;其中,所述主内存缓冲区存储标识值的初始值为第二预设值,所述第一预设值用于表征所述主内存缓冲区已满,所述第二预设值用于表征所述主内存缓冲区未满;
获取单元,用于在所述第一判断单元的判断结果为否时,获取所述主内存缓冲区起始地址和已存储的内存访问信息数量;
写回单元,用于将所述缓存队列中所述头部位置标识值对应位置的内存访问信息写入所述主内存缓冲区内,且写入起始位置为A0+offset*N;其中,所述A0为所述主内存缓冲区起始地址,offset为所述主内存缓冲区已存储的内存访问信息数量,N为所述缓存队列中记录的每条内存访问信息的长度;
第一设置单元,用于在所述写回单元将所述缓存队列中所述头部位置标识值对应位置的内存访问信息写入所述主内存缓冲区内后,更新所述头部位置寄存器记录的头部位置标识值为head=head+1,并令offset=offset+1;其中,head为所述头部位置寄存器记录的头部位置标识值;
第二判断单元,用于判断A0+offset*N是否等于A1;其中,A1为所述主内存缓冲区结束地址;
第二设置单元,用于在所述第二判断单元的判断的结果为是时,将所述MSR寄存器记录的主内存缓冲区存储标识值设置为第一预设值,并发送主内存缓冲区满的中断信号给CPU,以等待所述CPU处理后将所述主内存缓冲区存储标识值重置为第二预设值。
12.根据权利要求8所述的记录内存访问来源的系统,其特征在于,所述预设的监控内存地址范围包括:多块不连续的内存区间分别对应的多个地址范围。
13.根据权利要求8-12中任一项所述的记录内存访问来源的系统,其特征在于,所述内存访问信息还包括:所述内存访问指令的访问类别、CPU标识;
所述内存访问记录缓存模块,分别用8字节保存所述指令地址、目标内存地址、内存访问时的页表基地址,且借用8字节的所述指令地址的最高位来记录所述访问类别,借用8字节的所述目标内存地址的最高12bit来记录所述CPU标识。
14.根据权利要求13所述的记录内存访问来源的系统,其特征在于,还包括:进程信息获取模块;
所述进程信息获取模块,包括:
页表基地址读取子模块,用于读取所述内存访问记录缓存模块和/或所述主内存缓冲区记录的内存访问信息中的进程页表基地址;
进程队列遍历子模块,用于遍历操作系统的进程队列,获取与当前读取的进程页表基地址相匹配的进程的进程信息;所述进程信息至少包括进程标识和进程名称;
文件存储子模块,用于将当前读取的指令地址、目标内存地址、读写类别、CPU标识及匹配到的进程信息对应转存到指定文件中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111675383.9A CN114297101A (zh) | 2021-12-31 | 2021-12-31 | 一种记录内存访问来源的方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111675383.9A CN114297101A (zh) | 2021-12-31 | 2021-12-31 | 一种记录内存访问来源的方法及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114297101A true CN114297101A (zh) | 2022-04-08 |
Family
ID=80974766
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111675383.9A Pending CN114297101A (zh) | 2021-12-31 | 2021-12-31 | 一种记录内存访问来源的方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114297101A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114996205A (zh) * | 2022-07-21 | 2022-09-02 | 之江实验室 | 辅助3d架构近存计算系统的片内数据调度控制器及方法 |
CN114996024A (zh) * | 2022-07-29 | 2022-09-02 | 阿里巴巴(中国)有限公司 | 内存带宽监测方法、服务器和计算机可读存储介质 |
CN116881086A (zh) * | 2023-09-05 | 2023-10-13 | 统信软件技术有限公司 | 应用运行时内存监控方法、装置、计算设备及存储介质 |
-
2021
- 2021-12-31 CN CN202111675383.9A patent/CN114297101A/zh active Pending
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114996205A (zh) * | 2022-07-21 | 2022-09-02 | 之江实验室 | 辅助3d架构近存计算系统的片内数据调度控制器及方法 |
CN114996205B (zh) * | 2022-07-21 | 2022-12-06 | 之江实验室 | 辅助3d架构近存计算系统的片内数据调度控制器及方法 |
CN114996024A (zh) * | 2022-07-29 | 2022-09-02 | 阿里巴巴(中国)有限公司 | 内存带宽监测方法、服务器和计算机可读存储介质 |
CN116881086A (zh) * | 2023-09-05 | 2023-10-13 | 统信软件技术有限公司 | 应用运行时内存监控方法、装置、计算设备及存储介质 |
CN116881086B (zh) * | 2023-09-05 | 2023-12-05 | 统信软件技术有限公司 | 应用运行时内存监控方法、装置、计算设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN114297101A (zh) | 一种记录内存访问来源的方法及系统 | |
US7941652B2 (en) | Apparatus and computer program product for implementing atomic data tracing | |
US6442585B1 (en) | Method for scheduling contexts based on statistics of memory system interactions in a computer system | |
JP4371452B2 (ja) | コンピュータメモリシステムにおいて空間的及び時間的サンプリングを行う装置 | |
JP4764360B2 (ja) | メモリ属性を用いるための技術 | |
US6237059B1 (en) | Method for estimating statistics of properties of memory system interactions among contexts in a computer system | |
US6332178B1 (en) | Method for estimating statistics of properties of memory system transactions | |
RU2769785C1 (ru) | Точки останова воспроизведения трассировки на основе кэша, использующие зарезервированные биты поля тега | |
JPH0364890B2 (zh) | ||
US20080148241A1 (en) | Method and apparatus for profiling heap objects | |
EP0574531A4 (en) | CACHE STORAGE SYSTEM AND METHOD. | |
TW201928683A (zh) | 使用記憶體位址定位冷熱存取區間之方法 | |
CN110297787B (zh) | I/o设备访问内存的方法、装置及设备 | |
CN113641596B (zh) | 缓存管理方法、缓存管理装置、处理器 | |
US20220269615A1 (en) | Cache-based trace logging using tags in system memory | |
CA1200319A (en) | Register control processing system | |
CN112612728B (zh) | 缓存管理方法及装置、设备 | |
US20060294334A1 (en) | Statement regarding federally sponsored-research or development | |
US7350025B2 (en) | System and method for improved collection of software application profile data for performance optimization | |
CN115485668A (zh) | 存储器页标记作为基于处理器的执行跟踪的日志记录线索 | |
US20230161678A1 (en) | Classification of different types of cache misses | |
US20230280904A1 (en) | Monitoring memory locations to identify whether data stored at the memory locations has been modified | |
US11989137B2 (en) | Logging cache line lifetime hints when recording bit-accurate trace | |
US11687453B2 (en) | Cache-based trace logging using tags in an upper-level cache | |
US11561896B2 (en) | Cache-based trace logging using tags in an upper-level cache |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |