【问题标题】:Making available medium-sized (>4K) binary information from Linux kernel to userland将中等大小(>4K)的二进制信息从 Linux 内核提供给用户空间
【发布时间】:2021-07-12 16:57:05
【问题描述】:

根据this answer Linux sysfs 条目仅限于一个页面,在大多数架构上为 4 KiB。

我目前正在开发一个 net/sched/ 模块(fq_codel 的一个分支,其行为略有改变以测试某些东西)并且需要向用户空间公开较大的统计信息。其中一个 KPI 约为 800 字节,另一个预计为 10–50 KiB 左右(粗略,尚未确定)。后者显然不适合sysfs

信息是在操作期间生成的,但存储在一个预先分配的数组中,用户空间预计每秒两次左右获取它(并因此清空数组)。提高该间隔可能是可能的,但会增加相当多的系统负载。

还有哪些其他方式可以将此类信息暴露给用户空间,适合我的场景?

【问题讨论】:

  • 您可以在 debugfs、procfs... 中创建一个文件,以任何接受 file_operations 作为参数的方式。
  • @Tsyvarev 并自己实现整个缓冲?嗯,也是一种选择……看来我不会写比我最初想象的更多的代码了。
  • sysfs 提供了一个 bin 属性接口,没有这个限制。 elixir.bootlin.com/linux/latest/source/include/linux/…
  • @0andriy 很有趣……它完全没有记录,也没有说明ⓐ如何使用它或ⓑ它没有这个限制。
  • 你这是什么意思?首先,源代码是开放的,大家可以阅读。接下来,使用 linux bin_attrs 进行简单的谷歌搜索在第一页上给了我足够多的相关链接。例如,LWN 在 2003 年有一篇关于它的文章。

标签: linux-kernel linux-device-driver binary-data sysfs


【解决方案1】:

中继接口(@98​​7654321@)如何将大量数据从内核记录到用户空间

【讨论】:

  • 就是这样!我设法用*isglobal = 1; 让它工作(kernel moduleexample client,早期调试阶段)但是文档示例不完整(tl;博士:你必须read 之前执行poll,否则您将读取部分记录甚至EOF⚠)。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-21
  • 1970-01-01
  • 2014-06-02
  • 1970-01-01
  • 2012-12-26
  • 1970-01-01
  • 2016-08-14
相关资源
最近更新 更多