首页 > 其他分享 >使用ftrace查找Kernel启动阶段的延时原因

使用ftrace查找Kernel启动阶段的延时原因

时间:2024-08-02 22:51:47浏览次数:12  
标签:Kernel ftrace trace kernel tracing echo sys 延时 debug

查找Kernel启动阶段的延时原因

1.确保内核配置了如下选项

CONFIG_FTRACE: "Tracers"
CONFIG_FUNCTION_TRACER: "Kernel Function Tracer"
CONFIG_FUNCTION_GRAPH_TRACER: "Kernel Function Graph Tracer"

2.配置function graph trace到commandline

tracing_thresh=200 ftrace=function_graph

这将在kernel启动阶段自动使能function graph tracer,并且会跟踪所有延迟超过200us的function

3.用户关闭trace

当启动完成后需要用户自行执行关闭操作,trace才会关闭:

echo 0 > /sys/kernel/debug/tracing/tracing_on    

4.获取trace log

`cat /sys/kernel/debug/tracing/trace > /sdcard/trace.txt`

查找最大的kernel stack

1.确保内核配置了如下选项

CONFIG_FTRACE: "Tracers"
CONFIG_FUNCTION_TRACER: "Kernel Function Tracer"
CONFIG_STACK_TRACER: "Trace max stack"

2.配置stack trace到commandline

stacktrace

这将在kernel启动阶段自动使能stack trace,并且除非用户执行:

echo 0 > /proc/sys/kernel/stack_tracer_enabled

否则,stack trace会一直运行下去。

3.获取trace log

cat /sys/kernel/debug/tracing/trace > /sdcard/trace.txt

启动阶段使能event trace

同上,配置commandline:

trace_event=sched:*,timer:*,irq:* trace_buf_size=40M

有上面的实例可以知道,ftrace除了能够在运行阶段动态配置使能和关闭,也可以利用命令行来进行配置操作,这主要是针对boot阶段的trace操作。trace某个进程

echo nop > /sys/kernel/debug/tracing/current_tracer
echo function > /sys/kernel/debug/tracing/current_tracer
echo 520 > /sys/kernel/debug/tracing/set_ftrace_pid 
echo 1 > /sys/kernel/debug/tracing/tracing_on
echo 0 > /sys/kernel/debug/tracing/tracing_on

标签:Kernel,ftrace,trace,kernel,tracing,echo,sys,延时,debug
From: https://www.cnblogs.com/linhaostudy/p/18339756

相关文章

  • SemanticKernel/C#:使用Ollama中的对话模型与嵌入模型用于本地离线场景
    前言上一篇文章介绍了使用SemanticKernel/C#的RAG简易实践,在上篇文章中我使用的是兼容OpenAI格式的在线API,但实际上会有很多本地离线的场景。今天跟大家介绍一下在SemanticKernel/C#中如何使用Ollama中的对话模型与嵌入模型用于本地离线场景。开始实践本文使用的对话模型是gemm......
  • 使用Cython调用CUDA Kernel函数
    技术背景前面写过一篇关于Cython和C语言混合编程的文章,在Cython中可以使用非常Pythonic的方法去调用C语言中的函数。另外我们也曾在文章中介绍过Python中使用CUDA计算的一种方案。其实从Python中去调用CUDA有很多种解决方案,例如直接使用MindSpore、PyTorch、Jax等成熟的框架进行G......
  • SemanticKernel/C#:检索增强生成(RAG)简易实践
    检索增强生成(RAG)是什么?RAG是“Reference-basedGenerativemodelwithAttention”的缩写,也可以被称为“Retrieval-AugmentedGeneration”,是一种结合了检索技术和生成模型的方法,主要用于自然语言处理任务,如文本生成、对话系统、机器翻译等。RAG模型通过从外部知识库中检索相关......
  • 《极限竞速:地平线5》游戏提示缺少kernel32.dll怎么处理?极限竞速地平线5游戏弹窗“缺少
    当游戏弹窗提示“缺少kernel32.dll”时,别慌张。现在为您介绍有效的修复方法。您可以尝试重新注册该动态链接库文件,或者从可靠来源下载并安装。同时,检查系统更新和修复可能存在的系统错误,本篇将为大家带来游戏提示缺少kernel32.dll修复方法的内容,感兴趣的小伙伴们一起来看看吧,希......
  • android 14开机流程详细分析(上) - Boot ROM,Boot loader,kernel,init
    androidu开机流程详细分析本文基于android-14.0.0_r2源码AOSP架构AOSP的软件堆栈包含以下层:图1.AOSP软件堆栈架构下面列出了图1中使用的术语的定义:Android应用完全使用AndroidAPI开发的应用。GooglePlay商店广泛用于查找和下载Android应用,不过也......
  • 如何根据Linux Kernel Mailing List打patch
    Linux内核正在不断开发和改进。每天的补丁都会提交到Linux内核邮件列表(LKML)。其中一些补丁被接受并合并到主流Linux内核中,供用户使用,而其他补丁则永远无法使用。有时从LKML获取补丁是有用的,例如,如果你在内核中开发,或者只是因为你想保持在前沿。另一个原因可能是,您需要向LKML提出......
  • Linux Kernel CFI机制简介及测试禁用
    PS:要转载请注明出处,本人版权所有。PS:这个只是基于《我自己》的理解,如果和你的原则及想法相冲突,请谅解,勿喷。环境说明  无前言  当我们为android移植linux的驱动程序的时候,总会遇到一些错误,这些错误有一部分就是android内核开启的安全的机制导致的。本文就会介绍一种......
  • Linux内核-异常输出调用栈CallTrace与Ftrace工具集
    1dump_stack函数打印内核调用堆栈。举个例子:我们定义四个函数aaa、bbb、ccc、ddd,然后bbb中调用aaa,ccc中调用bbb,ddd函数谁都不调用。在入口函数中,我们调用ccc与ddd函数,看看堆栈打印效果如何:#include<linux/module.h>#include<linux/kernel.h>#include<linux/init.h>#incl......
  • STM32 HAL 定时器代替HAL_Delay延时函数
    因为不知道的原因SysTick_Handler不进入中断,HAL_IncTick函数中的uwTick计数值不能自增,延时函数卡死。用定时器代替系统时钟计数,并重写HAL_Delay延时函数。不使用中断。需要找一个32位计数周期的定时器,才能和32位计数值匹配。我选择的TIM2,STM32H750的TIM2挂载在APB1上,时钟树设......
  • Linux Kernel Utilization Clamping简介
    随着linux内核调度技术的不断演进,目前存在多个调度类(stop、deadline、rt、cfs、idle)以满足不同性质和要求的任务(task)的调度需求。对于用户空间来说,完全公平调度器(CFS)和实时调度器(RT)是绝大多数任务所使用的,但是基于POSIXPriority算法不足以支撑关于选核和调频的调度器特性。关于任......