crash> mach -c CPU 0: struct cpuinfo_x86 { x86 = 6 '\006', x86_vendor = 0 '\000', x86_model = 85 'U', x86_stepping = 7 '\a', x86_tlbsize = 0, x86_virt_bits = 48 '0', x86_phys_bits = 46 '.', x86_coreid_bits = 6 '\006', cu_id = 255 '\377', extended_cpuid_level = 2147483656, cpuid_level = 22, x86_capability = {3219913727, 739248128, 0, 326483200, 2147417087, 0, 289, 1309081818, 31, 3550478331, 15, 15, 0, 0, 119, 0, 2072, 0, 3154117632, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14909440, 0}, x86_vendor_id = "GenuineIntel\000\000\000", x86_model_id = "Intel(R) Xeon(R) Gold 5220R CPU @ 2.20GHz\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000", x86_cache_size = 36608, x86_cache_alignment = 64, x86_cache_max_rmid = 207, x86_cache_occ_scale = 106496, x86_power = 256, loops_per_jiffy = 8800000, x86_max_cores = 24, apicid = 0, initial_apicid = 0, x86_clflush_size = 64, booted_cores = 24, phys_proc_id = 0, logical_proc_id = 0, cpu_core_id = 0, cpu_index = 0, microcode = 83898626, x86_cache_bits = 46 '.', initialized = 1, cpuinfo_x86_extended_size_rh = 0, cpuinfo_x86_extended_rh = { cpu_die_id = 0, logical_die_id = 0 } } ... CPU 95: struct cpuinfo_x86 { x86 = 6 '\006', x86_vendor = 0 '\000', x86_model = 85 'U', x86_stepping = 7 '\a', x86_tlbsize = 0, x86_virt_bits = 48 '0', x86_phys_bits = 46 '.', x86_coreid_bits = 6 '\006', cu_id = 255 '\377', extended_cpuid_level = 2147483656, cpuid_level = 22, x86_capability = {3219913727, 739248128, 0, 326483200, 2147417087, 0, 289, 1309081818, 31, 3550478331, 15, 15, 0, 0, 119, 0, 2072, 0, 3154117632, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14909440, 0}, x86_vendor_id = "GenuineIntel\000\000\000", x86_model_id = "Intel(R) Xeon(R) Gold 5220R CPU @ 2.20GHz\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000", x86_cache_size = 36608, x86_cache_alignment = 64, x86_cache_max_rmid = 207, x86_cache_occ_scale = 106496, x86_power = 256, loops_per_jiffy = 8802902, x86_max_cores = 24, apicid = 123, initial_apicid = 123, x86_clflush_size = 64, booted_cores = 24, phys_proc_id = 1, logical_proc_id = 1, cpu_core_id = 29, cpu_index = 95, microcode = 83898626, x86_cache_bits = 46 '.', initialized = 1, cpuinfo_x86_extended_size_rh = 0, cpuinfo_x86_extended_rh = { cpu_die_id = 0, logical_die_id = 1 } }
可以看到,这里实际读取的是结构体cpuinfo_x86中的内容,内核定义了一个percpu变量:
DECLARE_PER_CPU_READ_MOSTLY(struct cpuinfo_x86, cpu_info);
所以可以通过p
读取cpu_info的内容:
crash> p cpu_info PER-CPU DATA TYPE: struct cpuinfo_x86 cpu_info; PER-CPU ADDRESSES: [0]: ffff88debf80f040 [1]: ffff88debf88f040 [2]: ffff88debf90f040 ... crash> p cpu_info:1 per_cpu(cpu_info, 1) = $348 = { x86 = 6 '\006', x86_vendor = 0 '\000', x86_model = 85 'U', x86_stepping = 7 '\a', x86_tlbsize = 0, x86_virt_bits = 48 '0', x86_phys_bits = 46 '.', x86_coreid_bits = 6 '\006', cu_id = 255 '\377', extended_cpuid_level = 2147483656, cpuid_level = 22, x86_capability = {3219913727, 739248128, 0, 326483200, 2147417087, 0, 289, 1309081818, 31, 3550478331, 15, 15, 0, 0, 119, 0, 2072, 0, 3154117632, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14909440, 0}, x86_vendor_id = "GenuineIntel\000\000\000", x86_model_id = "Intel(R) Xeon(R) Gold 5220R CPU @ 2.20GHz\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000", x86_cache_size = 36608, x86_cache_alignment = 64, x86_cache_max_rmid = 207, x86_cache_occ_scale = 106496, x86_power = 256, loops_per_jiffy = 8800000, x86_max_cores = 24, apicid = 2, initial_apicid = 2, x86_clflush_size = 64, booted_cores = 24, phys_proc_id = 0, logical_proc_id = 0, cpu_core_id = 1, cpu_index = 1, microcode = 83898626, x86_cache_bits = 46 '.', initialized = 1, cpuinfo_x86_extended_size_rh = 0, cpuinfo_x86_extended_rh = { cpu_die_id = 0, logical_die_id = 0 } }