CN116954717A - 一种预取函数段的方法以及网络设备 - Google Patents
一种预取函数段的方法以及网络设备 Download PDFInfo
- Publication number
- CN116954717A CN116954717A CN202210395251.9A CN202210395251A CN116954717A CN 116954717 A CN116954717 A CN 116954717A CN 202210395251 A CN202210395251 A CN 202210395251A CN 116954717 A CN116954717 A CN 116954717A
- Authority
- CN
- China
- Prior art keywords
- function
- segment
- function segment
- sequence
- address offset
- 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
- 238000000034 method Methods 0.000 title claims abstract description 78
- 230000006870 function Effects 0.000 claims abstract description 795
- 238000013515 script Methods 0.000 claims abstract description 98
- 230000015654 memory Effects 0.000 claims abstract description 65
- 238000010586 diagram Methods 0.000 claims description 48
- 238000012545 processing Methods 0.000 claims description 32
- 238000013507 mapping Methods 0.000 claims description 10
- 239000003999 initiator Substances 0.000 claims 1
- 238000004590 computer program Methods 0.000 description 11
- XXQCMVYBAALAJK-UHFFFAOYSA-N ethyl n-[4-[benzyl(2-phenylethyl)amino]-2-(2-phenylethyl)-1h-imidazo[4,5-c]pyridin-6-yl]carbamate Chemical compound N=1C=2C(N(CCC=3C=CC=CC=3)CC=3C=CC=CC=3)=NC(NC(=O)OCC)=CC=2NC=1CCC1=CC=CC=C1 XXQCMVYBAALAJK-UHFFFAOYSA-N 0.000 description 6
- 238000004891 communication Methods 0.000 description 5
- 230000003068 static effect Effects 0.000 description 3
- MKZGVLPHKXXSSG-UHFFFAOYSA-N ethyl n-[4-[benzyl(2-phenylethyl)amino]-2-[4-(trifluoromethyl)phenyl]-1h-imidazo[4,5-c]pyridin-6-yl]carbamate Chemical compound N=1C(NC(=O)OCC)=CC=2NC(C=3C=CC(=CC=3)C(F)(F)F)=NC=2C=1N(CC=1C=CC=CC=1)CCC1=CC=CC=C1 MKZGVLPHKXXSSG-UHFFFAOYSA-N 0.000 description 2
- 238000012216 screening Methods 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 238000003491 array Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000000737 periodic effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30047—Prefetch instructions; cache control instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
一种预取函数段的方法包括:接收启动程序指令后,根据启动程序指令获取加载脚本,根据加载脚本将包括第一函数段和第二函数段的动态库文件加载到内存,执行第一函数段以及从内存预取第二函数段。第一函数段调用第二函数段的次数大于第一函数段调用其他函数段的次数,将对应不同函数库的第一函数段和第二函数段根据函数调用次数放在内存中的相邻位置,使得预取库间函数段时能够提高缓存命中率,提高程序处理效率。本申请还提供一种能够实现上述方法的网络设备。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种预取函数段的方法以及网络设备。
背景技术
函数库是具有一定功能的函数的集合。根据业务需求可以建立不同类型的函数库。
目前有一种预取函数段的方法大致如下:接收启动程序指令后,将同一函数库的文件预先加载到内存的一个存储空间,按照程序的函数顺序执行当前函数段以及从内存中预取下一个函数段。
在跨库调用函数时由于被调用函数段与当前函数段处于不同函数库,因此预取的下一个函数段不是被调用函数段,这样会出现未命中L1缓存的情况,此时需要重新在内存中查找被调用函数段,影响程序处理效率。
发明内容
有鉴于此,本申请提供一种预取函数段的方法,该方法可以将来自不同函数库且调用次数高的函数段在内存中连续排列,减少跨库调用导致的未命中缓存的情况,从而提高预取函数段的命中率,由此提高程序处理效率。本申请还提供一种能够实现上述方法的网络设备。
第一方面提供一种预取函数段的方法,在该方法中,接收启动程序指令后,根据启动程序指令获取加载脚本,根据加载脚本将包括第一函数段和第二函数段的动态库文件加载到内存,执行第一函数段以及从内存预取第二函数段。其中,加载脚本包括第一函数段的地址偏移量和第二函数段的地址偏移量,第一函数段对应的函数和第二函数段对应的函数来自不同的函数库。第二函数段的地址偏移量等于第二函数段的地址偏移量与第一函数段的存储空间大小之和,即表明第一函数段和第二函数段存储在内存的相邻位置。
由于第一函数段调用第二函数段的次数大于第一函数段调用其他函数段的次数而且第一函数段和第二函数段在内存中相邻,因此可以提高库间函数段的预取命中率,降低未命中缓存的情况,从而提高程序处理效率。
在第一种可能的实现方式中,上述方法还包括:在加载脚本还包括第三函数段的地址偏移量和第四函数段的地址偏移量,以及动态库文件还包括第三函数段和第四函数段的情况下,执行第三函数段以及从内存预取第四函数段。第三函数段对应的函数和第四函数段对应的函数来自同一函数库。第四函数段的地址偏移量等于第四函数段的地址偏移量与第四函数段的存储空间大小之和,即表明第三函数段和第四函数段存储在内存的相邻位置。由于第三函数段调用第四函数段的次数大于第三函数段调用其他函数段的次数且第三函数段和第四函数段在内存中相邻,因此可以提高预取库内函数段的命中率,提高程序处理效率。
基于第一方面或第一种可能的实现方式,在第二种可能的实现方式中,在接收启动程序指令之前,上述方法还包括:获取程序跟踪文件后,根据程序跟踪文件生成调用关系图,接着根据调用关系图确定包括第一函数段和第二函数段的第一函数段序列,根据第一函数段序列的序列信息创建链接脚本,以及将程序编译为多个函数段,再根据链接脚本从多个函数段中获取第一函数段序列;生成包含第一函数段序列的动态库文件。调用关系图包括函数调用顺序和函数调用次数,链接脚本包括第一函数段序列的序列信息,序列信息包括序列标识,序列中函数段的标识和函数段的次序。依此可以生成包括第一函数段序列的动态库文件。第一函数段序列包括对应不同函数库的函数段,同理可以将全部或部分不同函数库的函数段按照函数调用次数和函数调用顺序组成函数段序列,由此可推知动态库文件可以包括多个目标函数段序列,每个目标函数段序列对应的函数来自至少两个函数库。
基于第一方面或第一种可能的实现方式,在第三种可能的实现方式中,获取程序跟踪文件后,根据程序跟踪文件生成调用关系图,再根据调用关系图确定第二函数段序列,根据第一函数段序列的序列信息和第二函数段序列的序列信息创建链接脚本。这样提供了另一种创建链接脚本的方法。
基于第一方面或第一种可能的实现方式,在第四种可能的实现方式中,在根据启动程序指令获取加载脚本之前,上述方法还包括:获取程序跟踪文件后,根据程序跟踪文件生成调用关系图,再根据调用关系图确定包括第一函数段和第二函数段的第一函数段序列;为第一函数段序列的每个函数段分配地址偏移量;根据第一函数段序列中每个函数段的地址偏移量创建加载脚本。调用关系图包括函数调用顺序和函数调用次数。这样提供了一种创建加载脚本的方法。
基于第四种可能的实现方式,在第五种可能的实现方式中,根据程序跟踪文件生成调用关系图之后,从调用关系图中选取多个目标函数,为目标函数对应的目标函数段分配地址偏移量,根据第一函数段序列中每个函数段的地址偏移量和目标函数段的地址偏移量创建加载脚本。多个目标函数中任意两个目标函数不具有函数调用关系且每个目标函数的被调用次数大于或等于预设阈值,目标函数段与目标函数段的地址偏移量包括的缓存集映射比特一一对应。缓存集映射比特用于映射缓存集。目标函数段可以理解为与其他热函数不存在调用关系的热函数段,依此可以将不存在调用关系的热函数段加载到不同的缓存集,从而减少缓存冲突,提高缓存命中率。
基于第一方面或第一种可能的实现方式,在第六种可能的实现方式中,在根据启动程序指令获取加载脚本之前,上述方法还包括:获取程序跟踪文件后,根据程序跟踪文件生成调用关系图,再根据调用关系图确定第一函数段序列和第二函数段序列;为第一函数段序列和第二函数段序列中的每个函数段分配地址偏移量;根据第一函数段序列中每个函数段的地址偏移量以及第二函数段序列中每个函数段的地址偏移量创建加载脚本。这样提供了另一种创建加载脚本的方法。
第二方面提供一种网络设备,该网络设备包括接收单元,加载单元和处理单元,接收单元用于接收启动程序指令;加载单元用于根据启动程序指令获取加载脚本;根据加载脚本将包括第一函数段和第二函数段的动态库文件加载到内存;处理单元用于执行第一函数段以及从内存预取第二函数段。其中,加载脚本包括第一函数段的地址偏移量和第二函数段的地址偏移量,第一函数段对应的函数和第二函数段对应的函数来自不同的函数库,第一函数段调用第二函数段的次数大于第一函数段调用其他函数段的次数,第二函数段的地址偏移量是第一函数段的地址偏移量与第一函数段的存储空间大小之和。该网络设备能够根据函数调用次数将对应不同函数库的函数段放在内存的相邻位置,从而提高预取库间函数段的命中率。
在第二方面的第一种可能的实现方式中,加载脚本还包括第三函数段的地址偏移量和第四函数段的地址偏移量,动态库文件还包括第三函数段和第四函数段;处理单元还用于执行第三函数段以及从内存预取第四函数段。其中,第三函数段对应的函数和第四函数段对应的函数来自同一函数库,第三函数段调用第四函数段的次数大于第三函数段调用其他函数段的次数,第四函数段的地址偏移量是第三函数段的地址偏移量与第三函数段的存储空间大小之和。这样的网络设备不仅能够提高预取库间函数段的命中率,能够提高预取库内函数段的命中率。
在第二种可能的实现方式中,处理单元还用于获取程序跟踪文件;根据程序跟踪文件生成调用关系图,根据调用关系图确定包括第一函数段和第二函数段的第一函数段序列;根据第一函数段序列的序列信息创建链接脚本;网络设备还包括编译单元和链接单元,该编译单元用于将程序编译为多个函数段,该链接单元用于根据链接脚本从多个函数段中获取第一函数段序列,生成包含第一函数段序列的动态库文件。调用关系图包括函数调用顺序和函数调用次数。链接脚本包括第一函数段序列的序列信息,序列信息包括序列标识,序列中函数段的标识和函数段的次序。该网络设备可以创建包括函数段序列的动态库文件。
在第三种可能的实现方式中,处理单元还用于获取程序跟踪文件;根据程序跟踪文件生成调用关系图,根据调用关系图确定包括第一函数段和第二函数段的第一函数段序列;为第一函数段序列的每个函数段分配地址偏移量;根据第一函数段序列中每个函数段的标识和地址偏移量创建加载脚本。调用关系图包括函数调用顺序和函数调用次数。该网络设备可以重排库间函数段的地址偏移量,根据重排后的地址偏移量创建加载文件。
在第四种可能的实现方式中,处理单元还用于从调用关系图中选取多个目标函数,为目标函数对应的目标函数段分配地址偏移量,根据第一函数段序列中每个函数段的地址偏移量和目标函数段的地址偏移量创建加载脚本。多个目标函数中任意两个目标函数不具有函数调用关系且每个目标函数的被调用次数大于或等于预设阈值;目标函数段与目标函数段的地址偏移量包括的缓存集映射比特一一对应。该网络设备可以将不存在调用关系的热函数映射到不同缓存集,从而减少缓存冲突,提高缓存命中率。
第三方面提供一种网络设备,其包括处理器和存储器,所述存储器用于存储程序;所述处理器通过执行程序用于实现第一方面的方法。
第四方面提供一种计算机可读存储介质,计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行第一方面的方法。
第五方面提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行第一方面的方法。
第六方面提供了一种芯片系统,包括至少一个处理器,所述处理器和存储器耦合,所述存储器用于存储计算机程序或指令,所述处理器用于执行所述计算机程序或指令,以实现第一方面的方法。
附图说明
图1为现有技术中未命中缓存场景的一个示意图;
图2为本申请实施例中命中缓存场景的一个示意图;
图3为本申请实施例中预取函数段方法的一个示意图;
图4为本申请实施例中创建动态库文件的一个流程图;
图5为本申请实施例中创建加载脚本的一个流程图;
图6为本申请实施例中创建动态库文件的一个示意图;
图7为本申请实施例中预取函数段方法的一个流程图;
图8为本申请实施例中创建动态库文件和加载脚本的一个示意图;
图9为本申请实施例中预取函数段方法的另一个流程图;
图10为本申请实施例中网络设备的一个结构图;
图11为本申请实施例中网络设备的另一个结构图。
具体实施方式
本申请的预取函数段方法可应用于网络设备。网络设备可以是但不限于基站或基带单元。网络设备包括多级缓存,例如L1缓存,L2缓存和L3缓存等。L1缓存是处理器中具有最快读写速度的缓存,能够提高指令或数据的吞吐速度。L1缓存包括指令缓存和数据缓存。本申请的函数段可以认为是指令,本申请的预取函数段方法可以对指令缓存的指令读取进行优化。
在一些嵌入式多核场景中,每个核可以运行一个小微操作系统实例,并在其上执行各种不同的业务,这些核上的进程会共享业务组件函数库的内存布局。如何对业务组件函数库的内存进行布局,将影响到多个核上的业务执行性能表现。在预取指令或数据时,在一个示例中,命中L1缓存的时间开销为0.5纳秒(ns),从L2缓存读取指令或数据的时间开销是7ns,从内存读取指令或数据的时间开销是100ns,因此命中缓存时单核的时间开销较少,多个核运行程序时能够节省很多时间。
一个程序的执行要经过编译,链接和加载。很多嵌入式程序都是周期性的,在不同的任务周期内程序的执行路径是相同的。因此在嵌入式程序链接和加载的过程中,可以通过精心编排二进制文件中的函数段,将其放置到内存中的指定位置,可以帮助减少业务执行过程中发生的指令未命中缓存的情况,进而提高业务端到端的性能。
下面对预取函数段的过程进行介绍,参阅图1,在一个实施例中,网络设备包括处理核41,处理核42,处理核43和处理核44。每个处理核有一个对应的L1缓存,例如处理核41的L1缓存为缓存31,处理核42的L1缓存为缓存32,处理核43的L1缓存为缓存33,处理核44的L1缓存为缓存34。多个处理器共享的L2缓存为缓存20。
程序1的函数库包括函数库11,函数库12,函数库13和函数库14。每个函数库包括多个函数段,每个函数段是由一个函数编译而成。例如,函数库11包括函数段111和函数段112,函数库12包括函数段121和函数段122,函数库13包括函数段131和函数段132,函数库14包括函数段141和函数段142。应理解,函数库包括的函数库不限于2个,具体可以根据实际情况进行设置。
在运行程序的过程中,首先将程序的函数库11和函数库12加载到缓存20。在缓存20中,每个函数库文件的函数段依次排列。在执行函数段111时,需要预取函数段111的下一个函数段,以便于指令按照流水线的方式执行。在程序1中函数段111的下一个函数段是函数段112,但是函数段111调用的函数段是函数段121。网络设备会将函数段112预取到缓存31中,但是执行函数段111之后实际要执行的函数段是函数段121,此时出现未命中缓存的情况,即cache miss。
参阅图2,在另一个示例中,将函数库的函数段重排为动态库,程序1的动态库包括动态库11,动态库12,动态库13和动态库14。动态库11包括函数段111和函数段121,动态库12包括函数段121和函数段112,动态库13包括函数段131和函数段132,动态库14包括函数段141和函数段142。
在程序1中,函数段111的下一个函数段是函数段121。网络设备会将函数段121预取到缓存31中,执行函数段111后执行函数段121,即命中缓存。
下面对本申请的预取函数段方法进行介绍。参阅图3,在一个实施例中,该方法包括:
步骤301、根据程序跟踪文件创建链接脚本。
步骤302、将程序编译为多个函数段。
步骤303、根据链接脚本将多个函数段链接为动态库文件。
步骤304、根据程序跟踪文件创建加载脚本。
加载脚本包括函数段标识和函数段的地址偏移量。函数段的地址偏移量可以认为是函数段的地址。步骤304可以在步骤301之前执行,或者步骤301和步骤304可以并行执行。
步骤305、根据加载脚本将动态库文件加载到内存。
步骤306、将内存的函数段预取到缓存。
本实施例中,链接脚本包括一个或多个函数段序列标识,每个函数段序列中函数段标识和函数段次序。链接脚本与动态库文件函数对应的,根据链接脚本可以将全部函数段分成若干函数段集合,其中一些函数段集合为函数段序列。按照加载脚本将函数段序列中的函数段加载到内存后,函数段在内存中依次排列,这样可以根据加载脚本的函数段顺序进行预取。当加载脚本中函数段顺序与函数的实际执行顺序相近或一致时,预取命中率很高。
下面对生成链接脚本,动态库文件和加载脚本的过程进行介绍。首先对创建链接脚本和动态库文件的方法进行详细介绍,参阅图4,在一个实施例中,本申请中创建动态库文件的方法包括:
步骤401、获取程序跟踪文件。
步骤402、根据程序跟踪文件生成调用关系图。
程序跟踪文件包括函数的调用关系,根据程序跟踪文件可以确定调用关系图,调用关系图包括函数调用顺序和函数调用次数。本申请涉及不同函数库,因此调用关系图包括不同函数库的函数之间的调用关系和函数调用次数。
步骤403、根据调用关系图确定包括第一函数段和第二函数段的第一函数段序列。
具体的,根据函数调用顺序和函数调用次数对调用关系图进行聚类处理,得到一个或多个函数集合,其中一些函数段集合为函数段序列。以第一函数段序列为例,第一函数段序列包括但不限于第一函数段和第二函数段,第一函数段对应的函数和第二函数段对应的函数来自不同的函数库,第一函数段和第二函数段可以认为是一对目标库间函数段。一对目标库间函数段包括来自不同函数库的2个函数段且前一个函数段调用后一个函数段的次数大于前一个函数段调用其他函数段的次数。第一函数段是指在第一函数段序列中任意一对目标库间函数段的第一个函数段。第一函数段调用第二函数段的次数大于第一函数段调用其他函数段的次数。
步骤404、创建包括第一函数段序列的序列信息的链接脚本。序列信息包括序列标识,序列中函数段标识和函数段次序。
步骤405、将程序编译为多个函数段。
步骤406、根据链接脚本从多个函数段中获取第一函数段序列。
链接脚本包括第一函数段序列的序列信息,根据上述序列信息可以从全部函数段中查找到第一函数段序列的函数段,根据查找到的函数段构造第一函数段序列。
步骤407、生成包含第一函数段序列的动态库文件。
本实施例中,按照上述方法可以将对应不同函数库的函数段重组,以得到动态库文件。在加载动态库文件时使得第一函数段和第二函数段在内存中连续排列,由于第一函数段调用第二函数段的次数大于第一函数段调用其他函数段的次数,因此能够提高预取命中率。
下面对创建加载脚本的方法进行详细介绍,参阅图5,在另一个实施例中,本申请中创建加载脚本的方法包括:
步骤501、获取程序跟踪文件。
步骤502、根据程序跟踪文件生成调用关系图。调用关系图包括函数调用顺序和函数调用次数。
步骤503、根据调用关系图确定包括第一函数段和第二函数段的第一函数段序列。
步骤501、步骤502、步骤503分别与步骤401、步骤402、步骤403相似。
步骤504、为第一函数段序列的每个函数段分配地址偏移量。
本申请中,函数段序列中函数段的地址偏移量都是按照函数段的次序连续排列。
步骤505、根据第一函数段序列中每个函数段的地址偏移量创建加载脚本。可选的,加载脚本包括第一函数段序列中每个函数段的标识和每个函数段的地址偏移量。
本实施例中,在第一函数段序列中函数段的地址偏移量按照函数段的次序连续排列而且函数段之间的调用次数最高,因此预取下一个函数段时命中率是最高的,该加载脚本可以提高预取命中率。
在一个可选实施例中,
上述方法还包括:从调用关系图中选取多个目标函数,多个目标函数中任意两个目标函数不具有函数调用关系且每个目标函数的被调用次数大于或等于预设阈值;为目标函数对应的目标函数段分配地址偏移量;
根据第一函数段序列中每个函数段的地址偏移量创建加载脚本包括:根据第一函数段序列中每个函数段的地址偏移量和目标函数段的地址偏移量创建加载脚本。
其中,目标函数段与目标函数段的地址偏移量包括的缓存集映射比特一一对应,缓存集映射比特与缓存集是一一对应的。在一个可选实施例中,地址偏移量的长度为32比特,缓存集映射比特占用地址偏移量的后12个比特。应理解,缓存集映射比特的比特数与与网络设备的缓存大小相关,具体可以根据实际情况进行设置。缓存集映射比特在地址偏移量中的位置和预设阈值也可以根据实际情况进行设置。
本实施例中,根据被调用次数和预设阈值可以从调用关系图中筛选出热函数,再根据函数调用关系从热函数中选出目标函数。为目标函数段分配地址偏移量并且使得每个目标函数段具有唯一的缓存集映射比特,这样可以将多个目标函数段映射到不同的缓存集。在现有技术中热函数可能轮流占用相同的缓存集,这样频繁替换缓存集中的函数段导致命中缓存的概率较低。按照上述方法使不存在调用关系的热函数映射到不同的缓存集,从而减少缓存冲突,提高缓存命中率。
下面以一个应用场景对本申请的创建动态库文件的方法和创建加载脚本的方法进行介绍。参阅图6,程序的函数库包括函数库11,函数库12,函数库13,函数库14,函数库15。函数库11包括函数111和函数112,函数库12包括函数121和函数122,函数库13包括函数131和函数132,函数库14包括函数141和函数142,函数库15包括函数151。
例如,在程序跟踪文件中函数调用关系和函数调用次数如表1所示:
表1
使用函数调用顺序和函数调用次数对函数段进行分类,可以得到第一函数序列,第二函数序列,第三函数序列,第四函数序列和第五函数序列。第一函数序列包括函数111,函数121和函数131,第二函数序列包括函数122,函数132和函数142,第三函数序列包括函数141,函数151和函数142,第四函数序列包括函数111和函数141,第五函数序列包括函数131和函数122。第六函数序列包括函数122和函数112。
从其中筛选出函数调用次数多的函数序列,将筛选得到的函数序列生成动态库。参阅图6,例如,生成包括函数111,函数121和函数131的动态库21,创建包括函数122,函数132和函数142的动态库22,创建包括函数141,函数151和函数142的动态库24等。给每个函数序列中多个函数段分配连续的地址偏移量,再根据函数段标识和函数段的地址偏移量创建加载脚本。
基于上述动态库文件和加载脚本可以执行本申请的预取函数段方法。参阅图7,本申请中预取函数段方法的一个实施例包括:
步骤701、接收启动程序指令。
步骤702、根据启动程序指令获取加载脚本。
其中,加载脚本包括第一函数段的地址偏移量和第二函数段的地址偏移量。应理解,加载脚本包括程序中全部函数对应的函数段标识,加载脚本包括的函数段标识与程序包括的函数一一对应。
步骤703、根据加载脚本将包括第一函数段和第二函数段的动态库文件加载到内存。
第一函数段对应的函数和第二函数段对应的函数来自不同的函数库,第一函数段调用第二函数段的次数大于第一函数段调用其他函数段的次数,第二函数段的地址偏移量是第一函数段的地址偏移量与第一函数段的存储空间大小之和。
步骤704、执行第一函数段以及从内存预取第二函数段。
本实施例中,第一函数段调用第二函数段的次数比第一函数段调用其他函数段的次数更多,执行第一函数段时预取第二函数段具有最高的预取命中率。同理,按照本申请的方法将调用次数最高的其他库间函数段在内存中相邻排列时,预取其他库间函数段也具有最高的预取命中率。
除了库间函数段之外,本申请还可以提高对库内函数段的预取命中率。首先对创建链接脚本、动态库文件和加载脚本的过程进行介绍。参阅图8,在另一个实施例中,上述预取函数段方法包括:
步骤801、获取程序跟踪文件。
步骤802、根据程序跟踪文件生成调用关系图。
步骤803、根据调用关系图确定第一函数段序列和第二函数段序列。
步骤804、创建包括第一函数段序列的序列信息和第二函数段序列的序列信息的链接脚本。
步骤805、将程序编译为多个函数段。
步骤806、根据链接脚本从多个函数段中获取第一函数段序列和第二函数段序列。
步骤807、生成包含第一函数段序列和第二函数段序列的动态库文件。
第一函数段序列可参阅图4实施例中的第一函数段序列。第二函数段序列包括但不限于第三函数段和第四函数段,第三函数段对应的函数和第四函数段对应的函数来自同一函数库,第三函数段调用第四函数段的次数大于第三函数段调用其他函数段的次数,第四函数段的地址偏移量是第三函数段的地址偏移量与第三函数段的存储空间大小之和。第二函数段序列是动态库文件中包含任意一对目标库内函数段的函数段序列。一对目标库内函数段包括来自同一函数库的两个函数段,前一个函数段调用后一个函数段的次数大于前一个函数段调用其他函数段的次数。第三函数段是第二函数段序列中任意一对目标库内函数段的第一个函数段。
步骤808、为第一函数段序列和第二函数段序列中的每个函数段分配地址偏移量。
步骤809、根据第一函数段序列中函数段的地址偏移量以及第二函数段序列中函数段的地址偏移量创建加载脚本。
其中,加载脚本包括第一函数段序列中每个函数段的地址偏移量,以及第二函数段序列中每个函数段的地址偏移量。步骤808和步骤809是创建加载脚本的过程,步骤804至步骤807是创建动态库文件的过程,上述两个过程是独立的,并无固定的先后执行顺序。
本实施例中,调用次数最高的库间函数段或库内函数段的地址偏移量连续排列。与调用次数低的函数段连续排列相比,本申请的加载脚本能够提高预取命中率。
基于上述动态库文件和加载脚本可以预取库内函数段。参阅图9,本申请中预取函数段方法的另一个实施例包括:
步骤901、接收启动程序指令。
步骤902、根据启动程序指令获取加载脚本。
步骤903、根据加载脚本将包括第一函数段序列和第二函数段序列的动态库文件加载到内存。
步骤904、执行第一函数段以及从内存预取第二函数段。
步骤905、执行第三函数段以及从内存预取第四函数段。需要说明的是,第一函数段,第二函数段,第三函数段和第四函数段的执行顺序与程序中函数的调用顺序一致。当第三函数段和第四函数段的执行顺序在第一函数段和第二函数段之前时,步骤905在步骤904之前执行。
本实施例中,在第二函数段序列中第三函数段调用第四函数段的次数比第三函数段调用其他函数段的次数更多,执行第三函数段预取第四函数段具有最高的预取命中率。同理,对于其他库内函数段也具有最高的预取命中率。该方法对库间函数段和库内函数段都可以有最高的预取命中率,因此能够提高整个程序的处理效率。
本申请提供一种网络设备能够实现上述实施例中的方法。参阅图10,在一个实施例中,本申请的网络设备1000包括:
接收单元1001,用于接收启动程序指令;
加载单元1002,用于根据启动程序指令获取加载脚本,加载脚本包括第一函数段的地址偏移量和第二函数段的地址偏移量,第二函数段的地址偏移量是第一函数段的地址偏移量与第一函数段的存储空间大小之和,第一函数段对应的函数和第二函数段对应的函数来自不同的函数库,第一函数段调用第二函数段的次数大于第一函数段调用其他函数段的次数;
加载单元1002,还用于根据加载脚本将包括第一函数段和第二函数段的动态库文件加载到内存;
处理单元1003,用于执行第一函数段以及从内存预取第二函数段。
在一个可选实施例中,加载脚本还包括第三函数段的地址偏移量和第四函数段的地址偏移量,第四函数段的地址偏移量是第三函数段的地址偏移量与第三函数段的存储空间大小之和,第三函数段对应的函数和第四函数段对应的函数来自同一函数库,第三函数段调用第四函数段的次数大于第三函数段调用其他函数段的次数;动态库文件还包括第三函数段和第四函数段;
处理单元1003还用于执行第三函数段以及从内存预取第四函数段。
在另一个可选实施例中,处理单元1003还用于获取程序跟踪文件;根据程序跟踪文件创建调用关系图,调用关系图包括函数调用顺序和函数调用次数;根据调用关系图确定包括第一函数段和第二函数段的第一函数段序列;根据第一函数段序列的序列信息创建链接脚本,序列信息包括序列标识,序列中函数段的标识和函数段的次序;
网络设备1000还包括:
编译单元,用于将程序编译为多个函数段;
链接单元,用于根据链接脚本从多个函数段中获取第一函数段序列,创建包含第一函数段序列的动态库文件。
在另一个可选实施例中,处理单元1003还用于获取程序跟踪文件;根据程序跟踪文件生成调用关系图,调用关系图包括函数调用顺序和函数调用次数;根据调用关系图确定第一函数段序列;为第一函数段序列的每个函数段分配地址偏移量;根据第一函数段序列中每个函数段的地址偏移量创建加载脚本。
在另一个可选实施例中,处理单元1003还用于从调用关系图中选取多个目标函数,多个目标函数中任意两个目标函数不具有函数调用关系且每个目标函数的被调用次数大于或等于预设阈值;为目标函数对应的目标函数段分配地址偏移量,目标函数段与地址偏移量包括的缓存集映射比特一一对应;根据第一函数段序列中每个函数段的地址偏移量和目标函数段的地址偏移量创建加载脚本。
需要说明的是,上述装置各模块/单元之间的信息交互、执行过程等内容,由于与本申请方法实施例基于同一构思,其带来的技术效果与本申请方法实施例相同,具体内容可参见本申请前述所示的方法实施例中的叙述,此处不再赘述。
图10所示实施例中网络设备能够执行图3、图4、图5、图7、图8和图9所示实施例中任意一个实施例的方法。图10所示实施例中的名词解释,各单元执行的步骤和有益效果可参阅图3至图9所示实施例中的相应描述。
下面从硬件装置角度对本申请的网络设备进行介绍,参阅图11,本申请中网络设备1100的一个实施例包括:通过总线1104连接的处理器1101,存储器1102和网络接口1103。
本实施例中,存储器1102用于存储程序,指令或数据等信息。通过调用存储器1102存储的程序或指令,处理器1101用于执行图3至图9所示实施例中的方法。
应理解,本实施例中提及的处理器1101可以是中央处理单元(centralprocessing unit,CPU),还可以是其他通用处理器、数字信号处理器(digital signalprocessor,DSP)、专用集成电路(application specific integrated circuit,ASIC)、现成可编程门阵列(field programmable gate array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
还应理解,本申请实施例中提及的存储器1102可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(read-only memory,ROM)、可编程只读存储器(programmable ROM,PROM)、可擦除可编程只读存储器(erasable PROM,EPROM)、电可擦除可编程只读存储器(electrically EPROM,EEPROM)或闪存。易失性存储器可以是随机存取存储器(random access memory,RAM),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的RAM可用,例如静态随机存取存储器(static RAM,SRAM)、动态随机存取存储器(dynamic RAM,DRAM)、同步动态随机存取存储器(synchronous DRAM,SDRAM)、双倍数据速率同步动态随机存取存储器(double datarate SDRAM,DDR SDRAM)、增强型同步动态随机存取存储器(enhanced SDRAM,ESDRAM)、同步连接动态随机存取存储器(synch link DRAM,SLDRAM)和直接内存总线随机存取存储器(direct rambus RAM,DRRAM)。
网络接口1103可以用于接收数据或发送数据。
本申请提供一种计算机可读存储介质,计算机可读存储介质中存储有计算机程序,当其在计算机上运行时,使得计算机执行上述实施例或可选实施例中的通信方法。
本申请还提供一种包括计算机程序产品,当其在计算机上运行时,使得计算机执行如上述所示实施例或可选实施例中的通信方法。
本申请还提供一种芯片系统,该芯片系包括相互耦合的处理器和存储器。存储器用于存储的计算机程序或指令,该处理单元用于执行存储器存储的计算机程序或指令,以使网络设备执行上述实施例中由网络设备执行的步骤。可选地,存储器为芯片内的存储器,如寄存器、缓存等,存储器还可以是网络设备内的位于芯片外部的存储器,如只读存储器(read-only memory,ROM)或可存储静态信息和指令的其他类型的静态存储设备,随机存取存储器(random access memory,RAM)等。上述任一处提到的处理器,可以是一个通用中央处理器,微处理器,专用集成电路(application specific integrated circuit,ASIC)或一个或多个用于实现上述通信方法的集成电路。
另外需说明的是,以上所描述的装置实施例只是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。另外,本申请提供的装置实施例附图中,模块之间的连接关系表示它们之间具有通信连接,具体可以实现为一条或多条通信总线或信号线。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本申请可借助软件加必需的通用硬件的方式来实现,当然也可以通过专用硬件包括专用集成电路、专用CPU、专用存储器、专用元器件等来实现。一般情况下,凡由计算机程序完成的功能都可以很容易地用相应的硬件来实现,而且,用来实现同一功能的具体硬件结构也可以是多种多样的,例如模拟电路、数字电路或专用电路等。但是,对本申请而言更多情况下软件程序实现是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在可读取的存储介质中,如计算机的软盘、U盘、移动硬盘、ROM、RAM、磁碟或者光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例的方法。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。
计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行计算机程序指令时,全部或部分地产生按照本申请实施例的流程或功能。计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一计算机可读存储介质传输,例如,计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(digital subscriber line,DSL)或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。计算机可读存储介质可以是计算机能够存储的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。可用介质可以是磁性介质,(例如软盘、硬盘、磁带)、光介质(例如DVD)、或者半导体介质(例如固态硬盘(solid state disk,SSD))等。
Claims (11)
1.一种预取函数段的方法,其特征在于,包括:
接收启动程序指令;
根据所述启动程序指令获取加载脚本,所述加载脚本包括第一函数段的地址偏移量和第二函数段的地址偏移量,所述第二函数段的地址偏移量等于所述第一函数段的地址偏移量与所述第一函数段的存储空间大小之和,所述第一函数段对应的函数和所述第二函数段对应的函数来自不同的函数库,所述第一函数段调用所述第二函数段的次数大于所述第一函数段调用其他函数段的次数;
根据所述加载脚本将包括第一函数段和第二函数段的动态库文件加载到内存;
执行所述第一函数段以及从所述内存预取所述第二函数段。
2.根据权利要求1所述的方法,其特征在于,所述加载脚本还包括第三函数段的地址偏移量和第四函数段的地址偏移量,所述第三函数段对应的函数和所述第四函数段对应的函数来自同一函数库,所述第三函数段调用所述第四函数段的次数大于所述第三函数段调用其他函数段的次数,所述第四函数段的地址偏移量等于所述第四函数段的地址偏移量与第四函数段的存储空间大小之和;所述动态库文件还包括所述第三函数段和所述第四函数段;
所述方法还包括:
执行所述第三函数段以及从内存预取所述第四函数段。
3.根据权利要求1或2所述的方法,其特征在于,在所述接收启动程序指令之前,所述方法还包括:
获取程序跟踪文件;
根据所述程序跟踪文件生成调用关系图,所述调用关系图包括函数调用顺序和函数调用次数;
根据所述调用关系图确定包括所述第一函数段和所述第二函数段的第一函数段序列;
根据所述第一函数段序列的序列信息创建所述链接脚本;
将程序编译为多个函数段;
根据链接脚本从所述多个函数段中获取所述第一函数段序列;
生成包含所述第一函数段序列的动态库文件。
4.根据权利要求1或2所述的方法,其特征在于,在所述根据所述启动程序指令获取加载脚本之前,所述方法还包括:
获取程序跟踪文件;
根据所述程序跟踪文件生成调用关系图,所述调用关系图包括函数调用顺序和函数调用次数;
根据所述调用关系图确定包括所述第一函数段和所述第二函数段的第一函数段序列;
为所述第一函数段序列的每个函数段分配地址偏移量;
根据所述第一函数段序列中每个函数段的地址偏移量创建加载脚本。
5.根据权利要求4所述的方法,其特征在于,所述方法还包括:
从所述调用关系图中选取多个目标函数,所述多个目标函数中任意两个目标函数不具有函数调用关系且每个目标函数的被调用次数大于或等于预设阈值;
为所述目标函数对应的目标函数段分配地址偏移量,所述目标函数段与所述地址偏移量包括的缓存集映射比特一一对应;
所述根据所述第一函数段序列中每个函数段的地址偏移量创建加载脚本包括:
根据所述第一函数段序列中每个函数段的地址偏移量和所述目标函数段的地址偏移量创建加载脚本。
6.一种网络设备,其特征在于,包括:
接收单元,用于接收启动程序指令;
加载单元,用于根据所述启动程序指令获取加载脚本,所述加载脚本包括第一函数段的地址偏移量和第二函数段的地址偏移量,所述第二函数段的地址偏移量等于所述第一函数段的地址偏移量与第一函数段的存储空间大小之和,所述第一函数段对应的函数和所述第二函数段对应的函数来自不同的函数库,所述第一函数段调用所述第二函数段的次数大于所述第一函数段调用其他函数段的次数;
所述加载单元,还用于根据所述加载脚本将包括第一函数段和第二函数段的动态库文件加载到内存;
处理单元,用于执行所述第一函数段以及从所述内存预取所述第二函数段。
7.根据权利要求6所述的网络设备,其特征在于,所述加载脚本还包括第三函数段的地址偏移量和第四函数段的地址偏移量,所述第四函数段的地址偏移量是所述第三函数段的地址偏移量与第三函数段的存储空间大小之和,所述第三函数段对应的函数和所述第四函数段对应的函数来自同一函数库,所述第三函数段调用所述第四函数段的次数大于所述第三函数段调用其他函数段的次数;所述动态库文件还包括所述第三函数段和所述第四函数段;
所述处理单元还用于执行所述第三函数段以及从内存预取所述第四函数段。
8.根据权利要求6或7所述的网络设备,其特征在于,
所述处理单元还用于获取程序跟踪文件;根据所述程序跟踪文件生成调用关系图,所述调用关系图包括函数调用顺序和函数调用次数;根据所述调用关系图确定包括所述第一函数段和所述第二函数段的第一函数段序列;根据所述第一函数段序列的序列信息创建所述链接脚本;
所述网络设备还包括:
编译单元,用于将程序编译为多个函数段;
链接单元,用于根据链接脚本从所述多个函数段中获取所述第一函数段序列;
所述链接单元,还用于生成包含所述第一函数段序列的动态库文件。
9.根据权利要求6或7所述的网络设备,其特征在于,
所述处理单元还用于获取程序跟踪文件;根据所述程序跟踪文件生成调用关系图,所述调用关系图包括函数调用顺序和函数调用次数;根据所述调用关系图确定包括所述第一函数段和所述第二函数段的第一函数段序列;为所述第一函数段序列的每个函数段分配地址偏移量;根据所述第一函数段序列中每个函数段的地址偏移量创建加载脚本。
10.根据权利要求9所述的网络设备,其特征在于,
所述处理单元还用于从调用关系图中选取多个目标函数,所述多个目标函数中任意两个目标函数不具有函数调用关系且每个目标函数的被调用次数大于或等于预设阈值;为所述目标函数对应的目标函数段分配地址偏移量,所述目标函数段与所述地址偏移量包括的缓存集映射比特一一对应;根据所述第一函数段序列中每个函数段的地址偏移量和所述目标函数段的地址偏移量创建加载脚本。
11.一种计算机可读存储介质,存储有指令,其特征在于,当其在计算机上运行时,使得计算机执行权利要求1至5中任一项所述的方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210395251.9A CN116954717A (zh) | 2022-04-15 | 2022-04-15 | 一种预取函数段的方法以及网络设备 |
PCT/CN2023/086516 WO2023197926A1 (zh) | 2022-04-15 | 2023-04-06 | 一种预取函数段的方法以及网络设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210395251.9A CN116954717A (zh) | 2022-04-15 | 2022-04-15 | 一种预取函数段的方法以及网络设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116954717A true CN116954717A (zh) | 2023-10-27 |
Family
ID=88328934
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210395251.9A Pending CN116954717A (zh) | 2022-04-15 | 2022-04-15 | 一种预取函数段的方法以及网络设备 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN116954717A (zh) |
WO (1) | WO2023197926A1 (zh) |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
ES2864004T3 (es) * | 2015-04-03 | 2021-10-13 | Iveco Spa | Método para mejorar y extender la lógica de una instalación de prueba para un componente de vehículo, en particular una batería o un alternador |
CN108153533B (zh) * | 2016-12-02 | 2020-12-11 | 腾讯科技(深圳)有限公司 | 制作安装程序的方法和装置、程序的安装方法和装置 |
CN112130926B (zh) * | 2020-09-17 | 2023-10-24 | 深圳市兆珑科技有限公司 | 应用程序运行的方法、装置、终端设备及存储介质 |
CN113986402A (zh) * | 2021-10-28 | 2022-01-28 | 上海米哈游璃月科技有限公司 | 函数调用方法、装置、电子设备及存储介质 |
-
2022
- 2022-04-15 CN CN202210395251.9A patent/CN116954717A/zh active Pending
-
2023
- 2023-04-06 WO PCT/CN2023/086516 patent/WO2023197926A1/zh unknown
Also Published As
Publication number | Publication date |
---|---|
WO2023197926A1 (zh) | 2023-10-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101994021B1 (ko) | 파일 조작 방법 및 장치 | |
US20180329725A1 (en) | Method and apparatus for loading application | |
US9715398B2 (en) | Program code loading method of application and computing system using the same | |
CN116680015B (zh) | 函数调用方法、装置、电子设备及可读存储介质 | |
CN112328319A (zh) | 一种支持ram文件系统的星载app动态加载方法 | |
US20160188453A1 (en) | Memory pool management method for sharing memory pool among different computing units and related machine readable medium and memory pool management apparatus | |
CN107451070B (zh) | 一种数据的处理方法和服务器 | |
US11808806B2 (en) | Allocation of test resources to perform a test of memory components | |
CN112368676A (zh) | 处理数据的方法和设备 | |
CN110022341B (zh) | 一种数据传输方法及相关设备 | |
CN116700629B (zh) | 数据处理方法和装置 | |
CN116954717A (zh) | 一种预取函数段的方法以及网络设备 | |
CN116701246B (zh) | 一种提升缓存带宽的方法、装置、设备及存储介质 | |
CN111666102A (zh) | 文件格式转换方法、芯片验证方法、相关装置及网络芯片 | |
CN115525343B (zh) | 一种并行译码的方法、处理器、芯片及电子设备 | |
WO2019104978A1 (zh) | 高速缓存cache地址映射方法以及相关设备 | |
CN110162483B (zh) | 静态内存碎片整理方法、装置、计算机设备及存储介质 | |
JP6519228B2 (ja) | データ配置決定装置、データ配置決定プログラム及びデータ配置決定方法 | |
CN112764897A (zh) | 任务请求的处理方法、装置、系统及计算机可读存储介质 | |
CN113867801A (zh) | 指令缓存、指令缓存组及其请求合并方法 | |
CN112800123A (zh) | 数据处理方法、装置、计算机设备和存储介质 | |
CN113448958B (zh) | 数据处理方法和装置、电子设备、存储介质 | |
CN117370225A (zh) | 一种数据预取方法、数据预取模块及预取器 | |
CN108268664B (zh) | 一种更新文件资源访问地址的方法和装置 | |
US20190163899A1 (en) | Load time anti-propagationprotection for a machine ... |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication |