我有一个定制的Linux,它将打印到dmesg和syslog (使用printk),其中包含了系统中每个接收到的MP-TCP数据包的一些附加信息。但是,我正在生成大量的数据(使用iperf工具),大约2 Gbps的数据对应于非常多的数据包。由于printk,我的所有CPU都100%加载在我的系统中(我有4个CPU)。我担心这可能会影响我的系统中的数据包处理,并导致更多的问题和迟到。那么,我的问题是,在不增加CPU负载的情况下,是否有其他方法将我的数据存储在Liunx内核中?
为了给出数据大小的示例,在iperf会话的60秒内,`/var/log/syslog的大小约为1.2GBytes。
让我再补充一件事,我不需要在线处理Linux报告的数据。我将在脱机模式下处理它们。
发布于 2017-09-05 14:25:45
您可能应该研究ftrace,这是内置的Linux内核跟踪工具。例如,这个稍微过时的LWN文章说
Ftrace引入了一种名为trace_printk()的printk()新形式。它可以像printk()一样使用,也可以在任何上下文中使用(中断代码、NMI代码和调度程序代码)。跟踪_printk()的好处是它没有输出到控制台。相反,它会写入Ftrace环缓冲区,并且可以通过跟踪文件读取。用trace_printk()写入环形缓冲区只需要大约十分之一微秒左右。例如,您可以将类似的内容添加到内核或模块中:trace_printk(“从bar %p\n中读取foo %d”,bar->foo,bar);
内核文档ftrace.txt有详细信息。在目录/sys/kernel/debug/tracing/中,可以在伪文件buffer_size_kb中设置跟踪环缓冲区大小。
https://unix.stackexchange.com/questions/390481
复制相似问题