首页 > 其他分享 >crash工具学习 —— percpu相关的一些用法

crash工具学习 —— percpu相关的一些用法

时间:2023-09-23 17:13:31浏览次数:42  
标签:crash percpu CPU 用法 queue single call cpu

作者

[email protected]

查看percpu变量在每个cpu上的基地址

crash> kmem -o
PER-CPU OFFSET VALUES:
  CPU 0: ffff88807f600000
  CPU 1: ffff88807fa00000
  CPU 2: ffff88813d600000
  CPU 3: ffff88813da00000
  CPU 4: ffff8881bd600000
  CPU 5: ffff8881bda00000
  CPU 6: ffff88823d600000
  CPU 7: ffff88823da00000

查看一个全局的percpu变量的具体值

以下面这个全局percpu变量call_single_queue为例:

static DEFINE_PER_CPU_SHARED_ALIGNED(struct llist_head, call_single_queue);
  • 查看这个percpu变量在每个cpu上的地址
crash> p call_single_queue
PER-CPU DATA TYPE:
  struct llist_head call_single_queue;
PER-CPU ADDRESSES:
  [0]: ffff88807f800340
  [1]: ffff88807fc00340
  [2]: ffff88813d800340
  [3]: ffff88813dc00340
  [4]: ffff8881bd800340
  [5]: ffff8881bdc00340
  [6]: ffff88823d800340
  [7]: ffff88823dc00340
  • 查看其在某些CPU上的具体内容
crash> p call_single_queue:0,2,5-7
per_cpu(call_single_queue, 0) = $5 = {
  first = 0x0
}
per_cpu(call_single_queue, 2) = $6 = {
  first = 0x0
}
per_cpu(call_single_queue, 5) = $7 = {
  first = 0x0
}
per_cpu(call_single_queue, 6) = $8 = {
  first = 0x0
}
per_cpu(call_single_queue, 7) = $9 = {
  first = 0x0
}

根据结构体中percpu变量的偏移地址得到绝对地址

以kmem_cache结构体的成员cpu_cache为例:

struct kmem_cache {
	struct array_cache __percpu *cpu_cache;

/* 1) Cache tunables. Protected by slab_mutex */
	unsigned int batchcount;
	unsigned int limit;
	unsigned int shared;
...
  • 查看偏移量
crash> struct kmem_cache.cpu_slab -x ffff893751f60800
  cpu_slab = 0x5fc135c77b40,

上面cpu_slab的偏移量是0x5fc135c77b40

假如想知道这个成员在cpu10上的地址,下面有两种方法:

  • 绝对值相加

首先获取percpu变量在cpu10上的基地址:

crash> kmem -o | grep "CPU 10"
 CPU 10: ffff88debfd00000

然后相加即可:

crash> eval ffff88debfd00000 + 0x5fc135c77b40
hexadecimal: ffffe89ff5977b40
    decimal: 18446718372450630464  (-25701258921152)
      octal: 1777777211776545675500
     binary: 1111111111111111111010001001111111110101100101110111101101000000

上面将相加后的结果分别按16进制,10进制,8进制以及2进制进行了输出。

  • 使用ptov
crash> ptov 0x5fc135c77b40:10
PER-CPU OFFSET: 5fc135c77b40
  CPU     VIRTUAL
  [10]  ffffe89ff5977b40

这种方法更加方便。

标签:crash,percpu,CPU,用法,queue,single,call,cpu
From: https://www.cnblogs.com/pengdonglin137/p/17724719.html

相关文章

  • C语言-字符串相关库函数用法+模拟实现
    常见的与字符串有关的库函数strstr()寻找子字符串strcat()字符串追加函数strcmp()字符串比较函数strcpy()字符串拷贝函数strlen()求解字符串长度...1.strstr()寻找子字符串我们先来看MSDN中对该函数的功能描述:Findasubstring.(寻找子......
  • C语言-字符串相关库函数用法+模拟实现
    常见的与字符串有关的库函数strstr()寻找子字符串strcat()字符串追加函数strcmp()字符串比较函数strcpy()字符串拷贝函数strlen()求解字符串长度...1.strstr()寻找子字符串我们先来看MSDN中对该函数的功能描述:Findasubstring.(寻找子......
  • 使用qemu来dump虚拟机的内存,然后用crash来分析
    场景如果虚拟机没有开启kdump,或者卡死了,那么可以进入qemu的monitor模式将虚机的内存保存到文件中,然后使用crash工具进行分析。示例启动虚拟机,然后按ctrl+ac进入monitor,查看帮助(qemu)helpdump-guest-memorydump-guest-memory[-p][-d][-z|-l|-s|-w]filename[beginl......
  • js中!!的用法(双感叹号)
    在javascript代码中经常会见到!!的情况,本文即以实例形式较为深入的分析javascript中2个感叹号的用法。分享给大家供大家参考之用。具体分析如下:javascript中的!!是逻辑"非非",即是在逻辑“非”的基础上再"非"一次。通过!或!!可以将很多类型转换成bool类型,再做其它判断。使用javas......
  • IF语句的三种用法
    第一种:IF语句IF(expr1,expr2,expr3); expr1、expr2、expr3分别代表条件1、条件2、条件3如果expr1为TRUE,则IF()返回值为expr2,否则返回值为expr3例子:updatesalarysetsex=if(sex='男','女','男')将salary表中的性别进行转换,男变女,女变男第二种:IFNULL(expr1,expr2)假......
  • 微信小程序全局变量(globalData)和缓存(StorageSync)的区别和用法
    globalData和storage的区别一、app.globalData是全局变量,下次进入的时候,就要重新获取,一般用于:1、保存一些可能涉及安全类的数据,例如资源类,每次需要很准确的,就建议用全局变量。2、全局变量每次关闭小程序重新打开的时候,都会进行初始化更新。二、缓存(StorageSync)本地存储,storage......
  • 一次性搞懂JS字符串截取方法substring()、slice()以及substr()的用法和区别
    substring()和slice()都接受两个参数,“start”和“end”。“start”表示截取的开始位置,“end”表示结束的位置(不包括该位置的字符,也就是前要后不要)。如果不传参数,则返回字符串本身的一个副本。 如果只传一个参数,则从该位置开始,截取到字符串的末尾。 如果传递两个参数,则......
  • 4.7 Java this关键字详解(3种用法)
    this关键字是 Java 常用的关键字,可用于任何实例方法内指向当前对象,也可指向对其调用当前方法的对象,或者在需要当前类型对象引用时使用。下面我们根据示例分别讲解this关键字的作用。this.属性名大部分时候,普通方法访问其他方法、成员变量时无须使用this前缀,但如果方法里......
  • 每日总结(sqoop基本用法)
    将mysql中user_info表数据导入到HDFS的/test路径1bin/sqoopimport\2--connectjdbc:mysql://hadoop102:3306/gmall\库名3--usernameroot\4--password123456\5--tableuser_info\表名6--columnsid,login_name\......
  • pandas学习-基础用法
      导入数据、数据的基本操作¶  导入libraries¶ In [1]:importpandasaspdimportnumpyasnpimportos  导入数据¶ In [2]:file_path=os.path.abspath('data/chipotle.tsv')file_path......