1# 调用栈可视化和不同库函数调用占比说明 2 3调用栈可视化可以将开发者编译的 so 符号化结果展示出来,不同库函数的占比通过饼图的方式展示出来。 4 5## Native Memory 文件的不同库函数占比 6 7Native Memory 分为三级统计,分别按照内存分配的类型(Alloc/Mmap),lib 库,函数进行统计分析。其中 lib 跟函数为每一条调用栈,从栈顶往下查找,非 musl 库与 c++库的第一条函数及其 lib 为每次分配归属的函数及 lib 库。 8点击 Analysis 的 Tab 页,先以内存分配的类型去统计。 9 10 11- Memory Type:事件类型。 12- Existing:框选区域内申请没有释放的大小。 13- #Existing:框选区域内申请没有释放的次数。 14- Total Bytes:框选区间内申请的大小。 15- #Total:框选区间内申请的次数。 16- Transient:框选区域内释放的大小。 17- #Transient:框选区域内释放的次数。 18- %:各个显示项的占比。 19 以 lib 库去统计,如图显示的是 AllocEvent 的 so 占比的饼图和 Table 表。 20  21- Library:So名称。 22- Existing:框选区域内申请没有释放的大小。 23- #Existing:框选区域内申请没有释放的次数。 24- Total Bytes:框选区间内申请的大小。 25- #Total:框选区间内申请的次数。 26- Transient:框选区域内释放的大小。 27- #Transient:框选区域内释放的次数。 28- %:各个显示项的占比。 29 以函数去统计,如图显示的是 AllocEvent/libmali-bifrost-g52-g2p0-ohos.so 的函数占比的饼图和 Table 表。 30  31- Function:函数名称。 32- Existing:框选区域内申请没有释放的大小。 33- #Existing:框选区域内申请没有释放的次数。 34- Total Bytes:框选区间内申请的大小。 35- #Total:框选区间内申请的次数。 36- Transient:框选区域内释放的大小。 37- #Transient:框选区域内释放的次数。 38- %:各个显示项的占比。 39 40## Hiperf 文件的不同库函数占比 41 42Hiperf 分为四级统计,分别按照进程,线程,lib 库,函数进行统计。其中 lib 跟函数为每一条调用栈的栈顶函数及其 lib。 43点击 Analysis 的 Tab 页,先以进程去统计。 44 45 46- ProcessName:进程名。 47- Weight:该进程下的调用方法的执行次数。 48- %:该进程下的调用方法的执行占比。 49 以线程统计,如图显示的是 hiperf 进程下的线程的饼图和 Table 表。 50  51- ThreadName:线程名。 52- Weight:该线程下的调用方法的执行次数。 53- %:该线程下的调用方法的执行占比。 54 以 lib 库统计,如图显示的是 hiperf 线程下的各 so 占比饼图和 Table 表。 55  56- Library:so的名称。 57- Weight:该so的调用方法的执行次数。 58- %:该so的调用方法的执行占比。 59 以函数统计,如图显示的是 ld-musl-aarch64.so.1 下的各函数占比饼图和 Table 表。 60  61- Library:so的名称。 62- Weight:该so的调用方法的执行次数。 63- %:该so的调用方法的执行占比。 64 65## FileSystem 文件的不同库函数占比 66 67FileSystem 分为五级统计,分别按照进程,系统调用类型,线程,lib 库,函数进行统计。其中 lib 跟函数为每一条调用栈,从栈顶往下查找,非 musl 库与 c++库的第一条函数及其 lib 为每次分配归属的函数及 lib 库。 68点击 Analysis 的 Tab 页,先以进程去统计。 69 70 71- ProcessName:进程名。 72- Duration:总时长。 73- %:总时长占比。 74 以系统调用类型统计,如图显示的是 grep 进程下的 Read 和 Write 系统调用的时长占比饼图和 Table 表。 75  76- Type:系统调用类型(Read和Write)。 77- Duration:系统调用的总时长。 78- %:总时长占比。 79 以线程统计,如图显示的是系统调用是 Read 类型的线程的占比饼图和 Table 表。 80  81- ThreadName:线程名。 82- Duration:该线程的系统调用的总时长。 83- %:总时长占比。 84 以 lib 库统计,如图显示 toybox 的 lib 库的占比饼图和 Table 表。 85  86- Library:so的名称。 87- Duration:该so的系统调用的总时长。 88- %:总时长占比。 89 以函数统计,如图显示 0x558111afbc (toybox)的函数占比饼图和 Table 表。 90  91- Function:函数名称。 92- Duration:该函数的系统调用的总时长。 93- %:总时长占比。 94 95## Bio 文件的不同库函数占比 96 97Bio 分为五级统计,分别按照进程,系统调用类型,线程,lib 库,函数进行统计。其中 lib 跟函数为每一条调用栈,从栈顶往下查找,非 submit_bio 第一条函数及其 lib 为每次分配归属的函数及 lib 库。 98点击 Analysis 的 Tab 页,先以进程去统计。 99 100 101- ProcessName:进程名。 102- Duration:总时长。 103- %:总时长占比。 104 以系统调用类型统计,如图显示的是 jbd2/mmcblk0p11 进程下的 DATA_WRITE 系统调用的时长占比饼图和 Table 表。 105  106- Type:系统调用类型。 107- Duration:系统调用的总时长。 108- %:总时长占比。 109 以线程统计,如图显示的是系统调用是 DATA_WRITE 类型的线程的占比饼图和 Table 表。 110  111- ThreadName:线程名。 112- Duration:该线程的系统调用的总时长。 113- %:总时长占比。 114 以 lib 库统计,如图显示 kallsyms 的 lib 库的占比饼图和 Table 表。 115  116- Library:so的名称。 117- Duration:该so的系统调用的总时长。 118- %:总时长占比。 119 以函数统计,如图显示 submit_bh 的函数占比饼图和 Table 表。 120  121- Function:函数名称。 122- Duration:该函数的系统调用的总时长。 123- %:总时长占比。 124 125## Page Fault 文件的不同库函数占比 126 127Page Fault 分为五级统计,分别按照进程,系统调用类型,线程,lib 库,函数进行统计。其中 lib 跟函数为每一条调用栈,从栈顶往下查找,非 musl 库与 c++库的第一条函数及其 lib 为每次分配归属的函数及 lib 库。 128点击 Analysis 的 Tab 页,先以进程去统计。 129 130 131- ProcessName:进程名。 132- Duration:总时长。 133- %:总时长占比。 134 以系统调用类型统计,如图显示的是 1.ui 进程下的 File Backed In 和 Copy On Writer 系统调用的时长占比饼图和 Table 表。 135  136- Type:系统调用类型。 137- Duration:系统调用的总时长。 138- %:总时长占比。 139 以线程统计,如图显示的是系统调用是 File Backed In 类型的线程的占比饼图和 Table 表。 140  141- ThreadName:线程名。 142- Duration:该线程的系统调用的总时长。 143- %:总时长占比。 144 以 lib 库统计,如图显示各 lib 库的占比饼图和 Table 表。 145  146- Library:so的名称。 147- Duration:该so的系统调用的总时长。 148- %:总时长占比。 149 以函数统计,如图显示各函数占比饼图和 Table 表。 150  151- Function:函数名称。 152- Duration:该函数的系统调用的总时长。 153- %:总时长占比。 154