首页 > 其他分享 >软件性能计时

软件性能计时

时间:2022-11-23 11:31:52浏览次数:53  
标签:函数 毫秒 int 性能 eax 计时 软件 cpu



    在单元测试中,有一部分的内容就是计算各个函数计算时间,这样可以知道性能瓶颈在哪里。所以,如何对软件进行性能计时一直是我关注的一个话题。就我目前的认知来说,不同的环境对软件性能其实要求是不一样的,所以有的软件可能是秒级,有的是毫秒级的,而有的则是cpu周期级别的。下面,我们就可以一一开始介绍了。


(1)秒级

    利用秒对软件进行度量其实是很少的,但是它可以为我们提供一种基本的思路。在软件计算前,我们计算当前的基本时间,在服务结束后,我们再计算一下当前的时间,中间的差值就是实际运行的时间。所用的基本函数就是_strtime,


(2)毫秒

    对于绝大多数软件来说,可以通过毫秒函数获得实际业务运行的时间。对于vxWorks操作系统来说,这个函数是tickGet,而在windows系统里面,这个函数是GetTickCount,使用起来的都非常得方便。


(3)时钟周期

    就像前面说过的,毫秒级的度量对于大多数函数来说足够了。但是对于系统级别的应用,特别是在系统切换的度量上面,考虑实际指令究竟花费了多长时间,毫秒级的函数肯定不好使了。在intel芯片上就存在这样的指令,即为rdtsc。调用了这个指令,对应的指令周期就可以保存下来。整个周期数值是一个64位数,高位记录在edx,低位记录在eax。


(4)多核时钟周期

    前面说到的时钟周期计算基本上都是建立在单核的领域,但是现在很多电脑配置都是多核的cpu处理器,而且对于不同core的cpu来说,不同的cpu其实它的时钟周期是不一样的,所以这里就涉及到如果对多核的cpu进行周期计算的问题。好在windows已经为我们考虑到了这个问题,我们可以通过设置SetThreadAffinityMask这个函数帮我们把线程绑定在某一个cpu之上,这样就不会有什么差错了。编写完程序之后,大家可以通过taskmgr程序看看结果,就会有不一样的认识。
 


示例代码:


#include <stdio.h>
#include <windows.h>

void test1()
{
unsigned int lower;
unsigned int higher;

__asm
{
push eax
push edx
rdtsc
mov lower, eax
mov higher, edx
pop edx
pop eax
}

printf("cpu cycle = 0x%08x%08x\n", higher, lower);
}
void test2()
{
unsigned int before;
unsigned int after;

__asm
{
push eax
rdtsc
mov before, eax
rdtsc
mov after, eax
pop eax
}

printf("single instuct time = 0x%08x\n", after - before);
}

int main(int argc, char* argv[])
{
char buffer[16];
int value;

SetThreadAffinityMask(GetCurrentThread(), 2);
_strtime(buffer);
printf("%s\n",buffer);

value = GetTickCount();
printf("interval = %d\n", GetTickCount() - value);

test1();
test2();
return 1;
}





标签:函数,毫秒,int,性能,eax,计时,软件,cpu
From: https://blog.51cto.com/feixiaoxing/5880722

相关文章

  • 性能压力测试指导方案
    一、性能测试流程指导图二、测试目标测试商城4.0项目,对系统服务的性能压力测试,并对比样本数据,可以达到以下目的:了解量级数据模型高并发压测环境下,不同业务模型对服务......
  • 性能测试通用原则【3-1;2-5-10;80/20】
    如果设计说明书中没有给出明确的标准,那么可以参考国外的业内公认的一些标准:  3+1原则(指量、全、深+快)主要对性能测试设计、测试执行以及数据分析。量:包括业务量(业......
  • jmeter 性能测试 报错信息“address already in use:connect”解决方法
    jmeter性能测试报“addressalreadyinuse:connect”报错信息原因分析:这个问题的原因是windows端口被耗尽了(默认1024-5000),而且操作系统要2~4分钟才会重新释放这些端......
  • 硬件性能分析
    硬件性能分析一、CPU性能分析1、CPU:中央处理器,在服务器中是计算的核心 2、影响CPU性能的因素:架构,主频,核心数2.1架构:AMD(X86)、ARM(mac系统用M1)2.2主频:GHz......
  • React中性能优化的方案
    减轻state在state中只存储和组件渲染有关的数据不做渲染的数据不放在state中,直接挂载在this上即可,比如定时器的idimport{Component}from"react";​class......
  • Maxwell电磁分析软件下载安装教程(附Crack文件)
    Maxwell16.0WIN1064位安装步骤:1.Maxwell_16软件安装包到电脑磁盘根目录或英文路径文件夹下,并解压缩,然后双击打开Maxwell_160文件夹2.然后找到Autorun.exe,鼠标右击选择......
  • Maxwell电磁分析软件下载安装教程(附Crack文件)
    Maxwell16.0WIN1064位安装步骤:1.Maxwell_16软件安装包到电脑磁盘根目录或英文路径文件夹下,并解压缩,然后双击打开Maxwell_160文件夹 2.然后找到Autorun.exe,鼠标右击......
  • sap软件功能介绍及主要功能(模块)有哪些?
    SAP成立于1972年,最初称为SystemAnalysisProgramDevelopment(SystemanalyseProgrammentwicklung),后来采用缩写SAP。刚创立时,SAP是一家只有五个人的小公司。经过......
  • freeRTOS的软件定时器介绍和使用
    freeRTOS中加入了软件定时器这个功能组件,是一个可选的、不属于freeRTOS内核的功能,由定时器服务(其实就是一个定时器任务)来提供。软件定时器是当设定一个定时时间,当达到设定......
  • 性能测试知识科普(五):能力分层
    这是性能测试知识科普的第五篇文章。前面的文章分享了性能测试中的核心术语和指标、常用测试策略、压测工具选型以及性能需求分析的内容。写这篇文章的初衷是昨天有同学......