函数性能分析工具SyzyProf

我先开始介绍SyzyProf。这个工具可以捕获每个线程调用每个函数执行的时间,然后把结果生成一个KCacheGrind能够识别的数据格式文件,然后通过KCacheGrind的展示结果。你就可以知道函数哪个函数执行了次数最多,消耗的时间最多,哪个线程在读写文件,哪个线程在创建窗口界面,而且KCacheGrind以图形的方式显示出函数调用链等信息,非常直观。如图这是我生成CEF自带demo程序的函数调用信息。

其实能够函数性能分析工具已经够多了,比如xperf,AQTime,还有visual studio自带的性能分析功能。但是这些工具都是重量级的,有的需要调试的模式运行目标程序,导致对目标程序运行效率有很大的影响。

相比而言SyzyProf是轻量级的函数性能分析工具,配置简单,对目标程序单运行效率影响小。说起来这么先进,其实SyzyProf的工作原理很简单,就是给编译器加上/profile的开关,然后编译出的pe文件有一些额外的空间,SyzyProf在这些额外的空间里插入指令,修改编译后的pe文件,hook住每个函数的调用,然后记录下函数的执行信息。/profile是vs编译器为性能优化预留的操作空间,vs本身性能优化也用到了这个接口。

不可思议的山寨机(syzygy)

如果chromium的性能优化仅限于SyzyProf那就太普通了,它还有一个杀手锏——syzygy。syzygy利用SyzyProf生成的函数性能分析数据,重新优化函数在pe二进制文件中的分布位置,比如调用的早的函数放到pe文件的前头,函数之间调用频繁紧密的函数放到一起,减少程序运行时的缺页中断错误,从而减少程序的冷启动时间和内存占用。因为syzygy这个词的发音太拗口,我一般称它为山寨机。

听起来有些不可思议,但确实是这样的,这也是为什么chromium浏览器启动的这么快的原因。chromium自己宣称syzygy能够减少了80%的冷启动时间,还有40%的内存占用。

事实上我们用visual studio的编译器生成的pe文件函数的分布相对它在执行时的顺序而言几乎是随机的,这就导致了程序在执行的时候有一些非必要的缺页中断,导致冷启动时间增加。还有不同分页中代码和数据性能很差的访问,导致内存工作集变大。这些正是syzygy优化的地方。

微软自己早就对windows系统某些模块才用了同样的技术对pe文件的函数重分布,比如 ntoskrnl.exe,根本不是编译器默认生成的样子。微软很早就开始了这方面的研究,Binary Technologies Projects的Binary Transformation Infrastructure。这种性能优化的思路并非chromium首创,但发挥的淋漓尽致的确是chromium。

syzygy做优化的需要改变pe文件,这将导致pe文件跟原来的pdb文件对应不上,不能再使用pdb文件来调试了,为此syzygy改变pe文件的同时也会修改对应的pdb文件。

总结syzygy所用到的技术:

  • 使用编译器提供的/profile接口,在生成的pe文件中插入指令hook住函数。
  • 通过ETW(Event Tracing for Windows)机制获得目标程序的函数性能数据。
  • 根据函数性能数据生成了重排布策略,调用编译器接口去重排布pe文件,调用的DIA(Debug Interface Access)接口去修改pdb文件。

看起来也并不复杂,但是背后分解pe文件,还有编译器生成某些符号不能重排布,底下有很多有脏话累活,这都要试错躺雷才能明白。

转载于:https://www.cnblogs.com/h2zZhou/p/9855483.html

