gpt4 book ai didi

linux - 无法理解 ftrace 输出

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:09:46 25 4
gpt4 key购买 nike

我正在尝试使用 ftrace 跟踪内核。我想跟踪内核中调用的函数是什么。我能够从 /sys/kernel/debug/tracing/trace 捕获函数跟踪。却无法理解。大多数跟踪仅具有以下调用。我期待从应用程序级别到内核级别的函数调用。

                                           get_page_from_freelist() {
0) | next_zones_zonelist() {
0) 0.812 us | } /* next_zones_zonelist */
0) | zone_watermark_ok() {
0) | __zone_watermark_ok() {
0) 0.917 us | } /* __zone_watermark_ok */
0) 2.522 us | } /* zone_watermark_ok */
0) | _raw_spin_lock_irqsave() {
0) 0.825 us | } /* _raw_spin_lock_irqsave */
0) | __rmqueue() {
0) 0.963 us | } /* __rmqueue */
0) | get_pageblock_flags_group() {
0) 0.892 us | } /* get_pageblock_flags_group */
0) | __mod_zone_page_state() {
0) 0.833 us | } /* __mod_zone_page_state */
0) + 13.444 us | } /* get_page_from_freelist */
0) + 16.776 us | } /* __alloc_pages_nodemask */
0) | mod_zone_page_state() {
0) | __mod_zone_page_state() {
0) 0.900 us | } /* __mod_zone_page_state */
0) 2.476 us | } /* mod_zone_page_state */
0) | kmem_cache_alloc() {
0) 0.907 us | } /* kmem_cache_alloc */
0) | __phys_addr() {

最佳答案

内核程序类似于普通的 c:调用 functions() 并在函数中调用其他子函数的 main() 程序。例如:

void f1() {
f2();
f3();
}


void main() {
f1()
f4()
}

一个程序的调用关系将是一个树状结构。本例调用关系为

main() -> f1() -> f2()
-> f3()
-> f4()

ftrace工具显示了kerne的调用函数和每个函数的耗时。在您的 ftrace 结果中,它首先显示内核调用 get_page_from_freelist() 并花费 13us。然后内核从函数 __alloc_pages_nodemask 返回。该函数耗时16us,以此类推。

关于linux - 无法理解 ftrace 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20784142/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com