CN113238973B - 定位操作系统性能瓶颈的方法、计算设备以及存储介质 - Google Patents
定位操作系统性能瓶颈的方法、计算设备以及存储介质 Download PDFInfo
- Publication number
- CN113238973B CN113238973B CN202110787419.6A CN202110787419A CN113238973B CN 113238973 B CN113238973 B CN 113238973B CN 202110787419 A CN202110787419 A CN 202110787419A CN 113238973 B CN113238973 B CN 113238973B
- Authority
- CN
- China
- Prior art keywords
- operating system
- performance
- function library
- library
- program
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 67
- 238000012360 testing method Methods 0.000 claims abstract description 71
- 238000011056 performance test Methods 0.000 claims abstract description 8
- 230000006870 function Effects 0.000 claims description 128
- 230000003068 static effect Effects 0.000 claims description 28
- 238000004891 communication Methods 0.000 description 16
- 230000008901 benefit Effects 0.000 description 5
- 238000010586 diagram Methods 0.000 description 5
- 230000008569 process Effects 0.000 description 4
- 238000012545 processing Methods 0.000 description 4
- 230000002093 peripheral effect Effects 0.000 description 3
- 230000000670 limiting effect Effects 0.000 description 2
- 230000007723 transport mechanism Effects 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000002829 reductive effect Effects 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种定位操作系统性能瓶颈的方法、计算设备以及存储介质,定位操作系统性能瓶颈的方法在计算设备中执行,该方法包括:基于第一性能测试程序分别对第一操作系统和第二操作系统进行性能测试,得到第一操作系统的第一测试值和第二操作系统的第二测试值;若第一测试值小于第二测试值,则利用链接器将驻留在第一操作系统的目标函数库与第一性能测试程序进行预设状态链接,生成第二性能测试程序;基于第二性能测试程序对第二操作系统进行性能测试,得到第三测试值;若第三测试值小于第二测试值,则目标函数库为所述第一操作系统的性能瓶颈。
Description
技术领域
本发明涉及互联网领域,具体涉及一种定位操作系统性能瓶颈的方法、计算设备以及存储介质。
背景技术
面对一个庞大复杂的Linux操作系统,定位性能问题需要丰富的经验和方法,首先要知道从什么地方开始分析,收集什么数据,以及如何分析这些数据。
当前收集Linux操作系统数据的工具很多(例如perf、blktrace、sar等工具),可以直接使用这些工具深入分析了解性能瓶颈,但这样做太耗时。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的定位操作系统性能瓶颈的方法、计算设备以及存储介质。
根据本发明的一个方面,提供了一种定位操作系统性能瓶颈的方法,在计算设备中执行,该方法包括:基于第一性能测试程序分别对第一操作系统和第二操作系统进行性能测试,得到第一操作系统的第一测试值和第二操作系统的第二测试值;若第一测试值小于第二测试值,则利用链接器将驻留在第一操作系统的目标函数库与第一性能测试程序进行预设状态链接,生成第二性能测试程序;基于第二性能测试程序对第二操作系统进行性能测试,得到第三测试值;若第三测试值小于第二测试值,则定位目标函数库为第一操作系统的性能瓶颈。
可选地,在根据本发明的定位操作系统性能瓶颈的方法中,第一操作系统和第二操作系统至少包括:系统层,至少包括系统内核函数库和驱动函数库;非系统层,至少包括调用接口函数库、元件函数库和应用函数库;目标函数库为调用接口函数库、元件函数库和应用函数库中的一种。
可选地,在根据本发明的定位操作系统性能瓶颈的方法中,还包括步骤:遍历非系统层中的所有目标函数库;若所有目标函数均非第一操作系统的性能瓶颈,则系统层为第一操作系统的性能瓶颈。
可选地,在根据本发明的定位操作系统性能瓶颈的方法中,第一操作系统和第二操作系统所搭载的硬件配置相同。
可选地,在根据本发明的定位操作系统性能瓶颈的方法中,若第一测试值小于第二测试值,则利用链接器将驻留在第一操作系统的目标函数库与第一性能测试程序进行预设状态链接,生成第二性能测试程序的步骤包括:基于目标函数库的类型,确定预设状态链接的链接方式;基于所确定的链接方式所对应的链接参数,对第一性能测试程序进行编译,得到编译好的第一性能测试程序;利用链接器将编译好的第一性能测试程序与目标函数库进行链接,生成第二性能测试程序。
可选地,在根据本发明的定位操作系统性能瓶颈的方法中,在基于第二性能测试程序对第二操作系统进行性能测试,得到第三测试值的步骤之前,还包括:将第二性能测试程序二进制拷贝到第二操作系统。
可选地,在根据本发明的定位操作系统性能瓶颈的方法中,目标函数库为静态库或动态库中的一种。
可选地,根据本发明的内定位操作系统性能瓶颈的方法中,预设状态链接的链接方式包括静态链接和动态链接,以及基于目标函数库的类型,确定预设状态链接方式的步骤包括:若目标函数库为静态库,则将目标函数库与第一性能测试程序进行静态链接;若目标函数库为动态库,则将目标函数库与第二性能测试程序进行动态链接。
根据本发明的又一个方面,提供一种计算设备,包括:至少一个处理器;和存储有程序指令的存储器,其中,所述程序指令被配置为适于由所述至少一个处理器执行,所述程序指令包括用于执行上述方法的指令。
根据本发明的又一个方面,提供一种存储有程序指令的可读存储介质,当所述程序指令被计算设备读取并执行时,使得所述计算设备执行上述的方法。
根据本发明的方案,利用静态链接或动态链接的方式将性能差的系统中的目标函数库与性能测试程序进行编译与链接,再将性能测试程序植入到性能好的系统中进行执行,使得在测试性能好的系统时,不依赖其本身的目标函数库,而是依赖性能差的目标函数库,以此,判断出目标函数库是否为性能差的系统的性能瓶颈。
根据本发明提供的定位操作系统性能瓶颈的方法,能够将复杂系统的性能问题定位范围缩小,快速定位问题属于哪个函数库,将有限的精力集中到系统性能瓶颈的解决方案上。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了根据本发明一个实施例的计算设备100的示意图;
图2示出了根据本发明一个实施例的定位操作系统性能瓶颈的方法200的流程;
图3示出了根据本发明一个实施例的系统架构300;
图4示出了根据本发明一个实施例的定位性能瓶颈在系统架构中某层的方法400的流程图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
Linux操作系统有很多性能分析工具,例如“perf、blktrace、sar”等工具,可以直接使用这些工具深入分析了解性能瓶颈,但这样做太耗时。
通常,将两个Linux操作系统性能对比时,如果一个系统的某项性能差,需要找出差的原因,操作系统很庞大,由应用、基础库、kernel以及驱动等组成,定位操作系统的某一项性能差是一个复杂的问题,没有简单的方法,但可以将一个复杂问题分解,找到性能瓶颈的核心范围,提高问题定位效率。
为解决前述现有技术中存在的问题,提出了本发明的方案。本发明的一个实施例提供了一种定位操作系统性能瓶颈的方法,该定位操作系统性能瓶颈的方法可以在计算设备中执行。
图1示出了根据本发明一个实施例的计算设备100的结构图。如图1所示,在基本的配置102中,计算设备100典型地包括系统存储器106和一个或者多个处理器104。存储器总线108可以用于在处理器104和系统存储器106之间的通信。
取决于期望的配置,处理器104可以是任何类型的处理,包括但不限于:微处理器(µP)、微控制器(µC)、数字信息处理器(DSP)或者它们的任何组合。处理器104可以包括诸如一级高速缓存110和二级高速缓存112之类的一个或者多个级别的高速缓存、处理器核心114和寄存器116。示例的处理器核心114可以包括运算逻辑单元(ALU)、浮点数单元(FPU)、数字信号处理核心(DSP核心)或者它们的任何组合。示例的存储器控制器118可以与处理器104一起使用,或者在一些实现中,存储器控制器118可以是处理器104的一个内部部分。
取决于期望的配置,系统存储器106可以是任意类型的存储器,包括但不限于:易失性存储器(诸如RAM)、非易失性存储器(诸如ROM、闪存等)或者它们的任何组合。计算设备中的物理内存通常指的是易失性存储器RAM,磁盘中的数据需要加载至物理内存中才能够被处理器104读取。系统存储器106可以包括操作系统120、一个或者多个应用122以及程序数据124。应用122实际上是多条程序指令,其用于指示处理器104执行相应的操作。在一些实施方式中,在一些实施方式中,应用122可以布置为在操作系统上由一个或多个处理器104利用程序数据124执行指令。操作系统120例如可以是Linux、Windows等,其包括用于处理基本系统服务以及执行依赖于硬件的任务的程序指令。应用122包括用于实现各种用户期望的功能的程序指令,应用122例如可以是浏览器、即时通讯软件、软件开发工具(例如集成开发环境IDE、编译器等)等,但不限于此。当应用122被安装到计算设备100中时,可以向操作系统120添加驱动模块。
在计算设备100启动运行时,处理器104会从系统存储器106中读取操作系统120的程序指令并执行。应用122运行在操作系统120之上,利用操作系统120以及底层硬件提供的接口来实现各种用户期望的功能。当用户启动应用122时,应用122会加载至系统存储器106中,处理器104从系统存储器106中读取并执行应用122的程序指令。
计算设备100还包括储存设备132,储存设备132包括可移除储存器136和不可移除储存器138,可移除储存器136和不可移除储存器138均与储存接口总线134连接。
计算设备100还可以包括有助于从各种接口设备(例如,输出设备142、外设接口144和通信设备146)到基本配置102经由总线/接口控制器130的通信的接口总线140。示例的输出设备142包括图形处理单元148和音频处理单元150。它们可以被配置为有助于经由一个或者多个A/V端口152与诸如显示器或者扬声器之类的各种外部设备进行通信。示例外设接口144可以包括串行接口控制器154和并行接口控制器156,它们可以被配置为有助于经由一个或者多个I/O端口158和诸如输入设备(例如,键盘、鼠标、笔、语音输入设备、触摸输入设备)或者其他外设(例如打印机、扫描仪等)之类的外部设备进行通信。示例的通信设备146可以包括网络控制器160,其可以被布置为便于经由一个或者多个通信端口164与一个或者多个其他计算设备162通过网络通信链路的通信。
网络通信链路可以是通信介质的一个示例。通信介质通常可以体现为在诸如载波或者其他传输机制之类的调制数据信号中的计算机可读指令、数据结构、程序模块,并且可以包括任何信息递送介质。“调制数据信号”可以这样的信号,它的数据集中的一个或者多个或者它的改变可以在信号中编码信息的方式进行。作为非限制性的示例,通信介质可以包括诸如有线网络或者专线网络之类的有线介质,以及诸如声音、射频(RF)、微波、红外(IR)或者其它无线介质在内的各种无线介质。这里使用的术语计算机可读介质可以包括存储介质和通信介质二者。
计算设备100还包括与总线/接口控制器130相连的储存接口总线134。储存接口总线134与储存设备132相连,储存设备132适于进行数据存储。示例的储存设备132可以包括可移除储存器136(例如CD、DVD、U盘、可移动硬盘等)和不可移除储存器138(例如硬盘驱动器HDD等)。
在根据本发明的计算设备100中,应用122包括执行方法200的多条程序指令。
图2示出了根据本发明一个实施例的定位操作系统性能瓶颈的方法200的流程图。方法200适于在计算设备(例如前述计算设备100)中执行。
如图2所示,方法200的目的是提供一种能够快速定位操作系统性能瓶颈的方法,始于步骤S202。
在步骤S202中,基于第一性能测试程序分别对第一操作系统和第二操作系统进行性能测试,得到第一操作系统的第一测试值和第二操作系统的第二测试值。
需要说明的是,本实施例提供的定位操作系统性能瓶颈的方法,适用于类Unix(例如Unix,BSD,Linux)操作系统,例如,第一操作系统和第二操作系统均为布置在计算设备上的Linux操作系统,并且,第一操作系统和第二操作系统的负载和硬件配置相同,防止硬件等因素干扰对系统性能瓶颈的定位。
在本实施例中,第一性能测试程序可为常规的系统性能测试工具,例如Unixbench、kylinTOP、LoadRunner等,本实施例对此不做限定。
优选地,在本实施例中选用UnixBench为第一性能测试程序,UnixBench是一个类unix系(Unix,BSD,Linux)统下的性能测试工具,一个开源工具,被广泛用与测试linux系统主机的性能。Unixbench的主要测试项目有:系统调用、读写、进程、图形化测试、2D、3D、管道、运算、C库等系统基准性能提供测试数据。
在一个具体示例中,在两个操作系统(第一操作系统和第二操作系统)负载及配置相同的条件下,利用第一性能测试工具(Unixbench)分别对第一操作系统和第二操作系统进行性能测试,得到对应的第一测试值和第二测试值。其中,第一测试值和第二测试值可以为数值,例如,第一测试值为1400分,第二测试值为1600分。换言之,第一操作系统的性能评分为1400分,第二操作系统的性能评分为1600分。
在步骤S204中,判断第一测试值与第二测试值的大小,若第一测试值小于第二测试值,则利用链接器将驻留在第一操作系统的目标函数库与第一性能测试程序进行预设状态链接,生成第二性能测试程序。
通过步骤S202可知,第一测试值小于第二测试值,则说明第一操作系统的性能比第二操作系统的性能差,因此,在本实施中,需要定位第一操作系统的性能瓶颈,即找到第一操作系统性能差的原因,定位第一操作系统的问题所在。
容易理解的是,操作系统(operation system,简称OS)是管理计算机硬件与软件资源的计算机程序,其由执行不同功能的函数库组成。举例而言,系统可包括Operatingsystem kernel(系统内核)函数库、drivers(驱动)函数库、glibc(系统程序)函数库、Systern Call interface(系统调用接口,简称SCI)函数库、Libraries(元件)函数库、Application(应用)函数库等。在定位系统的性能瓶颈时,只要找出问题函数库,即可定位出该系统的性能瓶颈。
在本实施例中,通过将第一操作系统的目标函数库通过静态链接和或动态链接的方式与性能测试程序(第一测试程序)进行链接,形成新的性能测试程序(第二测试程序)。此时,第二性能测试程序已然携带了第一操作系统的目标函数库,利用携带有目标函数库的第二性能测试程序去测试第一操作系统,可判断该目标函数库是否为第一操作系统的性能瓶颈。
静态链接是编译程序常用的方法,静态链接是在编译阶段完成的,例如,有一个应用程序xx.c调用了静态库tirpc.a的函数,那么在编译xx.c时,使用静态链接的方法将tirpc.a和xx.c的目标文件链接到一起生成可执行程序,生成的可执行程序包含tirpc.a。xx.c和tirpc.a生成的可执行程序移动到任何一个不包含tirpc.a的系统上都可以运行,这是静态链接的好处,但也有缺点,生成的可执行程序占用空间大且冗余,如果另一个应用程序yy.c 也使用tirpc.a,编译yy.c静态链接tirpc.a,使得静态链接tirpc.a.在xx.c和yy.c中都有,造成tirpc.a的二进制冗余,所以,动态链接产生了,xx.c和yy.c在编译阶段记录使用tirpc.a,在执行时,由链接器ld完成tirpc.a的寻找,动态链接减少了冗余。
当然,虽然动态链接在一定程度上优于静态链接,但是,并不是所有的函数库都适用动态链接,这取决于函数库本身是属于静态库还是动态库。例如,glibc函数库为静态库,而Libraries为动态库。因此,在一些实施例中,目标函数库为静态库或动态库中的一种。
需要说明的是,动态链接由静态链接发展而来,动态链接链接的函数库也可进行静态链接,换言之,系统中的所有函数库均可进行静态链接。
另外,为方便理解与叙述,步骤S204还包括如下子步骤:
S224、基于目标函数库的类型,确定预设状态链接的链接方式。
正如前述记载,动态链接相对于静态链接而言,可以避免冗余,减小资源浪费,因此,在本实施中,在对目标函数库与第一性能测试程序进行预设状态链接之前,需要先判断出目标函数库是属于静态库还是动态库。若目标函数库为静态库,则将目标函数库与第一性能测试程序进行静态链接;若目标函数库为动态库,则将目标函数库与第二性能测试程序进行动态链接。
S244、基于所确定的链接方式所对应的链接参数,对第一性能测试程序进行编译,得到编译好的第一性能测试程序。
具体地,可使用gcc-static、gcc-WL-Bstatic-Lxxx或gcc-WL-Bstatic-Lxxx链接参数编译性能测试工具。默认情况下,GCC/G++链接时优先链接动态库,如果没有动态库,则链接相应的静态库。-static 是让gcc进行静态编译,也就是把所有都需要的函数库都集成进编译出来的程序上,这个程序就可以不依赖外部的函数库运行了。-Wl,-Bstatic和 –Wl,-Bdynamic 分别供用户指定链接动态库或者静态库。-lxxx中的xxx表示性能测试工具调用的目标函数库的名称,例如-l Libraries,则性能测试程序可调用Libraries库,具体可以通过ldd命令获取,ldd的详细使用本实施例不展开说明。
S264、利用链接器将编译好的第一性能测试程序与目标函数库进行链接,生成第二性能测试程序。
需要说明的是,上述第二性能测试程序的形成过程是在第一操作系统(性能差)上完成的,形成的第二性能测试程序需二进制拷贝到第二操作系统(性能优)中,具体地,将第二性能测试程序二进制拷贝到所述第二操作系统。
在步骤S206中,基于第二性能测试程序对第二操作系统进行性能测试,得到第三测试值。
由于,第二性能测试程序中携带了第一操作系统中的目标函数库,因此,在利用第二性能测试程序对第二操作系统进行再次测试时,第二性能测试程序不再对第二操作系统中与该目标函数库相对应的函数库进行测试,而是测试携带的目标函数库。
以目标函数为glibc函数库为例,第二性能测试程序绑定了第一操作系统的glibc函数库(即携带了第一操作系统的glibc函数库),则利用第二性能测试程序对第二操作系统进行测试时,不再对第二操作系统的glibc函数库进行测试,依旧对第一操作系统的glibc函数库测试。
在步骤S208中,若第三测试值小于所述第二测试值,则定位目标函数库为第一操作系统的性能瓶颈。
继续前述示例,若第三测试值为1400,而第二测试值为1600。已知第二操作系统在两次测试结果中,系统评分由1600下降到1400,则说明是第二性能测试程序携带的第一操作系统的目标函数库出了问题,则可判断出第一操作系统的性能瓶颈为该目标函数。
当然,如果第三测试值优于或持平第二测试值,说明该目标函数并非第一操作系统的性能瓶颈,则切换其他目标函数进行性能瓶颈的定位。
在一些实施例中,第一操作系统和第二操作系统至少包括:系统层,至少包括系统内核函数库和驱动函数库;非系统层,至少包括调用接口函数库、元件函数库和应用函数库;目标函数库为调用接口函数库、元件函数库和应用函数库中的一种。
以上为对操作系统的架构进行的简单分层,但是,对于系统架构的分层可根据实际情况进行划分,并不限制与分为系统层和非系统层。也可为其他分层方式,例如,如图3所示,根据目标函数库的调用和被调用情况,可将非系统层细分为应用函数库层、元件函数库层和系统程序库等层。
参考图3,在操作系统的框架结构中,上层函数库可调用下次函数库,但下层函数库不可调用上层函数库,例如,上层的Application可调用Libraries、glibc或Operatingsystem kernel等下层函数库,或者,Libraries可调用glibc或Operating system kernel、glibc可调用Operating system kernel,但是下层的Operating system kernel不可调用上层的glibc等函数库。如果第二性能测试程序携带的目标函数库,为系统层的函数库,例如,第二性能测试程序携带了第一操作系统Operating system kernel函数库,由于携带的Operating system kernel函数库只能被调用,而不能调用较上层的Libraries或glibc等函数库,则存在定位不准确的问题(由于第一操作系统和第二操作系统设置了相同的系统负载和硬件环境,因此,此处不考虑Hardware Layer(硬件层))。
当通过上述定位操作系统性能瓶颈的方法,判断出某一目标函数并非为第一操作系统的性能瓶颈之后,可更换目标函数库再次进行判断,最终找出第一操作系统的性能瓶颈。具体地,遍历非系统层中的所有目标函数库。若所有目标函数库均非第一操作系统的性能瓶颈,则系统层为第一操作系统的性能瓶颈。当然,如果最终通过判断系统层中的各目标函数库也不是第一操作系统的性能瓶颈的话,那可能是Hardware Layer(硬件层)出了问题。
另外,为更一步的节约定位时间,可采用上述方法直接定位系统性能瓶颈在系统架构的哪一层上。在一个具体示例中,以如图3所示的系统架构分层300为例,对本实施例的方法进行如下说明,图4示出了定位性能瓶颈在系统架构300中某层的方法400的流程图,在性能差的系统上(第一操作系统),使用gcc -static 静态链接参数编译第一性能测试程序,形成第二性能测试程序;将编译好的第二性能测试程序二进制拷贝到性能好的系统(第二操作系统)上,如果测试到第二操作系统的测试得分优于或持平性在先测试的第二操作系统的性能得分,则性能差的系统(第一操作系统)的问题在Operating System(OS)kernel,drivers,etc这一层,否则问题在Operating System(OS)kernel,drivers,etc的上面层。
如果问题定位到Operating System(OS)kernel,drivers,etc的上层,在性能差的系统上使用gcc -Wl -Bstatic -lxxx静态链接编译第一性能测试程序,形成第二性能测试程序。-lxxx中的xxx表示性能测试程序调用Libraries层的库,获取性能测试程序调用Libraries层的库。将重新编译好的第二性能测试程序再拷贝到性能好的系统(第一操作系统)上,如果测试到第二操作系统的测试得分优于或持平性在先测试的第二操作系统的性能得分,则性能差的系统问题在glibc/System Call Interface(SCI)层,否则问题在Libraries层。
在另一个示例中,以目标函数为glibc函数库为例,对上述方法的执行过程进行如下说明:
以性能测试程序Unixbench的syscall为例,Unixbench工具的Makefile在编译性能测试工具使用的动态链接。Syscall1的功能是测试Linux操作系统的系统调用性能,它只调用了glibc库,在两个Linux操作系统负载及配置相同的条件下,第一Linux系统得分1400分,第二Linux系统得分1600分,而对于一个新手来说,可能无发定位第一Linux系统的性能瓶颈。对于一个有经验的性能调优工程师来说,这个测试项与glibc和Operating System(OS)kernel相关,具体是哪一层的问题,需要深入分析跟踪,glibc和Operating System(OS)kernel都很复杂,不是简单的几百几千行代码或逻辑构成,优先分析哪一层,如果根据经验猜对,节省很多时间,反之,如果猜错,会浪费宝贵的时间。使用上面介绍的静态链接方法,在第一操作系统上,将glibc与syscall1目标程序静态链接生成可执行程序syscall2,再将编译好的可执行程序syscall2放到第二Linux系统上执行,syscall2在第二Linux系统上执行时,只依赖第二Linux系统的Operating System(OS)kernel,不依赖第二Linux系统的glibc,测试结果1400分,说明是glibc的问题。新手或有经验的工程师,可以从跟踪分析glibc开始分析第一Linux系统上syscall得分低的性能问题了。
这里描述的各种技术可结合硬件或软件,或者它们的组合一起实现。从而,本发明的方法和设备,或者本发明的方法和设备的某些方面或部分可采取嵌入有形媒介,例如可移动硬盘、U盘、软盘、CD-ROM或者其它任意机器可读的存储介质中的程序代码(即指令)的形式,其中当程序被载入诸如计算机之类的机器,并被所述机器执行时,所述机器变成实践本发明的设备。
在程序代码在可编程计算机上执行的情况下,计算设备一般包括处理器、处理器可读的存储介质(包括易失性和非易失性存储器和/或存储元件),至少一个输入装置,和至少一个输出装置。其中,存储器被配置用于存储程序代码;处理器被配置用于根据该存储器中存储的所述程序代码中的指令,执行本发明的方法。
以示例而非限制的方式,可读介质包括可读存储介质和通信介质。可读存储介质存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息。通信介质一般以诸如载波或其它传输机制等已调制数据信号来体现计算机可读指令、数据结构、程序模块或其它数据,并且包括任何信息传递介质。以上的任一种的组合也包括在可读介质的范围之内。
在此处所提供的说明书中,算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与本发明的示例一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的较佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下被实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员应当理解在本文所公开的示例中的设备的模块或单元或组件可以布置在如该实施例中所描述的设备中,或者可替换地可以定位在与该示例中的设备不同的一个或多个设备中。前述示例中的模块可以组合为一个模块或者此外可以分成多个子模块。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
此外,所述实施例中的一些在此被描述成可以由计算机系统的处理器或者由执行所述功能的其它装置实施的方法或方法元素的组合。因此,具有用于实施所述方法或方法元素的必要指令的处理器形成用于实施该方法或方法元素的装置。此外,装置实施例的在此所述的元素是如下装置的例子:该装置用于实施由为了实施该发明的目的的元素所执行的功能。
如在此所使用的那样,除非另行规定,使用序数词“第一”、“第二”、“第三”等等来描述普通对象仅仅表示涉及类似对象的不同实例,并且并不意图暗示这样被描述的对象必须具有时间上、空间上、排序方面或者以任意其它方式的给定顺序。
尽管根据有限数量的实施例描述了本发明,但是受益于上面的描述,本技术领域内的技术人员明白,在由此描述的本发明的范围内,可以设想其它实施例。此外,应当注意,本说明书中使用的语言主要是为了可读性和教导的目的而选择的,而不是为了解释或者限定本发明的主题而选择的。因此,在不偏离所附权利要求书的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。对于本发明的范围,对本发明所做的公开是说明性的而非限制性的,本发明的范围由所附权利要求书限定。
Claims (8)
1.一种定位操作系统性能瓶颈的方法,在计算设备上执行,所述方法包括:
基于第一性能测试程序分别对第一操作系统和第二操作系统进行性能测试,得到所述第一操作系统的第一测试值和所述第二操作系统的第二测试值,其中,所述第一操作系统和第二操作系统的类型相同,且第一操作系统和第二操作系统的负载和硬件配置相同;
若所述第一测试值小于所述第二测试值,则利用链接器将驻留在所述第一操作系统的目标函数库与所述第一性能测试程序进行预设状态链接,生成第二性能测试程序,包括:基于所述目标函数库的类型,确定预设状态链接的链接方式,基于所确定的链接方式所对应的链接参数,对所述第一性能测试程序进行编译,得到编译好的第一性能测试程序,利用所述链接器将编译好的第一性能测试程序与所述目标函数库进行链接,生成第二性能测试程序,其中,所述目标函数库为静态库或动态库中的一种;
基于所述第二性能测试程序对所述第二操作系统进行性能测试,得到第三测试值;
若所述第三测试值小于所述第二测试值,则定位所述目标函数库为所述第一操作系统的性能瓶颈;
其中,测试值越小,则操作系统性能越差。
2.如权利要求1所述的方法,其中,所述第一操作系统和第二操作系统至少包括:
系统层,至少包括系统内核函数库和驱动函数库;
非系统层,至少包括调用接口函数库、元件函数库和应用函数库;
所述目标函数库为所述调用接口函数库、元件函数库和应用函数库中的一种。
3.如权利要求2所述的方法,还包括步骤:
遍历所述非系统层中的所有目标函数库;
若所有所述目标函数库均非所述第一操作系统的性能瓶颈,则所述系统层为所述第一操作系统的性能瓶颈。
4.如权利要求1所述的方法,其中,所述第一操作系统和所述第二操作系统所搭载的硬件配置相同。
5.如权利要求1所述的方法,其中,在基于第二性能测试程序对第二操作系统进行性能测试,得到第三测试值的步骤之前,还包括:
将所述第二性能测试程序二进制拷贝到所述第二操作系统。
6.如权利要求1所述的方法,其中,预设状态链接的链接方式包括静态链接和动态链接,以及所述基于目标函数库的类型,确定预设状态链接方式的步骤包括:
若所述目标函数库为静态库,则将所述目标函数库与所述第一性能测试程序进行静态链接;
若所述目标函数库为动态库,则将所述目标函数库与所述第二性能测试程序进行动态链接。
7.一种计算设备,包括:
至少一个处理器;和
存储有程序指令的存储器,其中,所述程序指令被配置为适于由所述至少一个处理器执行,所述程序指令包括用于执行如权利要求1-6中任一项所述方法的指令。
8.一种存储有程序指令的可读存储介质,当所述程序指令被计算设备读取并执行时,使得所述计算设备执行如权利要求1-6中任一项所述的方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111092768.2A CN113778892B (zh) | 2021-07-13 | 2021-07-13 | 定位操作系统性能瓶颈的方法、计算设备以及存储介质 |
CN202110787419.6A CN113238973B (zh) | 2021-07-13 | 2021-07-13 | 定位操作系统性能瓶颈的方法、计算设备以及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110787419.6A CN113238973B (zh) | 2021-07-13 | 2021-07-13 | 定位操作系统性能瓶颈的方法、计算设备以及存储介质 |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111092768.2A Division CN113778892B (zh) | 2021-07-13 | 2021-07-13 | 定位操作系统性能瓶颈的方法、计算设备以及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113238973A CN113238973A (zh) | 2021-08-10 |
CN113238973B true CN113238973B (zh) | 2021-10-15 |
Family
ID=77135373
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110787419.6A Active CN113238973B (zh) | 2021-07-13 | 2021-07-13 | 定位操作系统性能瓶颈的方法、计算设备以及存储介质 |
CN202111092768.2A Active CN113778892B (zh) | 2021-07-13 | 2021-07-13 | 定位操作系统性能瓶颈的方法、计算设备以及存储介质 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111092768.2A Active CN113778892B (zh) | 2021-07-13 | 2021-07-13 | 定位操作系统性能瓶颈的方法、计算设备以及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (2) | CN113238973B (zh) |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102541739B (zh) * | 2011-12-31 | 2016-01-13 | 曙光信息产业股份有限公司 | Linux操作系统的测试方法和装置 |
US20130179144A1 (en) * | 2012-01-06 | 2013-07-11 | Frank Lu | Performance bottleneck detection in scalability testing |
CN103049245B (zh) * | 2012-10-25 | 2015-12-02 | 浪潮电子信息产业股份有限公司 | 一种基于中央处理器cpu多核平台的软件性能优化方法 |
US20150082107A1 (en) * | 2013-09-19 | 2015-03-19 | Jicksen JOY | State machine based functional stress tests |
CN108521353B (zh) * | 2018-04-02 | 2022-04-01 | 深圳前海微众银行股份有限公司 | 定位性能瓶颈的处理方法、设备及可读存储介质 |
CN110580226B (zh) * | 2019-09-23 | 2021-09-14 | 上海创景信息科技有限公司 | 操作系统级程序的目标码覆盖率测试方法、系统及介质 |
CN111143179B (zh) * | 2019-12-24 | 2023-06-13 | 中信银行股份有限公司 | 定位性能瓶颈的方法、装置、存储介质及电子设备 |
CN112711521A (zh) * | 2021-03-25 | 2021-04-27 | 浙江华创视讯科技有限公司 | 一种自动化性能测试方法及系统 |
CN112988544B (zh) * | 2021-04-20 | 2021-08-27 | 北京国科环宇科技股份有限公司 | 操作系统性能瓶颈的分析方法、系统、设备和存储介质 |
-
2021
- 2021-07-13 CN CN202110787419.6A patent/CN113238973B/zh active Active
- 2021-07-13 CN CN202111092768.2A patent/CN113778892B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN113778892A (zh) | 2021-12-10 |
CN113778892B (zh) | 2024-05-07 |
CN113238973A (zh) | 2021-08-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6820256B2 (en) | System and method for whole-system program analysis | |
US10394694B2 (en) | Unexplored branch search in hybrid fuzz testing of software binaries | |
US9495136B2 (en) | Using aliasing information for dynamic binary optimization | |
US7818730B1 (en) | Automatic minimal build dependency determination and building an executable with source code | |
US20110145799A1 (en) | Path-sensitive dataflow analysis including path refinement | |
JPH08512152A (ja) | インクリメンタル生成システム | |
US20130145347A1 (en) | Automatic modularization of source code | |
CN109508178A (zh) | 一种程序开发方法及装置 | |
JPH02217926A (ja) | コード生成方法 | |
CN110058861B (zh) | 源码处理方法及装置、存储介质、电子设备 | |
CN112016099B (zh) | 二进制程序过程间静态污点分析方法及系统 | |
JP2018005890A (ja) | 未知のプログラムバイナリのための入力発見 | |
JP2013206291A (ja) | プログラム、コード生成方法および情報処理装置 | |
CN112230904A (zh) | 基于接口文档的代码生成方法、装置、存储介质及服务器 | |
US11074153B2 (en) | Collecting application state in a runtime environment for reversible debugging | |
KR102606235B1 (ko) | 데이터센터 스토리지 평가 프레임워크 시뮬레이션 방법 | |
CN113485712B (zh) | 一种内核裁剪方法及计算设备 | |
US20130346930A1 (en) | Best clock frequency search for fpga-based design | |
CN114138376A (zh) | 一种在应用中加载插件的方法、计算设备及存储介质 | |
CN113238973B (zh) | 定位操作系统性能瓶颈的方法、计算设备以及存储介质 | |
JP7410269B2 (ja) | テスト・ベクタを使用した高水準コンストラクトの最適化の自動検証 | |
CN117813586A (zh) | 对具有未保存的源代码更改的正在运行的应用进行热重载 | |
CN112114811A (zh) | 一种编译方法、装置和设备 | |
US20230359547A1 (en) | Targeted Testing for Modular Software Applications | |
JP5067705B2 (ja) | 異常系テスト支援装置、異常系テスト支援方法、及びプログラム |
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 |