foo*_*oty 4 c buffer process linux-kernel
我试图从内核记录一个巨大的数据输出.本质上,我试图记录内核中进程上下文切换的所有方式.即使是1分钟的分析,记录的数据也将是巨大的,我该怎么做.我必须打开一个巨大的缓冲区,记录其中的数据,然后将其发送到用户空间进行进一步分析.
编辑:澄清下面的"大"有多大是我试图解决其大约10000行输出的确切问题
我的建议是使用linux内核用于捕获数据包的相同想法,特别是数据包环缓冲区(搜索:PACKET_RX_RING).
这个想法很简单,在你的用户空间程序中,分配环.然后将此环传递给"驱动程序"(您的内核模块),然后您的驱动程序可以简单地将数据点写入环,并且您的用户空间程序可以读取这些.因为它是一个响铃,你可以继续写作,客户端可以继续阅读 - 如果客户端落后,你的驱动程序有可能过度接受(一旦它在环上),但我相信你可以适当地调整环的大小.
环中的每个插槽都应包含用户空间程序可以读取的"序列化"数据.这种类型的环应该很容易实现无锁,很可能你希望你的客户端旋转以查看是否有数据.