前言
不断收集系统全局变量,这些全局变量使用gdb、crash、ebpf等动态监测方式能够快速查看。并且很多命令读取系统信息本质是读取变量,如果获取这些变量,也能从本质上得到系统运行状态。引用一句话:
不要关注程序语言的写法,他们千奇百怪。要关注数据的流动。
因为代码只是用一种形式写表达,本质是数据。
原理与用途
通过全局变量可以拿到运行时数据。比如所有物理页面,所有网络设备,所有进程,每个进程所有VMA,以及不同queue上所有数据。这样全局信息都是一个类似一个展馆展示的大图,一目了然,清晰快速。而且对于分析阅读代码也关系极大。
全局变量
变量 | 变量全称 | 说明 | gdb命令 | 相关链接 | 备注2 |
---|---|---|---|---|---|
mem_map | struct page *mem_map | 所有物理页面page表,index是PFN | p mem_map | more | |
kmalloc_info | struct kmalloc_info_struct kmalloc_info[] | kmalloc cache的slab对象kmem cache名字和大小表 | p kmalloc_info | ||
kmalloc_caches | struct kmem_cache *kmalloc_caches[NR_KMALLOC_TYPES][KMALLOC_SHIFT_HIGH + 1] | kmalloc cache机制中存储slab对象kmem cache的表,有39个不同size的slab kmem cache | p kmalloc_caches | more | |
init_net | struct net init_net | 所有的网卡struct net_device挂载的表 | p init_net | more | |
vm_zone_stat | atomic_long_t vm_zone_stat[NR_VM_ZONE_STAT_ITEMS] | tood | |||
vm_numa_stat | atomic_long_t vm_numa_stat[NR_VM_NUMA_STAT_ITEMS] | todo | |||
vm_node_stat | atomic_long_t vm_node_stat[NR_VM_NODE_STAT_ITEMS] | todo |
后记
不断收集,能够从本质上动态观测系统运行状态。