问题标签 [ftrace]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
585 浏览

android - 如何将 Android FTrace 精度提高到微秒?

我正在尝试在Android环境中生成FTrace文件,使用:

问题是mytracefile.txt中时间戳的精度以毫秒为单位

通常,它应该以微秒为单位,例如14186.691234而不是14186.690000

我已经测试了我拥有的所有其他trace_clock 选项本地、全局和计数器),但结果始终相同。更改该参数不会更改输出文件中的任何内容。

我仔细阅读了 FTrace 文档,但我不知道还有哪些配置需要更改。

在互联网上搜索我只能找到这个错误报告,但没有解决: http: //lists.linaro.org/pipermail/linaro-dev/2011-February/002720.html

有什么建议吗?

我必须安装内核中的其他模块吗?

更新:

  • 安卓版本:4.2.2
  • 内核 Linux 版本:3.4.7

dmesg输出也显示毫秒精度:

谢谢,

0 投票
1 回答
141 浏览

linux - 在linux中找到最长的中断

我有一个系统,我有一个需要很长时间(几毫秒)的中断,并导致一些实时问题。问题是我不知道它是哪个中断。我正在使用带有 irqsoff 的 ftrace,它报告最长的 irq-off 周期从 handle_int 开始,到 __do_softirq 结束(因此,它处于中断状态)。有没有一种简单的方法来确定是哪个中断导致了延迟?(注:内核版本为3.4)

0 投票
0 回答
309 浏览

android - 使用 FTRACE 调试软件挂起

如何使用 FTRACE 调试软件挂起问题?我假设在软件挂起后我们甚至无法在busybox shell 上输入任何内容。有什么办法可以将痕迹保存到 sdcard 或其他东西中吗?

谢谢

0 投票
1 回答
372 浏览

linux-kernel - 这些跟踪事件代表什么?

我刚刚学会了使用 ftrace 和 perf,它们有一些我不理解的共同点——跟踪事件。我猜它们是一些内核内部函数,如果启用它们,ftrace 会在调用它们时记录它们的名称。那正确吗?所有事件都按下面列出的组进行排序。有人能告诉我他们代表什么,或者我可以从哪里获得有关他们的详细信息。谢谢。

块 btrfs 压缩 drm ext3 ext4 fs ftrace gpio header_event header_page irq jbd jbd2 kmem mce 模块 napi net power raw_syscalls rcu regmap 调节器 rpm sched scsi 信号 skb sock syscalls timer udp vfs vmscan vsyscall workqueue writeback xen xfs

0 投票
1 回答
1102 浏览

linux - 如何使用 ftrace 跟踪 shell 命令的所有事件?

如何像cp file1 file2使用 ftrace 工具一样跟踪命令?

我想查看我使用时调用的所有函数,cp file1 file2但我不知道该怎么做。任何人都可以帮助我并在终端中写下执行此操作的确切命令吗?

0 投票
1 回答
2774 浏览

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

为冗长的帖子道歉,我无法以更短的方式制定它。此外,也许这更适合 Unix 和 Linux 堆栈交换,但我会先在这里尝试,因为有一个ftrace标签。

无论如何 - 我想观察用户程序的机器指令是否在function_graph使用ftrace. 一个问题是我需要一个较旧的内核:

