前言
不断收集系统全局变量,这些全局变量使用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 |
后记
不断收集,能够从本质上动态观测系统运行状态。

文章探讨了如何通过全局变量获取系统运行时数据,包括物理页面、网络设备、进程信息等,强调数据流动的重要性,指出gdb、crash、ebpf等工具可用于监测。
2123

被折叠的 条评论
为什么被折叠?



