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
随机推荐
- .NET常用的异常类型及其中文说明
基异常类型: 类 说明 System.Exception 所有异常的基类型 System.ApplicationException 发生非致命应用程序错误时引发的异常 System.SystemExc ...
- java实现两台电脑间TCP协议文件传输
记录下之前所做的客户端向服务端发送文件的小项目,总结下学习到的一些方法与思路. 注:本文参考自<黑马程序员>视频. 首先明确需求,在同一局域网下的机器人A想给喜欢了很久的机器人B发送情书, ...
- [leetcode DP]91. Decode Ways
A message containing letters from A-Z is being encoded to numbers using the following mapping: 'A' - ...
- poj2676(数独)
也是一个简单剪枝的dfs.记录所有为0的位置,依次填写,当发现某个空格可选的填写数字已经没有时,说明该支路无效,剪掉. 不算是一个难题吧,但是还是花了不少时间,问题主要出在细节上,行列坐标反了.3乘3 ...
- 洛谷.4252.[NOI2006]聪明的导游(提答 直径 随机化)
题目链接 随机化 暴力: 随便从一个点开始DFS,每次从之前得到的f[i]最大的子节点开始DFS.f[i]为从i开始(之前)能得到的最大答案. 要注意的是f[i]应当有机会从更小的答案更新, 9.10 ...
- 【MPI】并行奇偶交换排序
typedef long long __int64; #include "mpi.h" #include <cstdio> #include <algorithm ...
- 趁热打铁学node
前言 不废话直接官网下载安装. windows安装很简单,双击ok. 完成后命令行输入node -v. 会提示版本号,说明安装成功(Node.js 还自动附带安装了 npm,类似ruby的gem). ...
- 【Eclipse提高开发速度-插件篇】安装多语言Propertys编辑工具
安装的的时候能够通过 Help>Eclipse Marketplace的 搜索方式安装 或者 Help>Install New Software Name:Propertys URL:ht ...
- 通过adb shell操作android真机的SQLite数据库
要通过命令行直接操作android真机上的SQLite数据库,可以直接通过adb shell来完成,不过,前提是必须获得root权限. 另外,android系统其实就是linux的shell,这个应该 ...
- WINDOWS WPA性能分析
http://r12f.com/posts/introduction-to-wpa-1-why-it-is-slow/ http://www.freebuf.com/column/138862.htm ...