google CPU Profiler 二进制数据文件格式
2011-09-13 20:33
309 查看
原文地址:http://google-perftools.googlecode.com/svn/trunk/doc/cpuprofile-fileformat.html
本文主要是对CPU Profiler工具产生的二进制数据文件进行的说明。源代码位于下载的profiler源文件包的src/profiler.cc中。
CPU Profile 的数据文件结构
每个profile数据文件包含四部分:
文件头部,profile 记录, 文件尾部,映射对象列表
二进制数据以名为slots的术语表示,对于32位应用程序slots为4bytes,对于64位应用程序slots则为8bytes。数据在文件中存储的方式则为
本地二进制顺序(big-endian 或者 little-endian)
文件头部(binary header)
下面是文件头部的结构定义,由profiler进行填充:
作为比较下面给以little-endian为例给出了32位和64位的表示方式:
对于32位和64位的应用程序其binary header的slots值是不变了,profiler工具会自动检测文件内容,并根据头文件word field和
期望位置来判断是32位还是64位程序
数据记录(binary profile record)
record记录格式为:
一个record的总长为2+num_pcs。一个profile工具可能会产生多个具有相同调用链的record,在这种情况下分析工具应该能够统计
出具有相同调用链的record总数
注意:当遇到调用栈的入口地址为0时,某些分析工具会自动中断
e.g. 5 3 0xa0000 0xc0000 0xe0000
本例中在PC 0xa0000处采样5次,0xa0000被0xc0000调用,0xc0000被0xe0000调用
文件尾部(binary trailer)
trailer包含3个slot,并具有固定的值
可以理解为采用了0次,调用长度为1,调用起始地址为0
映射对象列表(list of mapped objects)
紧接着trailer文件由一系列的映像对象组成,这些对象是一些由换行符分割的文本对象
每一行是下列两种格式中的一种:
Build specifier, 以"build="作为开端.
e.g. build=/path/to/binary
Mapping line from ProcMapsIterator::FormatLine.
无法识别行则会被自动忽略掉
当处理mapping line时如果出现了$build后面跟着非字符和下划线的字符,则会被最后一个build specifier替换
本文主要是对CPU Profiler工具产生的二进制数据文件进行的说明。源代码位于下载的profiler源文件包的src/profiler.cc中。
CPU Profile 的数据文件结构
每个profile数据文件包含四部分:
文件头部,profile 记录, 文件尾部,映射对象列表
二进制数据以名为slots的术语表示,对于32位应用程序slots为4bytes,对于64位应用程序slots则为8bytes。数据在文件中存储的方式则为
本地二进制顺序(big-endian 或者 little-endian)
文件头部(binary header)
下面是文件头部的结构定义,由profiler进行填充:
slot | data |
---|---|
0 | header count (0; must be 0) |
1 | header slots after this one (3; must be >= 3) |
2 | format version (0; must be 0) |
3 | sampling period, in microseconds |
4 | padding (0) |
hdr count | hdr words | version | sampling period | pad | |
---|---|---|---|---|---|
32-bit or 64-bit (slots) | 0 | 3 | 0 | 10000 | 0 |
32-bit (4-byte words in file) | 0x00000 | 0x00003 | 0x00000 | 0x02710 | 0x00000 |
64-bit LE (4-byte words in file) | 0x00000 0x00000 | 0x00003 0x00000 | 0x00000 0x00000 | 0x02710 0x00000 | 0x00000 0x00000 |
期望位置来判断是32位还是64位程序
数据记录(binary profile record)
record记录格式为:
slot | data |
---|---|
0 | sample count, must be >= 1 |
1 | number of call chain PCs (num_pcs), must be >= 1 |
2 .. (num_pcs + 1) | call chain PCs, most-recently-called function first. |
出具有相同调用链的record总数
注意:当遇到调用栈的入口地址为0时,某些分析工具会自动中断
e.g. 5 3 0xa0000 0xc0000 0xe0000
本例中在PC 0xa0000处采样5次,0xa0000被0xc0000调用,0xc0000被0xe0000调用
文件尾部(binary trailer)
trailer包含3个slot,并具有固定的值
slot | value |
---|---|
0 | 0 |
1 | 1 |
2 | 0 |
映射对象列表(list of mapped objects)
紧接着trailer文件由一系列的映像对象组成,这些对象是一些由换行符分割的文本对象
每一行是下列两种格式中的一种:
Build specifier, 以"build="作为开端.
e.g. build=/path/to/binary
Mapping line from ProcMapsIterator::FormatLine.
e.g. 40000000-40015000 r-xp 00000000 03:01 12845071 /lib/ld-2.3.2.so
无法识别行则会被自动忽略掉
当处理mapping line时如果出现了$build后面跟着非字符和下划线的字符,则会被最后一个build specifier替换
相关文章推荐
- 如何将jpg格式图像文件转化成一系列二进制数据,又如何将此二进制数据转化成jpg格式的文件?
- spring mvc源码-》MultipartReques类-》主要是对文件上传进行的处理,在上传文件时,编码格式为enctype="multipart/form-data"格式,以二进制形式提交数据,提交方式为post方式。
- 我得意地笑: 搞定了, 哈哈 如何读取Thermo Scientific Nicolet Omnic *.spa二进制格式的谱图文件中的数据
- C编写以二进制读取文件(任意格式eg :图片),保存到C语言数据格式的TXT文档
- 如何将jpg格式图像文件转化成一系列二进制数据,又如何将此二进制数据转化成jpg格式的文件?
- NodeJS研究笔记:利用Buffer类的二进制数据读取接口解析ELF文件格式
- 如何将jpg格式图像文件转化成一系列二进制数据,又如何将此二进制数据转化成jpg格式的文件?
- google cpu profiler二进制结果读取
- jqgrid实现客户端导出Excel、txt、word、json等数据格式的文件
- 3D文件数据格式
- mat文件与txt文件的相互转换(特别的,mat转txt,数据格式设置)
- jxl导出excel出现“文件错误,可能某些数据格式已丢失"
- wave文件(*.wav)格式、PCM数据格式
- leveldb代码阅读(13)——数据文件的格式和生成
- 结构体内部偏移的妙用 从文件中按照固定格式读取数据
- 利用bitset处理二进制格式的数据
- TFRecord格式数据和类似cifar的bin格式文件
- 使用Xml文件格式存储数据
- Hive(一)数据类型、文件格式和数据定义
- PCL系列——将点云数据写入PCD格式文件