...在这个版本中,没有UPROBES- 正如3.5 [LWN.net] 中的 Uprobes所指出的那样,应该能够做类似的事情。(只要我不必修补原始内核,我愿意尝试用树构建的内核模块,正如用户空间探测器(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(包括在下面)。我可以这样做来编译并获得机器指令汇编列表:

我将通过此脚本设置 ftrace 日志记录:

您可以在调试中看到一部分(否则很复杂)导致ftrace日志 - 观察内核空间中的硬盘写入(使用驱动程序/模块) - Unix & Linux Stack Exchange(我从中获得示例)。

基本上,我希望在此ftrace日志中打印输出,当main(例如)0x8048474、0x8048475、0x8048477、0x804847a、0x804847d、0x8048483 和 0x8048487 处的指令的第一条指令由(任何)CPU 执行时。问题是,据我从“内存中的程序剖析”中所理解的:Gustavo Duarte,这些地址是虚拟地址,从进程本身的角度来看(我认为,相同的角度显示为/proc/PID/maps)。 .. 显然,因为krpobe_event我需要一个物理地址?

所以,我的想法是:如果我能找到与程序反汇编的虚拟地址相对应的物理地址(比如通过编写一个内核模块,它将接受 pid 和地址,并通过 procfs 返回物理地址),我可以设置在上面的脚本中将地址作为一种“跟踪点” /sys/kernel/debug/tracing/kprobe_events- 并希望将它们放入ftrace日志中。原则上这可行吗?

我在 Linux(ubuntu) 上发现了一个问题,C 语言:虚拟到物理地址转换 - 代码日志

在用户代码中,您无法知道虚拟地址对应的物理地址。这是信息根本不会导出到内核之外。它甚至可能随时发生变化,尤其是当内核决定换出您进程的部分内存时。
...
使用 systemcall/procfs 将虚拟地址传递给内核并使用 vmalloc_to_pfn。通过 procfs/registers 返回物理地址。

但是,vmalloc_to_pfn似乎也不是微不足道的:

x86 64 - vmalloc_to_pfn 在 Linux 32 系统上返回 32 位地址。为什么它会切断 PAE 物理地址的更高位?- 堆栈溢出

VA:0xf8ab87fc PA 使用 vmalloc_to_pfn:0x36f7f7fc。但我实际上期待:0x136f7f7fc。
...
物理地址介于 4 到 5 GB 之间。但我无法获得确切的物理地址,我只能获得截断的 32 位地址。还有其他方法可以获得真实的物理地址吗?

所以,我不确定我能多可靠地提取物理地址以便它们被 kprobes 跟踪 - 特别是因为“它甚至可以随时改变”。但是在这里,我希望由于程序很小且微不足道,因此程序在被跟踪时不会交换的合理机会,从而可以获得适当的捕获。(所以即使我必须多次运行上面的调试脚本,只要我能希望在 10 次(甚至 100 次)中获得一次“正确”的捕获,我就可以接受。)。

请注意,我希望通过 输出ftrace,以便时间戳在同一域中表示(请参阅使用 usbmon 和 ftrace 的可靠 Linux 内核时间戳(或其调整)? - 堆栈溢出以说明时间戳问题)。因此,即使我可以想出一个gdb脚本,从用户空间运行和跟踪程序(同时获得ftrace捕获)——我想避免这种情况,因为gdb它本身的开销会显示在ftrace日志中.

所以,总结一下:

  • 从虚拟(从可执行文件的反汇编)地址获取(可能通过单独的内核模块)物理地址的方法 - 因此它们用于触发 ftrace 记录的 kprobe_event - 值得追求吗?如果是这样,是否有任何可用于此地址转换目的的内核模块示例?
  • 在执行特定内存地址时,我是否可以使用内核模块“注册”回调/处理函数?然后我可以简单地trace_printk在该函数中使用 a 来生成ftrace日志(或者即使没有,处理函数名称本身也应该显示在ftrace日志中),并且看起来不会有太多开销......

实际上,在 2007 年的这篇帖子中,Jim Keniston - utrace-based uprobes: systemtap mailing list 中,有一个11. Uprobes Example(添加到Documentation/uprobes.txt),似乎就是这样 - 一个注册处理函数的内核模块。不幸的是,它使用linux/uprobes.h; 我只有kprobes.h在我的/usr/src/linux-headers-2.6.38-16/include/linux/. 此外,在我的系统上,甚至systemtap抱怨CONFIG_UTRACE未启用(请参阅此评论)...因此,如果我可以使用任何其他方法来获得我想要的调试跟踪,而无需重新编译内核以获取 uprobes,它会很高兴知道...


wtest.c

0 投票
1 回答
1639 浏览

linux - 如何获取实时Linux内核模式下的中断时间(时间戳)?

客户端/服务器通信 - 客户端是发送者,服务器是接收者。

当服务器在以太网接口(UDP)上接收到数据时,服务器中的内核被触发。我在服务器端使用实时 LINUX。服务器(即嵌入式 pc 目标)正在处理中断以触发嵌入式 pc 目标(包含 rt Linux)以获取注意力以执行新到达的数据。

如何在中断发生后立即计算内核中的时间并将响应发送回客户端?

0 投票
1 回答
77 浏览

debugging - FTRACE 在修改内存中的代码指令后是否会使 CPU 指令缓存失效?

众所周知,内核使用“mcount”作为占位符,在 FTRACE 操作期间重定向 CPU 指令执行。例如:

从上面看,指令“call mcount”将在 FTRACE 操作期间被其他一些指令动态替换。

问题是内核内存中的指令替换有多安全——因为 CPU 在执行之前总是将一定数量的指令预加载到其缓存中。并且可能会发生在加载指令后,FTRACE 操作会替换内存中的指令。但是 CPU 仍然会执行缓存的版本,对吧?还是 FTRACE 在修改内存内容后立即触发 CPU 指令/数据缓存失效?(请提供内核源代码参考?)

谢谢。

PS:参考: http : //people.redhat.com/srostedt/ftrace-tutorial.odp(幻灯片36和37展示了在功能上启用FTRACE时内存中的指令操作)

0 投票
1 回答
654 浏览

linux - 如何使 ftrace 可以使用 linux 内核函数?

我想跟踪在暂停/恢复期间调用的某些内核模块中的 2 个函数。

这些函数确实出现在“available_filter_functions”中。

这就是我配置 ftrace 的方式:

当我暂停/恢复机器时,这些功能肯定会被调用(我看到日志)但不会出现在cat trace

有人有什么主意吗?

谢谢,

马蒂

0 投票
0 回答
202 浏览

android - Android调度程序分析-进程唤醒自我?

我目前正在使用 ftrace(特别是通过 Android 上的 atrace)来帮助我了解调度程序的线程唤醒流程。然而,下面的行让我感到困惑。它表明当前任务 (ls-4787) 正在自行唤醒 (comm=ls pid=4787)。

为什么或如何会发生这种情况?我想不出当前正在运行的进程(已经在运行队列中!)将自己添加到队列中的任何情况。我读错了吗?感谢您提供的任何帮助!

作为附录,这些特殊实例似乎总是与 kworker 事件相结合,但我不确定为什么从调度程序的角度来看这会受到影响。