问题
Linux 中用于跟踪事件的跟踪管道是否接受同时读取器?
语境
我试图RAS
在运行一些基准测试时从子系统获取跟踪信息。该子系统使用跟踪事件报告硬件错误事件。
我用来获取事件的工具RAS守护进程工具。我知道该工具订阅tracing_pipe_raw
每个 cpu 上的 FIFO。此外,基准测试订阅性能事件,我相信,也通过相同的管道进行广告。
tracing_pipe_raw
类似的作品有trace_pipe
以下描述:
输出与“trace”文件相同,但该文件旨在通过实时跟踪进行流式传输。从此文件中读取数据将被阻塞,直到检索到新数据为止。与“trace”文件不同,该文件是一个消费者。这意味着从此文件读取会导致顺序读取以显示更多当前数据。一旦从此文件中读取数据,数据就会被消耗,并且不会通过顺序读取再次读取。 “跟踪”文件是静态的,如果跟踪器没有添加更多数据,则每次读取时都会显示相同的信息。与“跟踪”文件不同,打开此文件进行读取不会暂时禁用跟踪。
我了解 FIFO 作为消费者文件的概念及其原因每次读取都会产生不同的数据。但是,内核是否为这些事件的多个订阅者(读者)做出任何安排?
答案1
我发现同时读取器访问跟踪管道会互相干扰。
如果您想避免这种行为,您应该在instances
跟踪管道的目录中创建一个文件夹。如果你这样做,Linux 内核将会自动创建跟踪管道的副本在你的新目录中。
可以配置新实例几乎完全独立于主跟踪管道和其他实例。有关此内容的更多信息可以在这里找到:追踪管道技术的实例
对于那些想知道的人拉斯守护进程,它确实创建了自己的实例,因此您可以安全地在管道中使用其他读取器。不过,如果您认为可能有其他跟踪消费者,我建议您为读者创建其他实例。