标签: tracing

在 ftrace 中过滤掉某些进程和/或 pid?

我不确定我是否以正确的方式思考这个问题(如果我错了,请纠正我),但以下是我对 ftrace 的理解。

在/sys/kernel/debug/tracing中,有以下文件:

set_ftrace_filter

这只会跟踪里面列出的功能,

set_ftrace_notrace

这只会跟踪里面没有列出的功能,和

set_ftrace_pid

它只会跟踪带有 pid 内部的进程。

我的问题是:有没有办法配置它,以便 ftrace 只跟踪没有特定 pid(或进程名称)的进程?

比喻:

set_ftrace_filter : set_ftrace_notrace :: set_ftrace_pid : x

x是否存在,如果存在,我该如何使用它?

例如,如果我想跟踪除 pid 为 48 的进程之外的所有进程,是否有某种方法可以将不是 48 的内容放入 set_ftrace_pid 中?

我一直在阅读文档并在网上搜索,但我找不到实现这一目标的方法或这是否可行。

为什么我这样做:我有一个跟踪内核级系统调用的程序,但我想将程序的 pid(以及它的子进程的 pid,如果有必要的话)写入过滤器,这样它们就不会包含在跟踪数据。读取跟踪时,我可以在读取每个跟踪记录时检查 pid 并决定是否使用该记录,但如果有办法避免它,我不希望为读取的每个记录添加此开销。

感谢您的时间!

linux process system-calls tracing ftrace

8
推荐指数
1
解决办法
3166
查看次数

如何在文件中捕获 xtrace 输出(仅)?

我知道我可以将xtrace输出重定向到some_file以下内容:

exec 2 >> some_file
set +x
Run Code Online (Sandbox Code Playgroud)

...但这some_file不仅会发送到xtrace输出,还会发送到最初发送到 的任何其他内容fd 2,其中包括大多数错误消息和警告,都与 无关xtrace

有没有办法捕获 中的xtrace输出some_file

我应该补充一点,我正在寻找一种方法来做到这一点,尽可能少地扭曲xtrace输出本身,以及通过PS4设置收集的时间信息,例如

zmodload zsh/datetime
export PS4='${(j::)epochtime} %N:%i> '
Run Code Online (Sandbox Code Playgroud)

performance zsh audit tracing

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

如何调试/跟踪 bash 函数?

我有一个 bash 脚本myscript.sh,里面有很多函数。要运行一个函数,我会写

source myscript.sh; myfunction
Run Code Online (Sandbox Code Playgroud)

如何调试这样的功能?

bash debugging tracing

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

如何追踪DMA?

我正在开发通过直接内存访问 (DMA) 事务与 PCI 卡通信的软件。我的程序使用一套驱动程序和一个处理 DMA 的库。一切都在 Red Hat Linux 上运行。

为了测试和测量我的程序的性能,我想跟踪 DMA 事务的开始和结束。现在我通过查看库中的几个函数来做到这一点:

  • dma_from_hostdma_to_host通过配置卡寄存器中的值并写入1名为的寄存器来启动事务DMA_DESC_ENABLE
  • dma_wait通过不断检查DMA_DESC_ENABLE寄存器的值来等待事务完成。

但我想要更可靠的确认交易已经开始,并在交易结束时获得更精确的信号。来自 Linux 或硬件本身的东西是最好的。

我知道原则上这是一个麻烦的情况。DMA 的思想是硬件(PCI 卡或主板上的 DMA 控制器)将事物直接复制到进程的内存中,绕过 CPU 和操作系统。但我希望它不会只是将内容复制到 RAM 中而不以某种方式通知 CPU。是否有一些标准方法来跟踪这些交易,或者它是非常特定于平台的?

是否有一些特殊的中断通知 CPU DMA 的开始和结束?我在我使用的驱动程序中找不到类似的东西。但我对司机没有经验,所以我很容易看错地方。

另一个想法,是否有任何类似 PMU 的硬件监视器可以提供这些信息?只计算 PCI 通道上的事务的东西?

还有一个想法,我是否理解可以将自定义 DMA 跟踪器编写为 Linux 模块或 BPF 程序来连续检查该DMA_DESC_ENABLE寄存器的值?这是一种可行的方法吗?有这样的已知示踪剂吗?

linux monitoring tracing

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

定义不显示在 xtrace 中的 bash 函数(set -x)

在 bash 脚本中,我有一个log()在多个地方使用的logs()函数,以及一个将大量行转移到log(). 当我运行该脚本的部分set -x,显然内的所有命令logs()log()被跟踪了。

我想定义logs()并且log()至少他们的内容,最多甚至他们的呼叫被禁止set -x输出。

bash debugging function tracing

4
推荐指数
2
解决办法
523
查看次数