linux crash工具用法,使用crash工具看懂slab
原标题:使用crash工具看懂slab
参考Linux内核代码: 3.10
crash> kmem -S sock_inode_cache>
kmem-S-sock_inode_cache
cat ./kmem-S-sock_inode_cache
struct slab *slab的地址为 ffff8801de2ca000
slab->s_mem的地址为 0xffff8801de2ca080
crash> struct slab ffff8801de2ca000
struct slab {
nodeid = 0
s_mem = 0xffff8801de2ca080,(指向第一个object)
..
}
可以看到上面的slab在节点0上,有6个object. 其中有三个是share cache,说明是给本节点上所有cpu公用,其中有一个在cpu4上。另外两个还未指定用途。
ffff8801de2ca080 (shared cache)
ffff8801de2ca300
ffff8801de2ca580(cpu 4 cache)
ffff8801de2ca800 (shared cache)
ffff8801de2caa80
ffff8801de2cad00 (shared cache)
上面的struct slab结构挂在kmem_list3结构的slabs_partial、slabs_full或者slabs_free链表上。
struct kmem_list3 {
struct list_head slabs_partial;
struct list_head slabs_full;
struct list_head slabs_free;
...
}
先看看这个cpu4上的object,既然这个是在cpu4上的object,看看是否能在cpu4上的 sock_inode_cache缓存找到这个object ffff8801de2ca580
然后再找出(ffff8801de2ca080 (shared cache))。
找出这两个值,就知道slab到底是怎么回事了。
struct kmem_cache {
/* 1) per-cpu data, touched during every alloc/free */
struct array_cache *array[NR_CPUS];
const char *name;
struct list_head next;
...
struct kmem_list3 *nodelists
[MAX_NUMNODES];
}
crash> struct kmem_cache
struct kmem_cache {
....
name = 0xffffffff817d2db7 "sock_inode_cache",
next = {
},
}
struct array_cache {
unsigned int avail;
..
void *entry[]; /*
}
可以看到entry是一个指针数组,数组里面每一个元素就是本cpu上一个object的值。
crash> struct array_cache
struct array_cache {
…
}
输出0x10个object, 发现第一个值就是 ffff88023f5ff580,
ffff881020843418: ffff88023f5ff580 ffff88107f4ffd00
ffff881020843428: ffff8801bc2bd0c0 ffff880e5d3c00c0
ffff881020843438: ffff8806a7453d40 ffff880209cfcac0
crash> struct kmem_list3
struct kmem_list3 {
slabs_partial = {
slabs_full = {
slabs_free = {
...
},
...
}
crash> struct array_cache
struct array_cache {
…
}
同样的entry数组中的每个值就是本节点上share cache Object.
在59行看到
(ffff8801de2ca080(sharedcache))
Line58 ffff8810208443a8: ffff8802ec1165c0
ffff88107f554800
Line59ffff8810208443b8: ffff8801de2ca080
ffff8804b1641340
Note: linux在3.12以后去掉了struct slab结构,但是原理没什么变化。 返回搜狐,查看更多
责任编辑:
linux crash工具用法,使用crash工具看懂slab相关推荐
- 安装软件包的三种方法 ,rpm包介绍 , rpm工具用法, yum工具用法, yum搭建本地仓库...
linux安装和卸载软件 安装三种方法 rpm工具 yum工具 源码包 rpm工具使用 首先看一下什么事rpm包,可以挂载光驱看看里面有很多 [root@localhost ~]# mount /de ...
- 安装软件包的三种方法、rpm包介绍、rpm工具用法、yum工具用法、yum搭建本地仓库...
为什么80%的码农都做不了架构师?>>> 安装软件包的三种方法 rpm工具 yum工具 源码包 rpm rpm命令是RPM软件包的管理工具.rpm原本是Red Hat Linu ...
- linux之sed用法 (文本处理工具)
sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换.删除.新增.选取等特定工作,下面先了解一下sed的用法 sed命令行格式为: ...
- decimal这个数据类型的用法,保证你看懂
笔者在网上搜了好久,解释都晦涩难懂.最后通过亲手实践加课本知识得出结论如下: decimal(M,N) M表示:不包括小数点,不包括符号位,所能存数字的总位数(包括小数部分和整数部分) N表示: ...
- 实战能力|一文看懂GDB调试底层实现
在程序出现bug的时候,最好的解决办法就是通过 GDB 调试程序,然后找到程序出现问题的地方.比如程序出现 段错误(内存地址不合法)时,就可以通过 GDB 找到程序哪里访问了不合法的内存地址而导致的. ...
- crash工具解析_Android Crash 工具
crash工具解析_Android Crash 工具_weixin_39543655的博客-CSDN博客本篇文章主要介绍Android开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:一.Cra ...
- Linux内核转储---Kdump,Crash使用介绍
文章目录 Kdump简介 Crash简介 Ubuntu下安装使用方法 Crash相关命令 crash基本用法 crash的基本命令 help:crash所提供的调试命令 log:查看日志信息,类似dm ...
- PowerShell攻防进阶篇:nishang工具用法详解
PowerShell攻防进阶篇:nishang工具用法详解 导语:nishang,PowerShell下并肩Empire,Powersploit的神器. 开始之前,先放出个下载地址! 下载地址:htt ...
- GNU gcc的编译工具用法(转)
对大多数不从事Linux平台C语言开发的人来说,GNU gcc的一套工具和Linux平台的共享库的使用还是十分陌生的,其实我也不太熟悉,姑且写点基础知识,权当做备忘吧. 一.GNU gcc的编译工具用 ...
最新文章
- php url 筛选,PHP获取当前URL路径的处理方法(适用于多条件筛选列表)
- spring系列-注解驱动原理及源码-spring容器创建流程
- Daily Scrum02 12.09
- AD采样不准解决措施
- php image 转 data uri 图片 (Image Data URIs with PHP)
- Ubuntu硬盘安装
- Bailian3256 矩阵的乘法【数学计算】
- [Selenium]怎样验证页面是否有无变化
- 《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之32---BREW PUSH 服务...
- 小程序显示富文本内容(wxparse)
- android4.4呼叫转移,安卓呼叫转移
- 企业如何自建MDM 移动设备管理平台
- 在UBUNTU 13.1 中使用五笔拼音混合输入法
- 一个自己实现的js表单验证框架。
- 190种超全的解密工具任你选!!
- 随手写的一些好用的功能(不定时更新)
- 世界读书日送你畅销好书!前所未有4折购书福利
- Angular $injector:unpr Unknown provider 问题原因汇总
- 电脑与云服务器的区别吗,云服务器和普通电脑有什么不同区别?
- cf Sonya and Robots