标签: ftrace

ftrace:通过echo从function_graph更改current_tracer时系统崩溃

我最近一直在玩ftrace来监控我系统的某些行为特征.我一直在处理通过一个小脚本打开/关闭跟踪.运行脚本后,我的系统会崩溃并自行重启.最初,我认为脚本本身可能存在错误,但我已经确定崩溃和重启是由于设置为function_graph echo时某些跟踪器到/ sys/kernel/debug/tracing/current_tracer的结果current_tracer.

也就是说,以下命令序列将产生崩溃/重启:

echo "function_graph" > /sys/kernel/debug/tracing/current_tracer
echo "function" > /sys/kernel/debug/tracing/current_tracer
Run Code Online (Sandbox Code Playgroud)

在上述echo语句导致崩溃后重启,我看到很多输出内容如下:

清除孤儿inode <inode>

我试图通过将current_tracerfunction_graph中的值替换为C程序中的其他内容来重现此问题:

#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>

int openCurrentTracer()
{
        int fd = open("/sys/kernel/debug/tracing/current_tracer", O_WRONLY);
        if(fd < 0)
                exit(1);

        return fd;
}

int writeTracer(int fd, char* tracer)
{
        if(write(fd, tracer, strlen(tracer)) != strlen(tracer)) {
                printf("Failure writing %s\n", tracer);
                return 0;
        }

        return 1;
}

