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