chromium中的性能优化工具syzyProf
函数性能分析工具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文件,还有编译器生成某些符号不能重排布,底下有很多有脏话累活,这都要试错躺雷才能明白。
chromium中的性能优化工具syzyProf的更多相关文章
- 性能优化工具 MVC Mini Profiler
性能优化工具 MVC Mini Profiler MVC MiniProfiler是Stack Overflow团队设计的一款对ASP.NET MVC.WebForm 以及WCF 的性能分析的小程 ...
- ASP.NET MVC性能优化工具 MiniProfiler
ASP.NET MVC性能优化工具 MiniProfiler 2014年04月19日 ⁄ ASP.NET ⁄ 共 1159字 ⁄ 字号 小 中 大 ⁄ 暂无评论 ⁄ 阅读 325 views 次 MV ...
- Web性能优化工具WebPageTest(一)——总览与配置
网站性能优化工具大致分为两类:综合类和RUM类(实时监控用户类),WebPageTest属于综合类. WebPageTest通过布置一些特定的场景进行测试,例如不同的网速.浏览器.位置等. 测试完成后 ...
- 在 Android开发中,性能优化策略十分重要
在 Android开发中,性能优化策略十分重要本文主要讲解性能优化中的布局优化,希望你们会喜欢.目录 示意图 1. 影响的性能 布局性能的好坏 主要影响 :Android应用中的页面显示速度 2. 如 ...
- 【SQL系列】深入浅出数据仓库中SQL性能优化之Hive篇
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[SQL系列]深入浅出数据仓库中SQL性能优化之 ...
- web开发者性能优化工具(一)
web开发者性能优化工具 1 数据包嗅探器(在性能优化时,查看页面(包括页面中全部资源)的加载过程) HttpWatch (http://www.httpwatch.com/) 把网络流量用图形的 ...
- JAVA性能优化工具小记
好记性不如烂笔头,戊戌年的最后一个工作日,把自己平时在开发过程中使用的一些java性能优化工具做一个简单的小结, 主要包括 jvisualvm.jfr.gdb和查看内存对象信息的几个linux命令. ...
- PHP性能优化工具–xhprof安装
PHP性能优化工具–xhprof安装,这里我先贴出大致的步骤: 1.获取xhprof 2.编译前预处理 3.编译安装 4.配置php.ini 5.查看运行结果 那么下面我们开始安装xhprof工具吧: ...
- PLSQL_性能优化工具系列16_Best Practices: Proactively Avoiding Database
占位符 PLSQL_性能优化工具系列_Best Practices: Proactively Avoiding Database/Query Performance Issue
随机推荐
- Ionic Js十四:浮动框
$ionicPopover $ionicPopover 是一个可以浮在app内容上的一个视图框. 实例 HTML 代码 <p> <button ng-click="open ...
- Object-c和Java中的代理
代理模式的核心思想就是一个类想做一件事情(函数),但它不去亲自做(实现),而是通过委托别的类(代理类)来完成. 代理模式的优点: 1.可以实现传值,尤其是当一个对象无法直接获取到另一个对象的指针,又希 ...
- Tensorflow学习:(三)神经网络优化
一.完善常用概念和细节 1.神经元模型: 之前的神经元结构都采用线上的权重w直接乘以输入数据x,用数学表达式即,但这样的结构不够完善. 完善的结构需要加上偏置,并加上激励函数.用数学公式表示为:.其中 ...
- Java 中线程安全问题
不好意思,一个国庆假期给我放的都不知道东西南北了,放松,很放松,差一点就弃更了,感谢那些催更的小伙伴们! 虽然没有更新,但是日常的学习还是有的,以后我尽量给大家分享一些通用知识,非技术. 但是本期还是 ...
- 前端安全系列之二:如何防止CSRF攻击?
背景 随着互联网的高速发展,信息安全问题已经成为企业最为关注的焦点之一,而前端又是引发企业安全问题的高危据点.在移动互联网时代,前端人员除了传统的 XSS.CSRF 等安全问题之外,又时常遭遇网络劫持 ...
- apache 监控
当前加载模块 [root@controller01 ~]# httpd -lCompiled in modules: core.c mod_so.c http_core.c 当前版本[root@con ...
- 关于mysql_connect CLIENT_MULTI_RESULTS
自己写了一个mysql存储过程,以为php有用于调用存储过程的内建函数,查了一下发现只能用mysql_query(call pro())这样的方式,我认为从本质上也就相当于在mysql命令行里执行语句 ...
- java设计模式(五)责任链模式
很多对象有每个对象对其下家的引用而连接起来形成一条链,请求在这条链上传递,直到链上某个对象决定处理此请求,应用场景如单位审批流程等. 要点:1)抽象处理者角色:定义处理请求接口及设定下家引用 2 ...
- Problem D: 深入浅出学算法005-数7
Description 逢年过节,三五好友,相约小聚,酒过三旬,围桌数七. “数七”是一个酒桌上玩的小游戏.就是按照顺序,某人报一个10以下的数字,然后后面的人依次在原来的数字上加1,并喊出来,当然如 ...
- 【JavaScript代码实现四】获取和设置 cookie
// 创建cookie function setCookie(name, value, expires, path, domain, secure) { var cookieText = encode ...