赞
踩
前面提到过Android ebpf c语言版的源码结构,这里再以以gpu_mem为例详细拆解下。它主要包括:
gpu_mem.o来自gpu_mem.c,下面是gpu_mem.c的主要内容。
- frameworks/native/services/gpuservice/bpfprogs/gpuMem.c
- #include <bpf_helpers.h>//引入帮助函数头文件
-
- //因为在android上可以使用gpu的进程数目最大为2014,所以定义GPU_MEM map的size为1024.
- #define GPU_MEM_TOTAL_MAP_SIZE 1024
-
- //这个map包含了全局和每个进程的gpu memory的总计数器,其格式为{KEY, VAL},其中key表示((gpu_id << 32)|pid),而VAL这是以字节为单位的大小。
- //因为key不是int,这里使用HASH的类型。
- //因为gpuservice属于graphics组,所以以AID_GRAPHICS作为gid。
- //内核中会将这段代码pin到/sys/fs/bpf/map_gpu_mem_gpu_mem_total_map节点上。其中map表示当前节点的类型,gpu_mem表示当前ebpf程序的二进制文件名,gpu_mem_total_map即定义的map段的名称。
- DEFINE_BPF_MAP_GRO(gpu_mem_total_map, HASH, uint64_t, uint64_t, GPU_MEM_TOTAL_MAP_SIZE,
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。