首页 > 系统相关 >内存性能引发的程序性能恶化案例

内存性能引发的程序性能恶化案例

时间:2024-04-12 13:55:48浏览次数:27  
标签:frontend 性能 案例 sec 内存 stalled cycles cpu

在一台机器上测试spec。发现性能很差。使用top去看,发现cpu可以占满,但即便能占用大量cpu资源吞吐量却上不去。使用perf stat去看。

# perf stat -a -p 946806
PID/TID switch overriding SYSTEM
^C
 Performance counter stats for process id '946806':

      6,025,883.23 msec task-clock                #  140.887 CPUs utilized
           312,303      context-switches          #   51.827 /sec
            30,953      cpu-migrations            #    5.137 /sec
             5,271      page-faults               #    0.875 /sec
18,419,584,593,620      cycles                    #    3.057 GHz
 1,706,212,757,162      stalled-cycles-frontend   #    9.26% frontend cycles idle
 5,115,942,543,739      stalled-cycles-backend    #   27.77% backend cycles idle
   379,510,007,890      instructions              #    0.02  insn per cycle
                                                  #   13.48  stalled cycles per insn
    77,529,286,532      branches                  #   12.866 M/sec
     2,348,792,126      branch-misses             #    3.03% of all branches

      42.771131433 seconds time elapsed

IPC低到只有0.02. stalled-cycles-backedn较高,这个值意味着指令在pipline中的执行阶段等待,cache miss(未显示)较低,cache-reference,context-switches很低,branch-miss也很低。这个给出的cpu运行画像就是一个程序在龟速执行,但是cpu主频是很高的,也就是很多时候cpu流水线在空等。但是感觉27.8的stalled-cycles-backed似乎解释不了这么大差距,再加上9%的stalled-cycles-frontend,也就是接近40%的时间是在空耗。但是IPC比正常(0.5)左右还是低了20多倍。“13.48 stalled cycles per insn” 这一行似乎可以说明问题,平均下来每条指令要经过13cycle的等待。

测试一下内存带宽,使用lmbench,同时看perf stat的情况:

perf stat -p 1624296 -- sleep 10

 Performance counter stats for process id '1624296':

         10,001.09 msec task-clock                #    1.000 CPUs utilized
                11      context-switches          #    1.100 /sec
                 4      cpu-migrations            #    0.400 /sec
                 3      page-faults               #    0.300 /sec
    29,999,862,632      cycles                    #    3.000 GHz
       210,826,110      stalled-cycles-frontend   #    0.70% frontend cycles idle
    29,654,123,819      stalled-cycles-backend    #   98.85% backend cycles idle
       132,381,904      instructions              #    0.00  insn per cycle
                                                  #  224.00  stalled cycles per insn
        20,053,547      branches                  #    2.005 M/sec
         1,397,823      branch-misses             #    6.97% of all branches

      10.002876336 seconds time elapsed

这就很能说明问题了,IPC低到看不到了,stalled-cycles-backed几乎百分百了,看来读写内存是一个重要的性能瓶颈。虽然在spec中测试stalled-cycles-backend并不是太高,那是被其他不读写内存的指令稀释了,专门测试内存性能才能更明显的看出问题。平均每个指令都要有200多的cycle等待,这个就很能说明问题,指令在执行的时候大部分时间都在等待内存读写的完成。

标签:frontend,性能,案例,sec,内存,stalled,cycles,cpu
From: https://www.cnblogs.com/banshanjushi/p/18131018

相关文章

  • 字节面试:ThreadLocal内存泄漏,怎么破?什么是 ITL、TTL、FTL?
    文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录博客园版为您奉上珍贵的学习资源:免费赠送:《尼恩Java面试宝典》持续更新+史上最全+面试必备2000页+面试必备+大厂必备+涨薪必备免费赠送:《尼恩技术圣经+高并发系列PDF》,帮你实现技术自由,完成职业升级,薪......
  • 肖sir_jmeter之性能实战(16.2)
    jmeter之性能实战=-=============================一、单接口的性能测试添加一个接口:案例:登录接口:url:POSThttp://cms.duoceshi.cn/cms/manage/loginJump.doPOSTdata:userAccount=admin&loginPwd=123456 1、调通登录接口  2、添加查看结果树和聚合报告  3、......
  • 3568F-物联网模块开发案例
     ......
  • 肖sir__ jmeter之性能测试
    jmeter之性能测试一、性能测试介绍1、什么叫做性能测试?(1)通过某些工具或手段来检测软件的某些指标是否达到了要求,这就是性能测试 (2)指通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试2、性能测试的时间?在功能测试完成后才能进行性能......
  • 一个糟糕的数据库架构设计优化案例
    聊聊一个糟糕的数据库架构设计带来的问题。技术人人都可以磨炼,但处理问题的思路和角度各有不同,希望这篇文章可以抛砖引玉。以一个例子为切入点一、问题背景某系统已经线上运行多年,数据量随着时间的推移越来越大。公司业务量还在不断增加,已经潜在威胁数据库的运行效率,急需清理历......
  • Linux页框管理(一)高端内存.md
    名词解释虚拟页(VP,VirtualPage),虚拟空间中的页;物理页(PP,PhysicalPage),物理内存中的页;磁盘页(DP,DiskPage),磁盘中的页。linux中的分页(linux2.6.11)页全局目录(PGD,PageGlobalDirectory)页上级目录(PUD,PageUpperDirectory)页中间目录(PMD,PageMiddle......
  • MySQL binlog超过binlog_expire_logs_seconds阈值没有删除案例
    生产环境有一套3个节点的MySQLInnoDBCluster,MySQL的版本为Serverversion:8.0.35MySQLCommunityServer-GPL,早上突然收到Zabbix的告警,其中一个节点出现空间告警:"/data:Diskspaceislow(used>80%)"检查分析后发现是因为MySQL的binlog没有清理导致空间报警,如下所示(b......
  • diskperf命令是一个用于管理和配置磁盘性能计数器的实用工具,可以帮助你监视和分析磁盘
    diskperf/?DISKPERF[-Y[D|V]|-N[D|V]][\\computername] -Y 在系统重新启动时,将系统设为开启所有磁盘性能计数器。 -YD在系统重新启动时,启用物理驱动器的磁盘性能计数器。 -YV当系统重新启动时,启用逻辑驱动器的磁盘性能计数器或存储数值。 -N 当系统重新......
  • C++ 引用和指针:内存地址、创建方法及应用解析
    C++引用和指针创建引用引用变量是对现有变量的“别名”,它是使用&运算符创建的:stringfood="Pizza";//食物变量string&meal=food;//对food的引用现在,我们可以使用变量名food或引用名meal来引用食物变量:cout<<food<<"\n";//输出Pizzacout<<mea......
  • 性能基础知识
    开源:jmeterJava开发,跨平台、版本更新快(建议v5.1.1以后+jdk1.8)、学习资料比较多非常活跃 商业:loadrunner性能测试标杆软件、c语言、国内破解(<lr11)、lr12免费试用50限制用户数、更新急慢自研:python+locustPython语言自行开发不仅仅是操作系统宕机,也有可能是某个服务宕机了......