CN109918074B - 编译链接优化方法 - Google Patents

编译链接优化方法 Download PDF

Info

Publication number
CN109918074B
CN109918074B CN201711294532.0A CN201711294532A CN109918074B CN 109918074 B CN109918074 B CN 109918074B CN 201711294532 A CN201711294532 A CN 201711294532A CN 109918074 B CN109918074 B CN 109918074B
Authority
CN
China
Prior art keywords
sym
key
symbol
function
marked
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.)
Active
Application number
CN201711294532.0A
Other languages
English (en)
Other versions
CN109918074A (zh
Inventor
孟杰
薛皓琳
马瑶瑶
卢彦
杨建生
张蓓
方平
冯艳红
穆鹤林
程毅轩
杨晓璇
吴昆鹏
李洪彬
申利飞
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
China Standard Software Co Ltd
Original Assignee
China Standard Software Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by China Standard Software Co Ltd filed Critical China Standard Software Co Ltd
Priority to CN201711294532.0A priority Critical patent/CN109918074B/zh
Publication of CN109918074A publication Critical patent/CN109918074A/zh
Application granted granted Critical
Publication of CN109918074B publication Critical patent/CN109918074B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Devices For Executing Special Programs (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明涉及一种编译链接优化方法,其利用GNU开源编译链接工具BINUTILS的链接器LD的地址空间分配功能、符号决议功能以及重定位功能,对链接器的链接功能进行优化,并且,优化的功能包括符号表建立功能、查找功能以及链接过程中的查询功能。本发明提供的编译链接优化方法,克服了编译链接速度慢的缺陷,可降低链接时内存占用率,从而达到提升编译链接速度、节省时间成本、提高生产效率的目的。

Description

编译链接优化方法
技术领域
本发明涉及计算机软件程序运行技术领域,具体涉及一种编译链接优化方法。
背景技术
GNU工具链在Linux***中的作用重大,编译链接占有重要比例。近些年,Linux***迅速发展,随着计算机技术的不断发展,越来越多的个人和企业开始大量使用Linux***,各种应用程序的种类不断增加,程序功能不断发生变化,变的愈加多样和复杂,这样的现象导致了程序代码量的急剧增加和模块的增加,同时也给程序的编译链接带来了极大的负担。编译集成过程中,模块的增加导致了二进制目标文件的增加,直接导致需要链接的符号大量增加,这样的数量级将会占用大量***资源,严重拖慢***的运行速度,所以将引入一种大数据的查询处理方式,以解决链接带来的问题。
原有的链接器使用了hash算法。hash算法就是将任一给定长度的数据(字符或数值等)通过给定函数映射为较短的、固定长度的数值,这个数值被称为hash值,这个数值便作为索引。hash表是通过给定的hash函数H(key)和处理冲突方法将一组关键字映射到一个已申请好的内存空间上,H(key)作为给定关键字在内存空间中的存储位置,这部分内存空间被称为hash表或散列,所得存储位置称为hash地址或散列地址。作为线性数据结构与表格和队列等相比,hash表无疑是查找速度比较快的一种。
整个链接过程中,符号表的建立、查找部分最为耗时,主要在于对符号表的建立、查找定位方面的消耗,数量稍小一点的目标文件无法察觉到这方面的消耗,但是如果面临上百个目标文件的链接,而每个目标文件又包括上百个(不止)需要链接的符号时,这样的数量级将会暴露龙芯平台硬件方面的不足。如果在这样的数量级或更高的数量级下继续使用链接器现有的hash算法,将会暴露hash算法的重要缺陷,就是空间效率低下,也就是说当在更高数量级的情况下,将会产生hash冲突,为解决hash冲突,就要开拓更多的内存;链接器现在使用的hash算法将占用更大的内存,在此期间对***速度影响非常大,极易导致***卡顿,链接导致的***资源被大量占用对***的影响已经不容忽视。
发明内容
为解决现有技术存在的不足,本发明提供了一种编译链接优化方法,利用GNU开源编译链接工具BINUTILS的链接器LD的地址空间分配功能、符号决议功能以及重定位功能,对链接器的链接功能进行优化,并且,优化的功能包括符号表建立功能、查找功能以及链接过程中的查询功能。
其中,所述符号表建立功能的优化为创建GL_KV符号表。
其中,符号表建立功能的优化中,通过下述步骤创建GL_KV符号表:
步骤S1:分别收集GNU库符号和基本图形库符号;
步骤S2:将步骤S1中收集的符号的符号名输入布隆过滤器;
步骤S3:将布隆过滤器的输出作为索引算法的输入,确定符号在符号表中的位置;
步骤S4:将符号信息写入符号表。
其中,还包括:
步骤S5:如果经索引算法计算后发现有重复,则另填一张表存放数据,是否重复由GL_KV_sym->rep->sym_r确定;
所述步骤S3中,索引算法为Hash索引算法;
并且,所述步骤S3-步骤S4中,布隆过滤器通过多个hash函数得出了多个值,以这多个值为索引来标记GL_KV位数组,同时以该多个值作为hash索引算法的输入,得出各个符号在GL_KV表中的位置,将符号信息写入GL_KV表中。
其中,所述查找功能的优化,通过下述步骤完成:
步骤SA:建立一个针对GL_KV符号的查询表;
步骤SB:输入sym_key,通过布隆过滤器定位相应的sym_key是否存在于查询表中;
步骤SC:若不存在,则反馈查找失败;若存在,则执行步骤SD;
步骤SD:判断所查找的sym_key是否为flase positive的,若是,则反馈查找失败,若不是,则反馈查找成功。
其中,所述步骤SB中,布隆过滤器由多个hash函数及一个位数组组成,并且,所述步骤SD中,通过GL_KV_sym->sym_key的值来判断所查找的sym_key是否是flase positive。
其中,所述链接过程中的查询功能优化,通过下述步骤完成:
步骤Sa:分别建立一个针对OL_KV符号及GL_KV符号的查询表;
步骤Sb:输入sym_key;
步骤Sc:确定针对OL_KV符号的查询表中是否存在符合要求的经标记的sym_key,若存在,则标记其存在;
步骤Sd:确定针对GL_KV符号的查询表中是否存在符合要求的经标记的sym_key,若存在,也标记其存在;
步骤Se:若经过步骤Sc及步骤Sd,两个查询表中均不存在符合要求的经标记的sym_key,则报错;
若两个查询表中有一个存在标记的sym_key,则使用该sym_key对应的sym_value;
若两个查询表中均存在标记的sym_key,则比较强弱,若两个查询表中的标记的sym_key均为强符号,则报错,若两个查询表中的标记的sym_key有一个为强符号,则选择强符号对应的sym_value。
其中,所述步骤Sc包括:
步骤Sc1:通过布隆过滤器定位相应的sym_key是否存在于针对OL_KV符号的查询表中;若不存在,则执行步骤Sd,若存在,则执行步骤Sc2;
步骤Sc2:判断相应的sym_key是否为flase positive的sym_key,若不是,则标记此sym_key,得到标记的sym_key并执行步骤Sd;若是,则执行步骤Sc3;
步骤Sc3:查询重复数据中是否有此sym_key,若有,则标记此sym_key,得到标记的sym_key并执行步骤Sd;若无,则直接执行步骤Sd。
其中,所述步骤Sd包括:
步骤Sd1:通过布隆过滤器定位相应的sym_key是否存在于针对GL_KV符号的查询表中;若不存在,则执行步骤Se,若存在,则执行步骤Sd2;
步骤Sd2:判断相应的sym_key是否为flase positive的sym_key,若不是,则标记此sym_key,得到标记的sym_key并执行步骤Se;若是,则执行步骤Sd3;
步骤Sd3:查询重复数据中是否有此sym_key,若有,则标记此sym_key,得到标记的sym_key并执行步骤Se;若无,则直接执行步骤Se。
其中,所述步骤Sa中,针对OL_KV符号及GL_KV符号的查询表由多个hash函数及一个位数组组成的布隆过滤器和一个hash索引算法计算得出。
本发明提供的编译链接优化方法,克服了编译链接速度慢的缺陷,可降低链接时内存占用率,从而达到提升编译链接速度、节省时间成本、提高生产效率的目的。
附图说明
图1:本发明的符号建立功能优化实现流程;
图2:本发明的查找功能优化实现流程;
图3:本发明的链接过程中的查询功能优化实现流程。
具体实施方式
为了对本发明的技术方案及有益效果有更进一步的了解,下面结合附图详细说明本发明的技术方案及其产生的有益效果。
本发明的编译链接优化方法,其主要发明构思在于利用GNU开源编译链接工具BINUTILS的链接器LD的地址空间分配、符号决议和重定位等功能,对链接器的链接功能进行优化。将符号建立、查找和重定位功能的算法全部进行改进,舍弃原先普通的hash算法,转而使用布隆过滤器,并将GNU组件的库和基本图形的库所能提供的符号进行维护,全面提升编译链接阶段的速度,以软件方式解决硬件的桎梏。
具体的,如图1-图3所示,分别为本发明的编译链接优化方法所对应的符号建立功能优化、查找功能优化以及链接过程中的查询功能优化的实现流程。
首先,请参阅图1所示,为本发明的符号建立功能优化的实现流程,在进行编译链接优化时,首先使GNU组件维护一个GNU工具链和基本图形库所能提供的最基础的符号表,这个符号表主要有符号名、符号值(地址)、类型、所在文件、同名符号数等,符号作为key,地址作为value,这个表项是对***struct Elfxx_Sym(xx可以是64,也可以是32)这个结构体的一个扩展。这个表目前只作为编译链接使用,所以并不会常驻内存,不需要担心这个表对***会造成什么负担。这个表定名为GL_KV(G:GNU,L:链接器,K:key,V:value),表项为GL_KV_sym,这些数据保存在一个数据文件中。本发明的一实施例中,GL_KV的大致结构如下:
Figure BDA0001500034910000061
Figure BDA0001500034910000071
创建GL_KV符号表数据文件的步骤:
(1)分别收集GNU库符号和基本图形库符号;
(2)将上述收集的符号集中的符号名作为布隆过滤器的输入;
(3)将布隆过滤器的输出作为索引算法的输入,确定符号在数据文件中的位置;
(4)将符号信息写入符号表中;
(5)如果有索引算法后发现有重复,则另建立一张表存放数据,是否有重复则由GL_KV_sym->rep->sym_r确定。
然后,请参阅图2所示,为本发明的查找功能优化的实现流程,查找功能优化中,用n个hash函数和一个位数组组成一个查询表,这个查询表(就是这个位数组)专门针对于GL_KV这个表,用于对GL_KV这个表进行查询操作;使用布隆过滤器可以迅速定位sym_key相对应的sym_value是否存在,并使用hash[0](...),...,hash[n-1](...)作为索引算法的因子,迅速确定sym_value的值。其中,考虑到布隆过滤器的使用将带来的“false positive”的结果,这样的概率虽然非常的小,但是对于链接过程,这样的错误却是非常的致命,所以结果则由GL_KV_sym->sym_key的值(如下述代码所示)来判断是否是“false positive”的sym_value,这样既消除了布隆过滤器“false positive”所带来的影响,也保证了布隆过滤器在链接过程中使用方面的正确性。
if(Del_FP(Get_S_K(key),Get_S_K(gl_sym_key)))
goto F_Positon;
else{
...
}
最后,请参阅图3所示,为本发明的链接过程中的查询功能优化的实现流程,在进行链接的过程中,动辄几百个目标文件的链接也采取相同的方式进行查询,首先建立一张OL_KV(O:目标文件,L:链接)的表(如下代码所示)。
Figure BDA0001500034910000081
使用n个hash函数和一个位数组组成一个查询表专门针对于OL_KV,用于对OL_KV表进行查询操作,使用hash[0](...),...,hash[n-1](...)作为索引算法的因子,确定sym_value的值,完成对符号的重定位及地址的修正。为了避免布隆过滤器带来的“falsepositive”造成的影响,使用OL_KV->sym_key来保证正确性。建立表时,就对同名符号进行判定,如果有强弱符号之分,则使用强符号;如果都是弱符号,则统一标记为0,最后显示查找失败;如果都是强符号,则立刻报错,同样显示查找失败。
具体的,在链接过程中,将涉及到许多同名符号。链接时,在对key进行查询的过程中,首先查找OL_KV表,查看是否存在该key,如果存在,将此符号进行标记;然后再查询GL_KV这张表,查询该key是否存在,如果存在,则与OL_KV表中的符号进行比较,哪个是强符号,都是强符号,则报错,其中有一个是强符号,选择强符号;如果GL_KV和OL_KV表中均不存在key,则报错,如果二者中只存在一个key,则使用这个key对应的value。
注:OL_KV的建立方式和GL_KV的建立方式相同
Figure BDA0001500034910000091
Figure BDA0001500034910000101
本发明提供的编译链接优化方法,克服了编译链接速度慢的缺陷,可降低链接时内存占用率,从而达到提升编译链接速度、节省时间成本、提高生产效率的目的。
本发明提供的编译链接优化方法,可适用于多种软件平台下的编译链接的优化,尤其适用于龙芯平台下的编译链接。
本发明中,所谓的“链接器”,是指GNU开源编译链接工具BINUTILS的链接器LD,用于将许多目标二进制文件链接成一个可执行二进制文件。
本发明中,所谓的“GNU工具链”,是在每一个大型开放源码项目(包括Linux内核本身)背后默默支撑的力量。它们由一组必要的工具和软件构成,用于编译和调试从最小的工具软件到最复杂的具有Linux内核特征的各种软件。
本发明中,所谓的“hash算法”,又称为散列算法,它是一种单向密码体制,即它是一个从明文到密文的不可逆的映射,只有加密过程,没有解密过程。
本发明中,所谓的“布隆过滤器”,是指一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中,它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难,这样的误识别就被称为false positive。
虽然本发明已利用上述较佳实施例进行说明,然其并非用以限定本发明的保护范围,任何本领域技术人员在不脱离本发明的精神和范围之内,相对上述实施例进行各种变动与修改仍属本发明所保护的范围,因此本发明的保护范围以权利要求书所界定的为准。

Claims (4)

1.一种编译链接优化方法,其特征在于:利用GNU开源编译链接工具BINUTILS的链接器LD的地址空间分配功能、符号决议功能以及重定位功能,对链接器的链接功能进行优化,并且,优化的功能包括符号表建立功能、查找功能以及链接过程中的查询功能;
GNU组件维护一个GNU工具链和基本图形库所能提供的基础的符号表,所述符号表包括符号名、符号值或地址、类型、所在文件、同名符号数,符号作为key,地址作为value,所述符号表的符号名为GL_KV,其中:G:GNU,L:链接器,K:key,V:value,表项为GL_KV_sym,所述符号表建立功能的优化为创建GL_KV符号表,所述创建GL_KV符号表包括以下步骤:
步骤S1:分别收集GNU库符号和基本图形库符号;
步骤S2:将步骤S1中收集的符号的符号名输入布隆过滤器;
步骤S3:将布隆过滤器的输出作为索引算法的输入,确定符号在符号表中的位置;
步骤S4:将符号信息写入符号表;
所述查找功能的优化,通过下述步骤完成:
步骤SA:建立一个针对GL_KV符号的查询表;
步骤SB:输入sym_key,通过布隆过滤器定位相应的sym_key是否存在于查询表中;
步骤SC:若不存在,则反馈查找失败;若存在,则执行步骤SD;
步骤SD:判断所查找的sym_key是否为flase positive的,若是,则反馈查找失败,若不是,则反馈查找成功;
所述链接过程中的查询功能优化,通过下述步骤完成:
步骤Sa:分别建立一个针对OL_KV符号及GL_KV符号的查询表,其中O:目标文件;
步骤Sb:输入sym_key;
步骤Sc:确定针对OL_KV符号的查询表中是否存在符合要求的经标记的sym_key,若存在,则标记其存在;
步骤Sd:确定针对GL_KV符号的查询表中是否存在符合要求的经标记的sym_key,若存在,也标记其存在;
步骤Se:若经过步骤Sc及步骤Sd,两个查询表中均不存在符合要求的经标记的sym_key,则报错;
若两个查询表中有一个存在标记的sym_key,则使用该sym_key对应的sym_value;
若两个查询表中均存在标记的sym_key,则比较强弱,若两个查询表中的标记的sym_key均为强符号,则报错,若两个查询表中的标记的sym_key有一个为强符号,则选择强符号对应的sym_value。
2.如权利要求1所述的编译链接优化方法,其特征在于:所述步骤Sc包括:
步骤Sc1:通过布隆过滤器定位相应的sym_key是否存在于针对OL_KV符号的查询表中;若不存在,则执行步骤Sd,若存在,则执行步骤Sc2;
步骤Sc2:判断相应的sym_key是否为flase positive的sym_key,若不是,则标记此sym_key,得到标记的sym_key并执行步骤Sd;若是,则执行步骤Sc3;
步骤Sc3:查询重复数据中是否有此sym_key,若有,则标记此sym_key,得到标记的sym_key并执行步骤Sd;若无,则直接执行步骤Sd。
3.如权利要求1所述的编译链接优化方法,其特征在于:所述步骤Sd包括:
步骤Sd1:通过布隆过滤器定位相应的sym_key是否存在于针对GL_KV符号的查询表中;若不存在,则执行步骤Se,若存在,则执行步骤Sd2;
步骤Sd2:判断相应的sym_key是否为flase positive的sym_key,若不是,则标记此sym_key,得到标记的sym_key并执行步骤Se;若是,则执行步骤Sd3;
步骤Sd3:查询重复数据中是否有此sym_key,若有,则标记此sym_key,得到标记的sym_key并执行步骤Se;若无,则直接执行步骤Se。
4.如权利要求1所述的编译链接优化方法,其特征在于:所述步骤Sa中,针对OL_KV符号及GL_KV符号的查询表由多个hash函数及一个位数组组成的布隆过滤器和一个hash索引算法计算得出。
CN201711294532.0A 2017-12-08 2017-12-08 编译链接优化方法 Active CN109918074B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201711294532.0A CN109918074B (zh) 2017-12-08 2017-12-08 编译链接优化方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201711294532.0A CN109918074B (zh) 2017-12-08 2017-12-08 编译链接优化方法

Publications (2)

Publication Number Publication Date
CN109918074A CN109918074A (zh) 2019-06-21
CN109918074B true CN109918074B (zh) 2022-09-27

Family

ID=66956601

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201711294532.0A Active CN109918074B (zh) 2017-12-08 2017-12-08 编译链接优化方法

Country Status (1)

Country Link
CN (1) CN109918074B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111208978B (zh) * 2019-12-31 2023-05-23 杭州安恒信息技术股份有限公司 以Python为接口C++实现的字符布隆过滤器
CN111736816B (zh) * 2020-07-20 2020-11-24 华控清交信息科技(北京)有限公司 一种编译链接方法、装置和用于编译链接的装置

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10275088A (ja) * 1997-03-31 1998-10-13 Hitachi Ltd リンク最適化方法
CN102385524A (zh) * 2011-12-23 2012-03-21 浙江大学 一种基于混编指令集的编译链指令替换方法
CN103034486A (zh) * 2012-11-28 2013-04-10 清华大学 移动终端操作***基于全***扩展调用图的自动优化方法
CN104951290A (zh) * 2014-03-31 2015-09-30 国际商业机器公司 优化软件的方法和设备
CN105320654A (zh) * 2014-05-28 2016-02-10 中国科学院深圳先进技术研究院 动态布隆过滤器和基于动态布隆过滤器的元素操作方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10275088A (ja) * 1997-03-31 1998-10-13 Hitachi Ltd リンク最適化方法
CN102385524A (zh) * 2011-12-23 2012-03-21 浙江大学 一种基于混编指令集的编译链指令替换方法
CN103034486A (zh) * 2012-11-28 2013-04-10 清华大学 移动终端操作***基于全***扩展调用图的自动优化方法
CN104951290A (zh) * 2014-03-31 2015-09-30 国际商业机器公司 优化软件的方法和设备
CN105320654A (zh) * 2014-05-28 2016-02-10 中国科学院深圳先进技术研究院 动态布隆过滤器和基于动态布隆过滤器的元素操作方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
"龙芯链接后优化器设计与分析";陈瑜等;《计算机研究与发展》;20060911;第43卷(第8期);1450-1456页 *

Also Published As

Publication number Publication date
CN109918074A (zh) 2019-06-21

Similar Documents

Publication Publication Date Title
US9721116B2 (en) Test sandbox in production systems during productive use
US8843502B2 (en) Sorting a dataset of incrementally received data
TWI479341B (zh) 資訊系統中轉換資料之高處理能力,可靠複寫
US8037450B2 (en) System and methods for tracing code generation in template engines
JP7047228B2 (ja) データ照会方法、装置、電子機器、可読記憶媒体、及びコンピュータープログラム
CN106547644B (zh) 增量备份方法和设备
US9218394B2 (en) Reading rows from memory prior to reading rows from secondary storage
CN105095287A (zh) Lsm数据合并排序方法和装置
CN103914483B (zh) 文件存储方法、装置及文件读取方法、装置
US9953106B2 (en) Dynamic generation of traversal code for a graph analytics environment
US10528328B2 (en) Learning from input patterns in Programing-By-Example
US20160103858A1 (en) Data management system comprising a trie data structure, integrated circuits and methods therefor
CN111078672B (zh) 数据库的数据对比方法及装置
CN105989015B (zh) 一种数据库扩容方法和装置以及访问数据库的方法和装置
CN109918074B (zh) 编译链接优化方法
CN104424256A (zh) 布隆过滤器生成方法和装置
CN108268596B (zh) 搜索存储在存储器中的数据的方法和***
WO2018228001A1 (zh) 电子装置、信息查询控制方法和计算机可读存储介质
CN105930104B (zh) 数据存储方法和装置
CN105264519A (zh) 一种列式数据库处理方法及装置
CN106980673A (zh) 内存数据库表索引更新方法及***
CN104516823A (zh) 一种数据存储方法和装置
CN106775586B (zh) 数据排序方法和装置
CN105786478A (zh) 用于数据处理的方法及设备
CN104090895A (zh) 获取基数的方法、装置、服务器及***

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
GR01 Patent grant
GR01 Patent grant