gpt4 book ai didi

linux - 内核模块中定义的 4096 全局缓冲区导致从存储设备获取时出现性能问题

转载 作者:太空宇宙 更新时间:2023-11-04 09:06:23 26 4
gpt4 key购买 nike

我们有一个写入文件的内核模块,我们读取 proc 文件以获取有关硬件操作的一些信息。硬件运行统计数据超过3072字节(PROC_BLOCK_SIZE);所以我们通过定义一个大小为 4096 字节的全局缓冲区来本地缓冲数据。一旦数据被完全读取,我们就将数据移动到 proc_read_kernel 缓冲区到本地缓冲区。这是按照 linux-2.6.28/proc/fs/generic.c 中第 165 行周围定义的 hack (2) 完成的。在读取整个缓冲区之前我们不会发送 eof,因此 read proc 将被调用两次,一次调用 3072 字节,下一次调用 1024 字节。我们执行 memcpy 将数据复制到读取过程缓冲区。读取过程将仅由命令行调用。

但是在添加全局缓冲区后插入这个特定模块会使从存储设备获取的性能数字有所不同。如果我们不对这个内核模块进行 modprobe,那么我们会看到更好的数字。从逻辑上讲,全局缓冲区将位于 BSS 区域,并且由于未调用该命令,因此也不会调用 memcpy。我们无法解释这种异常现象。任何指示都会非常有帮助。

最佳答案

我的 Crystal 球今天在清洁工那里,所以恐怕我不能完全预测你做了什么样的“黑客攻击”以及它是否会影响某些东西,更不用说真正的问题可能在哪里了。

也就是说,我建议您开始消除可能的问题根源。删除部分模块并加载它,看看是否仍然会出现性能下降。杀死你的黑客(通过字符设备或其他东西获取你的统计数据!),看看是否有帮助。哎呀,加载一个虚拟的“ Hello World !”模块,看看它是否有所作为。一旦你缩小了原因,再回来,也许有人会帮助你 - 没有代码可以继续,也不知道你做了什么改变,就不可能给你任何更具体的答案.

关于linux - 内核模块中定义的 4096 全局缓冲区导致从存储设备获取时出现性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10360816/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com