Kernel 后缀是什么。第「;及";。“冷”;Linux内核结果中的平均值';什么是垃圾堆?

Kernel 后缀是什么。第「;及";。“冷”;Linux内核结果中的平均值';什么是垃圾堆?,kernel,Kernel,有时dump\u stack()会在函数名中添加后缀“.cold”和“.part”,例如,下面是[1]中的部分行 [ 638.115912][ C0] Call Trace: [ 638.115986][ C0] ? kasan_set_free_info+0x1b/0x30 [ 638.115990][ C0] ? __kasan_slab_free+0xd8/0x120 [ 638.115995][ C0] ? kmem_cache_free.part.

有时
dump\u stack()
会在函数名中添加后缀“.cold”和“.part”,例如,下面是[1]中的部分行

[  638.115912][    C0] Call Trace:
[  638.115986][    C0]  ? kasan_set_free_info+0x1b/0x30
[  638.115990][    C0]  ? __kasan_slab_free+0xd8/0x120
[  638.115995][    C0]  ? kmem_cache_free.part.0+0x67/0x1f0
[  638.115999][    C0]  ? __put_cred+0x1de/0x250
[  638.116004][    C0]  ? revert_creds+0x1a8/0x1f0
[  638.116008][    C0]  ? do_faccessat+0x2ca/0x820
[  638.116013][    C0]  ? do_syscall_64+0x2d/0x70
[  638.116017][    C0]  ? find_held_lock+0x2d/0x110
[  638.116022][    C0]  ? lock_acquire+0x1f1/0xad0
[  638.116027][    C0]  ? debug_check_no_obj_freed+0xc7/0x41c
[  638.116031][    C0]  ? find_held_lock+0x2d/0x110
[  638.116036][    C0]  ? debug_check_no_obj_freed+0x20c/0x41c
[  638.116041][    C0]  ? lock_downgrade+0x830/0x830
[  638.116045][    C0]  ? lockdep_hardirqs_off+0x89/0xc0
[  638.116050][    C0]  ? trace_hardirqs_off+0x27/0x210
[  638.116055][    C0]  ? _raw_spin_unlock_irqrestore+0x9b/0xe0
[  638.116060][    C0]  ? debug_check_no_obj_freed+0x20c/0x41c
[  638.116064][    C0]  kasan_set_track+0x1c/0x30
[  638.116069][    C0]  kasan_set_free_info+0x1b/0x30
[  638.116073][    C0]  __kasan_slab_free+0xd8/0x120
[  638.116078][    C0]  ? __put_cred+0x1de/0x250
[  638.116082][    C0]  kmem_cache_free.part.0+0x67/0x1f0
 
[  638.116220][ T1172] Kernel panic - not syncing: hung_task: blocked tasks

[  638.570843][ T1172] Call Trace:
[  638.574119][ T1172]  dump_stack+0x18f/0x20d
[  638.578499][ T1172]  panic+0x2e3/0x75c
[  638.582375][ T1172]  ? __warn_printk+0xf3/0xf3
[  638.586953][ T1172]  ? lapic_can_unplug_cpu.cold+0x38/0x38
[  638.592562][ T1172]  ? preempt_schedule_thunk+0x16/0x18
[  638.597922][ T1172]  ? watchdog.cold+0x22d/0x24b
[  638.602659][ T1172]  ? watchdog+0xc59/0xf30
[  638.606965][ T1172]  watchdog.cold+0x23e/0x24b
[  638.611530][ T1172]  ? trace_sched_process_hang+0x2e0/0x2e0
[  638.617227][ T1172]  kthread+0x3b5/0x4a0
[  638.621272][ T1172]  ? __kthread_bind_mask+0xc0/0xc0
[  638.626358][ T1172]  ? __kthread_bind_mask+0xc0/0xc0
[  638.631445][ T1172]  ret_from_fork+0x1f/0x30
[  638.637042][ T1172] Kernel Offset: disabled
[  638.641361][ T1172] Rebooting in 86400 seconds..
这些后缀是什么意思


[1]

.cold
是一个函数属性。GCC文档在以下方面描述了功能属性:

在GNU C和C++中,可以使用函数属性指定某些函数属性,这些属性可以帮助编译器优化调用或更仔细地检查代码以获得正确性。 常见的功能属性,包括
.cold
,如中所述:

函数的cold属性用于通知编译器该函数不太可能执行。该函数针对大小而不是速度进行了优化,在许多目标上,它被放置在文本部分的一个特殊小节中,因此所有冷函数都紧密地显示在一起,从而改善了程序非冷部分的代码局部性。分支预测机制将导致代码内冷函数调用的路径标记为不太可能。因此,将用于处理不太可能出现的情况(如perror)的函数标记为cold非常有用,这样可以改进热函数的优化,而热函数很少会调用标记函数

.part.
后缀由用户lgeorget在以下内容中解释:

有时,GCC评估大函数的控制流的某个部分可以内联,但内联整个大函数是不合适的。因此,它将函数拆分,将大部分放在自己的函数中,该函数将原始函数名加上.part+作为名称接收,并将其余部分内联到其他函数中