原标题:使用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相关推荐

  1. 安装软件包的三种方法 ,rpm包介绍 , rpm工具用法, yum工具用法, yum搭建本地仓库...

    linux安装和卸载软件 安装三种方法 rpm工具 yum工具 源码包 rpm工具使用 首先看一下什么事rpm包,可以挂载光驱看看里面有很多 [root@localhost ~]# mount /de ...

  2. 安装软件包的三种方法、rpm包介绍、rpm工具用法、yum工具用法、yum搭建本地仓库...

    为什么80%的码农都做不了架构师?>>>    安装软件包的三种方法 rpm工具 yum工具 源码包 rpm rpm命令是RPM软件包的管理工具.rpm原本是Red Hat Linu ...

  3. linux之sed用法 (文本处理工具)

     sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换.删除.新增.选取等特定工作,下面先了解一下sed的用法 sed命令行格式为:          ...

  4. decimal这个数据类型的用法,保证你看懂

    笔者在网上搜了好久,解释都晦涩难懂.最后通过亲手实践加课本知识得出结论如下: decimal(M,N)   M表示:不包括小数点,不包括符号位,所能存数字的总位数(包括小数部分和整数部分)  N表示: ...

  5. 实战能力|一文看懂GDB调试底层实现

    在程序出现bug的时候,最好的解决办法就是通过 GDB 调试程序,然后找到程序出现问题的地方.比如程序出现 段错误(内存地址不合法)时,就可以通过 GDB 找到程序哪里访问了不合法的内存地址而导致的. ...

  6. crash工具解析_Android Crash 工具

    crash工具解析_Android Crash 工具_weixin_39543655的博客-CSDN博客本篇文章主要介绍Android开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:一.Cra ...

  7. Linux内核转储---Kdump,Crash使用介绍

    文章目录 Kdump简介 Crash简介 Ubuntu下安装使用方法 Crash相关命令 crash基本用法 crash的基本命令 help:crash所提供的调试命令 log:查看日志信息,类似dm ...

  8. PowerShell攻防进阶篇:nishang工具用法详解

    PowerShell攻防进阶篇:nishang工具用法详解 导语:nishang,PowerShell下并肩Empire,Powersploit的神器. 开始之前,先放出个下载地址! 下载地址:htt ...

  9. GNU gcc的编译工具用法(转)

    对大多数不从事Linux平台C语言开发的人来说,GNU gcc的一套工具和Linux平台的共享库的使用还是十分陌生的,其实我也不太熟悉,姑且写点基础知识,权当做备忘吧. 一.GNU gcc的编译工具用 ...

最新文章

  1. php url 筛选,PHP获取当前URL路径的处理方法(适用于多条件筛选列表)
  2. spring系列-注解驱动原理及源码-spring容器创建流程
  3. Daily Scrum02 12.09
  4. AD采样不准解决措施
  5. php image 转 data uri 图片 (Image Data URIs with PHP)
  6. Ubuntu硬盘安装
  7. Bailian3256 矩阵的乘法【数学计算】
  8. [Selenium]怎样验证页面是否有无变化
  9. 《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之32---BREW PUSH 服务...
  10. 小程序显示富文本内容(wxparse)
  11. android4.4呼叫转移,安卓呼叫转移
  12. 企业如何自建MDM 移动设备管理平台
  13. 在UBUNTU 13.1 中使用五笔拼音混合输入法
  14. 一个自己实现的js表单验证框架。
  15. 190种超全的解密工具任你选!!
  16. 随手写的一些好用的功能(不定时更新)
  17. 世界读书日送你畅销好书!前所未有4折购书福利
  18. Angular $injector:unpr Unknown provider 问题原因汇总
  19. 电脑与云服务器的区别吗,云服务器和普通电脑有什么不同区别?
  20. cf Sonya and Robots

热门文章

  1. 王者荣耀戈娅的攻击阈值是多少 王者荣耀戈娅怎么连招
  2. 一起分析Linux系统设计思想——03内核启动流程分析(六)
  3. 有限体积法(1)——一维扩散方程的推导
  4. 重建古老计算机Pong
  5. 新的一周,新的旅程…
  6. matlab 逐步回归代码,(最新整理)逐步回归matlab程序
  7. 谷歌浏览器,上传文件卡死(无响应)
  8. ububtu安装谷歌浏览器+搜狗输入法+WPS+vscode+vim
  9. UVM通信篇之五:TLM2通信
  10. 抓包工具Fiddler抓取手机包和修改接口数据