我必须每秒将几兆字节的数据从 Linux 内核模块传输到用户空间,如果我从中读取,我不想错过来自模块的任何消息。做这个的最好方式是什么?
对于这个问题,可能的解决方案很少:命名管道、Proc-File 和块设备但我不确定要选择哪一个,哪一个可以保证最佳性能,因为我是内核新手。
目前,我在内核模块中使用 Ring-Buffer(带有自旋锁)来存储消息,如果正在读取 Proc-File,我将数据从 Ring-Buffer 放入 Proc-File;在用户端,我有一个cat /proc/procfile
重复运行并显示输出的程序。这个解决方案的问题是,而不是得到
信息 1 信息 2 信息 3
在输出上,我看到(有时,每几千条消息一次)
信息 1 信息 3