chromium中的性能优化工具syzyProf相关推荐

  1. Android 性能优化工具

    Android 性能优化工具 这段时间总结了一些常用的性能优化工具,当然这些并没有包含全部的工具,下面稍微对这些工具做个简单的总结: 1.应用codeReview工具 StrictMode 检测应用主 ...

  2. Android 性能优化工具 TraceView 简单使用

    背景 最近产品以及测试大佬反应快搜桌面进入搜索页面跳转较为缓慢,影响体验,为了优化这个问题,特地学习Android 性能优化工具 TraceView的 简单使用,这才有了本文. 正文 如下图打开and ...

  3. Go在迅雷P2P连通系统中的性能优化实践-朱文

    目 录 1. 如何构建压测环境 2. 如何分析性能瓶颈 3. 如何做性能优化 语言层面 设计层面 4. 总结 主要内容 我是来自迅雷的后台开发架构师,今天很高兴给大家分享一下我在迅雷连通系统中的性能优 ...

  4. 谈谈VR游戏中的性能优化

    VR游戏相对传统游戏,个人认为主要有三个方面的不同:玩法设计,输入方式,性能压力.今天就来谈一下VR游戏中的性能优化. 为什么VR游戏的性能压力很大? ·主要有三个因素的影响:高帧率,高分辨率,画两遍 ...

  5. 百度App Android启动性能优化-工具篇

    一.前言 启动性能是APP的极为重要的一环,启动阶段出现卡顿.黑屏问题,会影响用户体验,导致用户流失.百度APP在一些比较低端的机器上也有类似启动性能问题,为保留存,需要对启动流程做深入优化.现有的性 ...

  6. Android开发常用工具,编译调试工具,性能优化工具,工具集

    分析具体耗时的Trace view;布局复杂度工具Hierarchy View;应用启动时间;Memory.CPU.Network分析;静态代码检查工具Lint;程序稳定性monkey.adb调试桥. ...

  7. 网站性能优化工具大全

    网站性能优化(WPO)已经成为一个非常重要的话题了,越来越多的互联网公司开始有WPO的职位,而相关技能也是对前端开发工程师的重要技术要求之一.国外大牛Steve Souders在参加WebPerfDa ...

  8. [转]游戏中各种性能优化方法(不断更新)

    http://www.cppblog.com/liangairan/archive/2013/03/23/198749.aspx 谈到游戏中的性能优化,说白了就是如何提高帧率和降低内存. 提高帧率的基 ...

  9. 简单了解SQL性能优化工具MySql Explain

    点击上方蓝色字体,选择"设为星标" 优质文章,及时送达 写在前面 MySql Explain是对SQL进行性能优化不可或缺的工具,通过他我们可以对SQL进行一定的分析和性能优化,降 ...

  10. 后端:推荐九款Java 性能优化工具,你都用过吗?

    今天给大家一起看一下9个可以帮助我们优化Java性能的工具. 1.NetBeans Profiler NetBeans profiler是一个NetBeans IDE插件,主要为NetBeans ID ...

最新文章

  1. linux7怎么查看rsync状态,linux – Rsync显示单个文件的进度
  2. 《用Python写网络爬虫》——1.5 本章小结
  3. callback回调使用 vue_前端动画必知必会:React 和 Vue 都在用的 FLIP 思想实战
  4. 1. ThreadPoolExecutor的一个常用的构造方法
  5. 【转载保存】mysql不设置主键使用自增长ID方法
  6. 最常用的css垂直居中方法
  7. linux如何进入超级终端,使用telnet和超级终端登录控制Ubuntu
  8. VoIP服务器Asterisk安装及部署
  9. iOS开发工具,ios开发类库
  10. Windows7主题包:Aero Pure 0.2 更像Win8
  11. mysql -b -w_MySQL系列(三)
  12. 听云-服务器监控,window+tomcat配置
  13. Between Us 2 进化的史诗
  14. Ubuntu16.04系统+GTX1050TI显卡的tensorflow1.6(GPU版)安装-详细图文
  15. mathtype安装
  16. 淘宝/天猫获得淘宝商品详情高级版 API 返回值说明
  17. 用友U8cloud智能财务精细管控
  18. keytool error Keystore was tampered with, or password was incorrect
  19. 微汇智能袁文龙受邀剪彩北斗微芯长沙高新区项目开工
  20. Oracle SQL优化准则

热门文章

  1. Cloudflare泄露客户数据,IT部门可从中吸取什么教训?
  2. jQuery 仿写京东轮播广告图
  3. From Apprentice To Artisan 翻译 08
  4. Ext核心代码分析之Function.createDelegate
  5. Python虚拟环境的搭建
  6. Eclipse\myeclipse加载项目building workspace过久
  7. 【转载】谈谈自己对REST、SOA、SOAP、RPC、ICE、ESB、BPM知识汇总及理解
  8. Theano学习笔记:Theano的艰辛安装体验
  9. 不用js实现鼠标放上去改变文字内容
  10. UIWebView关于XMLHttpRequest的内存泄漏