上一篇:【Linux】性能分析器 perf 详解(二)
1、perf kmem
1.1 简介
kmem 用于跟踪/测量内核内存属性的工具,如分配、释放、碎片率等。可以帮助开发者和系统管理员理解内核内存的分配和释放模式,从而诊断内存泄漏、过度分配等问题。
功能:
- 跟踪内存分配和释放:监控内核函数如 kmalloc, kfree, vmalloc, vfree 等的调用。
- 统计内存使用:统计不同内核内存缓冲区的使用情况,如 SLAB 缓存中的对象。
- 分析内存泄漏:通过长时间跟踪内存分配和释放,帮助发现未释放的内存分配。
1.2 扩展:什么是SLAB
1)简介
SLAB 分配器是 Linux 内核中用于管理内存分配的一种机制,它主要用于优化频繁分配和释放的小块内存的性能。SLAB 分配器通过缓存常用对象来减少内存碎片和提高内存分配效率。
2)原理
- 对象缓存:SLAB 分配器创建了多个“缓存”(cache),每个缓存用于存储特定类型的对象。例如,进程描述符、文件对象和inode都有自己的缓存。
- SLAB 层:每个缓存包含多个“SLAB”,SLAB 是一组预先分配的对象的集合。这些对象在SLAB中是连续存储的,以减少页表项的数量和提高缓存命中率。
- 对象状态:在 SLAB 分配器中,对象可以处于三种状