如何在ftrace中设置trace_pipe的缓冲区大小?

时间:2017-03-26 16:54:57

标签: android linux linux-kernel android-ndk

基本上有两种主要的方法来读取ftrace日志。 从中读取        / SYS /内核/调试/跟踪/跟踪 或阅读        / SYS /内核/调试/跟踪/ trace_pipe

前者的缓冲区大小可以使用       / SYS /内核/调试/跟踪/ buffer_size_kb

是否可以为trace_pipe设置缓冲区大小。如果是,怎么样?

2 个答案:

答案 0 :(得分:0)

您不需要为trace_pipe设置缓冲区大小,因为它会提供实时跟踪,如果没有可用数据则会阻塞。

详细了解(https://www.kernel.org/doc/Documentation/trace/ftrace.txt):

trace_pipe:

The output is the same as the "trace" file but this
file is meant to be streamed with live tracing.
Reads from this file will block until new data is
retrieved.  Unlike the "trace" file, this file is a
consumer. This means reading from this file causes
sequential reads to display more current data. Once
data is read from this file, it is consumed, and
will not be read again with a sequential read. The
"trace" file is static, and if the tracer is not
adding more data, it will display the same
information every time it is read.

答案 1 :(得分:0)

只有一个缓冲区,/sys/kernel/debug/tracing/buffer_size_kb设置其大小。

当您从../trace读取时,内核会暂停跟踪,冻结缓冲区,然后读取该缓冲区的副本(包含从(t1 - Kt1的所有事件)。 / p>

当您从../trace_pipe读取数据时,会从缓冲区的尾端使用数据,而该数据已从内核中删除。内核继续跟踪并将数据添加到缓冲区的开头,如果读取器已经消耗完缓冲区中的所有内容,您的读取器将阻止等待该新数据。

如果没有使用者(即,在您开始阅读之前)并且缓冲区已满,则内核将从缓冲区的尾部掉落,或者停止在头插入新数据,具体取决于{{1 }}。因此,如果将/sys/kernel/debug/tracing/options/overwrite设置为overwrite,则将开始从1获取事件,否则将从更早的时间(首次启用跟踪)读取事件。 ,然后是最近的事件,始于t1 - K

来源:https://www.kernel.org/doc/Documentation/trace/ftrace.txt