int main(int argc, char* argv[])
{
        int fd = openCurrentTracer(); …
Run Code Online (Sandbox Code Playgroud)

linux shell ftrace echo linux-kernel

28
推荐指数
1
解决办法
1052
查看次数

如何使一个Linux内核函数可用于ftrace function_graph tracer?

我想在内核启动过程中使用ftrace跟踪一个函数,function_graph以了解它的作用,但是它不可用available_filter_functions.

我试图将其导出EXPORT_SYMBOL(),猜测它会使它可用,但事实并非如此.

你有解决方案吗 ?

有关信息,功能我想跟踪是persistent_ram_init_ringbufferpersistent_ram_early_init在内核的Android 3.4.

我仔细阅读了文档,但没有发现任何内容,grep没有帮助更多......

谢谢

linux android kernel ftrace

12
推荐指数
1
解决办法
4415
查看次数

在panic()发生之前使用trace-cmd/ftrace来获取function_graph

我试图trace-cmd收集有关我看到的内核崩溃的更多信息.不幸的是,内核崩溃时出现"内核崩溃 - 不同步"消息(即套接字和文件缓冲区没有刷新,因此崩溃时缓冲区中的任何内容都不可避免地丢失).

有办法:

  1. 强制trace-cmd进程将其缓冲区刷新到文件系统或套接字?要么
  2. make trace-cmd/ftrace以避免缓冲(即在场景后面调用printk()并使用netconsole)?

由于我trace-cmd在虚拟化环境中运行该命令,因此我不关心硬盘驱动器是否偶尔会损坏,因为我可以简单地恢复到最后一个良好的快照或重新部署VM.

crash ftrace linux-kernel panic

9
推荐指数
1
解决办法
223
查看次数

Android Systrace跟踪文件格式

Android systrace工具,通过ADB 调用atrace工具.但是,我不太了解跟踪文件的格式.显然它与linux ftrace工具非常相似,但有些不同.主要区别在于它不使用System.Map文件,但它将所有信息包含在跟踪文件中.此外,还有一些特定于Android的新B | E条目.

Android源代码中有关于此格式的一些信息,请访问:http://androidxref.com/4.1.1/xref/external/chromium-trace/src/tracing/linux_perf_importer.js

但是,在该文档中,我们可以读到该格式属于Linux Perf Tool.我不这么认为,linux perf作为输出提供了一种非常不同的格式......(除非某些特殊配置是活动的......)

我的问题是:有谁知道我在哪里可以找到关于使用adb的atrace工具生成的android跟踪文件的官方文档?

这种格式对你来说很熟悉吗?

# tracer: nop
#
# entries-in-buffer/entries-written: 66427/66427   #P:2
#
#                              _-----=> irqs-off
#                             / _----=> need-resched
#                            | / _---=> hardirq/softirq
#                            || / _--=> preempt-depth
#                            ||| /     delay
#           TASK-PID   CPU#  ||||    TIMESTAMP  FUNCTION
#              | |       |   ||||       |         |
          atrace-1724  [000] d..3 14186.680000: sched_switch: prev_comm=atrace prev_pid=1724 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120 …
Run Code Online (Sandbox Code Playgroud)

linux android ftrace perf systrace

7
推荐指数
1
解决办法
6181
查看次数

Linux内核中Perf事件子系统的性能开销

Linux的性能计数器是一个新的基于内核的子系统,它为所有事物性能分析提供了框架.它还包括硬件级别(CPU/PMU,性能监视单元)功能和软件功能(软件计数器,跟踪点).从2.6.33开始,内核为开发人员提供'perf_event_create_kernel_counter'内核api,以创建内核计数器来收集系统运行时信息.我最关心的是启用tracepoint/ftrace时对整个系统的性能影响.我找不到关于它们的文档.我曾经被告知ftrace是通过动态修补代码实现的,它会大大减慢系统速度吗?

profiling performancecounter overhead ftrace linux-kernel

6
推荐指数
1
解决办法
2519
查看次数

如何在Linux内核中对特定功能进行基准测试或跟踪?

如何使用ftrace()(或其他任何东西)跟踪Linux内核中特定的用户定义函数?我正在尝试创建和运行一些微基准测试,所以我希望有时间运行某些功能.我已经阅读了(至少尽可能多的)文档,但朝着正确方向迈出的一步将是非常棒的.

我倾向于ftrace(),但在Ubuntu 14.04上有问题.

c ftrace linux-kernel systemtap

6
推荐指数
1
解决办法
590
查看次数

ftrace是否允许捕获Linux内核的系统调用参数,或仅捕获函数名称?

目标是检查任何进程传递给特定系统调用(例如exec,open等)的参数.

官方文档中,没有描述记录函数参数的能力(主要看"函数"跟踪器,因为我不需要图形).

如果我能在ftrace的框架内实际做到这一点,我想确保我不会忽视某些东西并浪费时间使用更具异国情调的东西.

trace ftrace linux-kernel

6
推荐指数
1
解决办法
2521
查看次数

关于ftrace的好解释/文档

我刚刚读到2.6.27内核有一个名为ftrace的新模块,听起来很像suns dtrace实用程序.我在搜索文档时遇到了一些麻烦,我想知道是否还有其他人有什么东西.这是什么东西将在完整的编程堆栈上实现,如dtrace,我们将获得一个很好的小脚本语言在Linux中进行跟踪?

linux kernel ftrace

5
推荐指数
1
解决办法
2605
查看次数

使用ftrace和kprobes捕获用户空间程序集(通过使用虚拟地址转换)?

对于冗长的帖子道歉,我在以较短的方式制定它时遇到了麻烦.此外,这可能更适合Unix和Linux Stack Exchange,但我会先在SO处尝试,因为有一个ftrace标签.

无论如何 - 我想观察用户程序的机器指令是否在完全function_graph捕获的上下文中执行ftrace.一个问题是我需要这个旧内核:

$ uname -a
Linux mypc 2.6.38-16-generic #67-Ubuntu SMP Thu Sep 6 18:00:43 UTC 2012 i686 i686 i386 GNU/Linux
Run Code Online (Sandbox Code Playgroud)

......在这个版本中,没有UPROBES- 正如3.5 [LWN.net]中的Uprobes应该能够做到这一点.(只要我不需要修补原始内核,我就会愿意尝试使用树构建的内核模块,因为User-Space Probes(Uprobes)[chunghwan.com]似乎可以证明;但是至于我可以从0看到:基于Inode的uprobes [LWN.net],2.6可能需要一个完整的补丁)

但是,在这个版本上,有一个/sys/kernel/debug/kprobes,和/sys/kernel/debug/tracing/kprobe_events; 和Documentation/trace/kprobetrace.txt意味着可以直接在地址上设置kprobe; 即使我无法在任何地方找到如何使用它的例子.

在任何情况下,我仍然不确定使用什么地址 - 作为一个小例子,假设我想跟踪程序main功能的开始wtest.c(包括在下面).我可以这样做来编译并获得一个机器指令汇编列表:

$ gcc -g -O0 wtest.c -o wtest
$ objdump -S wtest | less
...
08048474 <main>:
int …
Run Code Online (Sandbox Code Playgroud)

linux debugging ftrace linux-kernel

5
推荐指数
1
解决办法
2311
查看次数

在kprobes支持ftrace之后,Linux内核中的跟踪点是否冗余?

在Linux内核中提供kprobe事件支持ftrace时使用跟踪点事件的用例有哪些?似乎可以使用"跟踪点事件"使用kprobe事件完成所有可能的事情,因为可以在跟踪点事件可用的同一点设置kprobe事件.

我错过了什么吗?

ftrace linux-kernel kprobe

4
推荐指数
1
解决办法
423
查看次数