CN103473319A - 一种热点数据的统计方法 - Google Patents
一种热点数据的统计方法 Download PDFInfo
- Publication number
- CN103473319A CN103473319A CN2013104154697A CN201310415469A CN103473319A CN 103473319 A CN103473319 A CN 103473319A CN 2013104154697 A CN2013104154697 A CN 2013104154697A CN 201310415469 A CN201310415469 A CN 201310415469A CN 103473319 A CN103473319 A CN 103473319A
- Authority
- CN
- China
- Prior art keywords
- data
- variable
- target
- virtual memory
- address
- 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.)
- Granted
Links
Images
Landscapes
- Devices For Executing Special Programs (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种热点数据的统计方法,该方法步骤包括:通过识别数据段类型提取出静态分配变量的各项信息,并组织成第一定义表结构供链接器加载;链接器通过定义数据结构来加载第一定义表,并在储存地址分配阶段基于文件名、变量名依次与数据结构中各级进行匹配,当匹配成功时,将变量子元素被分配的首地址记录在数据结构的表项中,最终输出第二定义表,第二定义表包括用于表示目标变量总数的参数;处理器模型在运行时加载第二定义表,并根据所述第二定义表中的目标变量总数创建相应个数的全局计数器,所述各全局计数器分别用于记录目标变量被访问的次数;根据各个全局计数器,获取各目标变量的访问频度。本发明实现简单、便于移植。
Description
技术领域
本发明涉及程序性能分析技术,尤其涉及一种热点数据的统计方法。
背景技术
程序运行时并非均衡的对每个函数、数组进行访问,约80%的运行时间花在20%的代码中。嵌入式平台上的存储资源有限,对热点数据分布的统计是为了将访问频度较高的函数、数组尽可能存储与访问速度更快的片上存储。
集成开发环境(Integrated Development Environment,IDE)是用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面工具。集成了代码编写功能、分析功能、编译功能、调试功能等一体化的开发软件服务套。
现有的集成开发环境,如微软的Visual Studio系列等,它们运行的底层硬件平台均提供了用于程序性能数据反馈的专用指令,并依托于编译器对目标源程序进行代码插桩(Code Instrumentation),然后依托处理器硬件平台的计算完成对热点数据的统计。
现有技术的热点数据统计方法的不足之处在于:
1、依赖于处理器硬件平台的支持;
2、评估热点数据的粒度并未细分至每个数组元素。
发明内容
本发明的目的是为了解决上述现有技术存在的不足之处,提供了一种实现简单、便于跨平台移植的热点数据统计方法。
为实现上述目的,本发明提供了一种热点数据的统计方法,该方法包括以下步骤:
通过识别数据段类型提取出静态分配变量的各项信息,并组织成第一定义表结构供链接器加载;
链接器通过定义数据结构来加载所述第一定义表,并在储存地址分配阶段基于文件名、变量名依次与所述数据结构中各级进行匹配,当匹配成功时,将变量子元素被分配的首地址记录在所述数据结构的表项中,最终输出第二定义表,所述第二定义表包括用于表示目标变量总数的参数;
处理器模型在运行时加载所述第二定义表,并根据所述第二定义表中的目标变量总数创建相应个数的全局计数器,所述各全局计数器分别用于记录目标变量被访问的次数;
根据各全局计数器,获取各目标变量的访问频度。
本发明实现简单、不依赖于硬件平台、可完成对数组元素的独立评估。
附图说明
图1为本发明实施例提供的一种热点数据统计方法流程图;
图2为针对强制类型转换的处理流程图。
具体实施方式
下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。
本发明实施例是在处理器模型的基础上讨论如何统计热点数据。应用程序对存储资源的申请通常是靠编译器静态分配和程序员从内存的堆空间中动态申请,其中动态数组的大小只有在运行时(Run-Time)可知,且伴随着动态释放的过程,很难结合静态数据进行分析。因此,热点数据通常是对应用程序执行时访问频度较高的全局或局部static类型的变量、静态分配数组的分析。进行热点数据分析时,尽管可在编译器前端获取目标数组、变量的名称、所在文件名等信息,但它们的存储地址只能在链接期确定,因此,本发明实施例将对目标数据信息的提取放在汇编期与链接期,未初始化的全局、局部静态变量、数组被分配在第一数据段,例如.bss段,已初始化的局部、全局静态变量、数组被分配在第二数据段,例如.data段,而被const修饰的只读数据和初始化字符串被分配在第三数据段,例如,.rodata段,它们的汇编格式如下所示。
程序并不一定连续访问变量或数组内的各元素,评估热点数据时,本发明实施例统计了应用程序对包含n个元素的数组中每个元素i(0<=i<n-1)的访问次数f(i),最后求取各元素的访问期望值作为评估依据,评估数据热点度的公式如下:
其中,f(i)为元素i被访问次数
图1为本发明实施例提供的一种热点数据统计方法流程图,为了更客观的分析应用程序对静态变量、数组的访问频率,通常对同一个可执行文件施加多组数据激励,步骤1~7详细描述了整个操作流程以及各关键技术要点。
1、针对应用程序特性提供多套数据激励,如Mp3Decoder程序中可提供不同格式、采样率不一致的音频文件;
2、汇编器的语义分析前段按照指定语法格式,通过识别.data、.bss、.rodata等关键字,提取出静态分配变量的各项信息,并组织成第一定义表结构供后续阶段加载。在程序设计中,静态变量的数据类型不仅可以是整型,也可以是由用户定义的结构体或者联合体。结构体中一般由多种、多个子数据类型组成。如下表所示,结构体变量Sample变量有四个子元素{a,b,c,d},数据类型依次是{int,short,short,char},在编译后生成的汇编代码中它们的类型依次为{.long,.short,.short,.byte},在可执行文件中用于访问他们的模式以及内存读取的字节数分别为{{ldw,4},{ldh,2},{ldh,2},{ldb,1}}。
本发明实施例是通过在处理器模型中对虚拟内存系统进行标记完成对热点数据的统计,然而,虚拟内存系统中是以字节为单位,为了避免统计过程中出现漏记或多记,需要严格的分析变量中子元素的类型,这就导致多层次定义表的出现,预处理表的结构如下所示,<Start>:<End>代表全部文件结构,File Num代表整个应用程序中包含静态分配变量的文件数。<Head>:<Tail>代表一个汇编文件的组织结构,其中File Name是用于存储目标变量所在文件名的字符串,Total Num代表文件内目标变量的个数。<BegVar>:<EndVar>代表一个目标变量的组织结构,其中Var Name是用于存储目标变量名称的字符串,Section代表目标变量所在段的名称,且Section∈{Data,Bss,Rodata},Var Num代表目标变量中元素个数。<Set>代表目变量中具体子元素的属性,其中Type代表子元素所占据的字节数,且Type∈{Byte,Short,Long},Number则是为了压缩存储空间用,即如果连续的Number个子元素的类型一致,它的值默认为1,以文件main.c中变量Sample_为例,它对应的表结构如下所示。
3、链接器定义了如下数据结构来加载汇编期生成的第一定义表Var.def,其中,结构体File Table定义了文件级所需的参数信息,File Name用于存储文件名,Var Table_是用于存储本发明件中存在的目标变量表;结构体Var Table中定义了目标变量表中各表项的信息,Var Name用于存储变量名,SecType_用于存储目标变量所在段名称,Set Table_是存储了变量中各子元素的表;结构体Set Table定义了子元素的各项信息,Addr代表内存分配完成后的存储空间地址,Number代表连续同数据类型的子元素个数,Data Type_代表子元素的数据类型,链接器对预处理表Var.def的加载伪代码如下所示。
4、链接器加载第一定义表Var.def成功后,开始执行基础功能并在储存地址分配阶段基于文件名、变量名依次与File Table_中各级进行匹配。当匹配成功时,将变量子元素被分配的首地址记录在Set Table_的Addr表项中,最终以第二定义表,例如Set.def表结构输出。该表相比于Var.def表,只保留Set表项,其中Addr代表子元素存储首地址,Idx代表Set表项对应静态变量的索引值,Name代表变量名。Total Set中的Total Num则代表目标变量的总数。
5、处理器模型按照步骤4中表的加载方法,在运行时加载已生成的Set.def表,并根据Set.def表中的参数Total Num,动态创建Total Num个unsigned int型指针:
unsigned int**VarCount=new unsigned int*[TotalNum];
{*(VarCount[i])|i=0,…,Total Num-1}代表目标变量i的全局计数器,各Set表项的信息存储于Set Table中。然后,当处理器模型加载完成可执行ELF文件、数据激励后开始对虚拟内存系统进行标记,二级虚拟内存中数据存储的数据结构定义如下,info为存储的数据,Data Type_对应子元素的数据类型,Var Count对应于全局计数器,标记的过程等价于对数据结构中Var Count变量赋值,具体过程如下:
(1)、读取{Set Table[i]|i=0,…Total Num-1}中各项的Addr值;
(2)、计算虚拟内存系统中起始页号SPageIdx=SetTable[i].Addr>>mem_blok_bit_width,以及虚拟内存索引SPageAddr=SetTable[i].Addr&(0xFFFF);
(3)、计算终止页号EPageIdx=(SetTable[i].Addr+SetTable[i].Number*SetTable[i].Type)>>mem_blok_bit_width,以及虚拟内存索引EPageAddr=SetTable[i].Addr&(0xFFFF);
(4)、初始化SetTable[i].Number个虚拟内存单元{Dmem[SPageIdx][SPageAddr],…,Dmem[EPageIdx][EPageAddr]}的值为VarCount[i],该过程中只需标记各元素在虚拟内存中的首地址;
(5)程序设计中强制类型转换的存在是不可避免的,对底层编译系统而言,这不外乎是内存读取模式的变化,一般分为(a)读取多字节变量中部分字节,(b)以小字节变量为起始地址读取多字节。然而,本发明实施例为了节省处理器模型过度的占用PC机的存储资源,仅仅对目标变量中各子元素的首地址进行标记,因此,在计数过程中需提供额外的算法支持。假设目标处理器平台是32位的,数据读取支持1字节、2字节以及4字节读取。为了处理模式(a)和模式(b),内存访问过程中对每个字节向低地址空间依次判断1字节,2字节,4字节的首地址上是否被标记,是否已存在同一子元素内的其它字节后将对应的全局计数器加1。
6、运行过程中根据获取的全局计数器指针,进行累计,直到程序运行结束,计算过程为*(VarCount[i])++;
7、根据数据访问频度公式的要求,求取各目标变量的访问频度。
本发明实施例实现简单、不依赖于硬件平台、可完成对数组元素的独立评估,以及对语句块执行时间的评估。
显而易见,在不偏离本发明的真实精神和范围的前提下,在此描述的本发明可以有许多变化。因此,所有对于本领域技术人员来说显而易见的改变,都应包括在本权利要求书所涵盖的范围之内。本发明所要求保护的范围仅由所述的权利要求书进行限定。
Claims (8)
1.一种热点数据的统计方法,其特征在于:
通过识别数据段类型提取出静态分配变量的各项信息,并组织成第一定义表结构供链接器加载;
链接器通过定义数据结构来加载所述第一定义表,并在储存地址分配阶段基于文件名、变量名依次与所述数据结构中各级进行匹配,当匹配成功时,将变量子元素被分配的首地址记录在所述数据结构的表项中,最终输出第二定义表,所述第二定义表包括用于表示目标变量总数的参数;
处理器模型在运行时加载所述第二定义表,并根据所述第二定义表中的目标变量总数创建相应个数的全局计数器,所述各全局计数器分别用于记录目标变量被访问的次数;
根据各个全局计数器,获取各目标变量的访问频度。
2.根据权利要求1所述的方法,其特征在于,根据各个全局计数器,获取各目标变量的访问频度步骤包括:
通过各个全局计数器,获取具体数组中各元素的访问次数;
根据所述数组别中各元素的访问次数求取各元素的访问频度,并作为热点数据的评估依据。
4.根据权利要求1所述的方法,其特征在于,当所述处理器模型加载所述第二定义表后生成可执行文件,并在数据激励后对虚拟内存系统进行目标数据标记。
5.根据权利要求4所述的方法,其特征在于,所述对虚拟内存系统进行目标数据标记是针对目标变量中各子元素的首地址进行标记。
6.根据权利要求4所述的方法,其特征在于,所述对虚拟内存系统进行目标数据标记步骤包括:
读取数据结构体中各子元素存储的首地址;
计算虚拟内存系统中起始页号,以及虚拟内存索引值;
计算虚拟内存系统中终止页号,以及虚拟内存索引值;
标记各子元素在所述虚拟内存中的首地址。
7.根据权利要求1所述的方法,其特征在于,所述数据段类型包括用于定义未初始化的全局、局部静态变量的第一数据段、用于定义己初始化的全局、局部静态变量的第二数据段和用于定义只读数据和初始化字符串的第三数据段。
8.根据权利要求1至7中任一权利要求所述的方法,其特征在于:该方法在模拟执行平台上运行,所述模拟执行平台是针对各种体系结构处理器的模拟器。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310415469.7A CN103473319B (zh) | 2013-09-12 | 2013-09-12 | 一种热点数据的统计方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310415469.7A CN103473319B (zh) | 2013-09-12 | 2013-09-12 | 一种热点数据的统计方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103473319A true CN103473319A (zh) | 2013-12-25 |
CN103473319B CN103473319B (zh) | 2017-02-15 |
Family
ID=49798167
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310415469.7A Expired - Fee Related CN103473319B (zh) | 2013-09-12 | 2013-09-12 | 一种热点数据的统计方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103473319B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107016015A (zh) * | 2016-10-08 | 2017-08-04 | 阿里巴巴集团控股有限公司 | 业务数据汇总方法及其系统 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6873934B1 (en) * | 2000-06-29 | 2005-03-29 | Microsoft Corporation | Performance markers to measure benchmark timing of features in a program |
CN1783009A (zh) * | 2004-12-03 | 2006-06-07 | 中国科学院计算技术研究所 | 一种汇编代码热函数中的热路径搜寻方法 |
US20080126339A1 (en) * | 2006-11-29 | 2008-05-29 | American Express Travel Related Services Company, Inc. | System and method for managing simulation models |
CN101477472A (zh) * | 2009-01-08 | 2009-07-08 | 上海交通大学 | 动态二进制翻译器中热路径的多核多线程构建方法 |
CN102156631A (zh) * | 2011-04-27 | 2011-08-17 | Tcl集团股份有限公司 | 程序设计语言中管理指针的方法及系统 |
CN103136107A (zh) * | 2011-12-03 | 2013-06-05 | 南京南瑞继保电气有限公司 | 一种嵌入式程序动态分配内存的变量调试方法 |
CN103178989A (zh) * | 2013-02-18 | 2013-06-26 | 中兴通讯股份有限公司 | 访问热度统计方法及装置 |
CN103282890A (zh) * | 2011-01-12 | 2013-09-04 | 松下电器产业株式会社 | 程序执行装置以及编译器系统 |
-
2013
- 2013-09-12 CN CN201310415469.7A patent/CN103473319B/zh not_active Expired - Fee Related
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6873934B1 (en) * | 2000-06-29 | 2005-03-29 | Microsoft Corporation | Performance markers to measure benchmark timing of features in a program |
CN1783009A (zh) * | 2004-12-03 | 2006-06-07 | 中国科学院计算技术研究所 | 一种汇编代码热函数中的热路径搜寻方法 |
US20080126339A1 (en) * | 2006-11-29 | 2008-05-29 | American Express Travel Related Services Company, Inc. | System and method for managing simulation models |
CN101477472A (zh) * | 2009-01-08 | 2009-07-08 | 上海交通大学 | 动态二进制翻译器中热路径的多核多线程构建方法 |
CN103282890A (zh) * | 2011-01-12 | 2013-09-04 | 松下电器产业株式会社 | 程序执行装置以及编译器系统 |
CN102156631A (zh) * | 2011-04-27 | 2011-08-17 | Tcl集团股份有限公司 | 程序设计语言中管理指针的方法及系统 |
CN103136107A (zh) * | 2011-12-03 | 2013-06-05 | 南京南瑞继保电气有限公司 | 一种嵌入式程序动态分配内存的变量调试方法 |
CN103178989A (zh) * | 2013-02-18 | 2013-06-26 | 中兴通讯股份有限公司 | 访问热度统计方法及装置 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107016015A (zh) * | 2016-10-08 | 2017-08-04 | 阿里巴巴集团控股有限公司 | 业务数据汇总方法及其系统 |
Also Published As
Publication number | Publication date |
---|---|
CN103473319B (zh) | 2017-02-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP2487585B1 (en) | Method and device for dynamically loading relocatable file | |
TWI577539B (zh) | 用於運行時間系統的電腦實施方法、電腦可讀取儲存記憶體及系統 | |
JP6275819B2 (ja) | ユーザに指向されかつプロファイル主導の最適化用のフレームワーク | |
US8578339B2 (en) | Automatically adding bytecode to a software application to determine database access information | |
US8656377B2 (en) | Tracking variable information in optimized code | |
US20050246685A1 (en) | Object oriented ADN and method of converting a non-object oriented computer language to an object oriented computer language | |
US10614227B2 (en) | Method and system for identifying functional attributes that change the intended operation of a compiled binary extracted from a target system | |
US9558096B2 (en) | Method and apparatus for supporting performance analysis | |
KR20080047444A (ko) | 확장 가능한 메타 데이터 | |
CN109086215B (zh) | 一种嵌入式软件单元测试用例生成方法及系统 | |
CN110019111B (zh) | 数据处理方法、装置、存储介质以及处理器 | |
CN115328454A (zh) | 程序编译和程序加载方法 | |
CN105224309A (zh) | 一种调取函数的方法和装置 | |
JP5465358B2 (ja) | データベース化された共有メモリを利用した工学的分析用プログラム間の同期化された連係方法及びシステム | |
CN111880801A (zh) | 应用程序动态化方法、装置、电子设备 | |
CN116991381A (zh) | 一种应用交叉编译方法、装置、计算设备及存储介质 | |
CN112905443A (zh) | 一种测试用例生成方法、设备及存储介质 | |
CN103473319A (zh) | 一种热点数据的统计方法 | |
KR20180098584A (ko) | App 프로그램 실행 방법 및 장치 | |
JP6717140B2 (ja) | 解析プログラム、解析方法、及び解析装置 | |
CN114706586A (zh) | 代码编译、代码运行方法、装置、计算机设备及存储介质 | |
CN114168122A (zh) | 数据脚本的生成方法及装置 | |
Hadri et al. | Software usage on Cray systems across three centers (NICS, ORNL and CSCS) | |
JP3266097B2 (ja) | 非リエントラントプログラムの自動リエントラント化方法及びシステム | |
CN105653252A (zh) | 一种linux下扩展select模型管理能力的方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20170215 Termination date: 20200912 |
|
CF01 | Termination of patent right due to non-payment of annual fee |