当前位置:   article > 正文

3.5 Android gpu_mem ebpf程序设计原理(一)_map_gpu_mem_gpu_mem_total_map

map_gpu_mem_gpu_mem_total_map

写在前面

前面提到过Android ebpf c语言版的源码结构,这里再以以gpu_mem为例详细拆解下。它主要包括:

  • 定义map,用于存储内核事件触发时填充数据以分享给用户控件进程进行读取分析。
  • 定义type/map,程序类型决定了可以hook的内核函数,prog决定了map数据管理的主要逻辑。

一,gpu_mem代码结构

gpu_mem.o来自gpu_mem.c,下面是gpu_mem.c的主要内容。

  1. frameworks/native/services/gpuservice/bpfprogs/gpuMem.c
  2. #include <bpf_helpers.h>//引入帮助函数头文件
  3. //因为在android上可以使用gpu的进程数目最大为2014,所以定义GPU_MEM map的size1024.
  4. #define GPU_MEM_TOTAL_MAP_SIZE 1024
  5. //这个map包含了全局和每个进程的gpu memory的总计数器,其格式为{KEY, VAL},其中key表示((gpu_id << 32)|pid),而VAL这是以字节为单位的大小。
  6. //因为key不是int,这里使用HASH的类型。
  7. //因为gpuservice属于graphics组,所以以AID_GRAPHICS作为gid。
  8. //内核中会将这段代码pin到/sys/fs/bpf/map_gpu_mem_gpu_mem_total_map节点上。其中map表示当前节点的类型,gpu_mem表示当前ebpf程序的二进制文件名,gpu_mem_total_map即定义的map段的名称。
  9. DEFINE_BPF_MAP_GRO(gpu_mem_total_map, HASH, uint64_t, uint64_t, GPU_MEM_TOTAL_MAP_SIZE,
本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/303578?site
推荐阅读
相关标签
  

闽ICP备14008679号