概述内核模块的内存使用情况
在尝试估计内核模块(通常是设备驱动程序)消耗的内存量时,我尝试使用尺寸为.ko(.bss,.data,.text等)的静态内存区域大小的实用程序。 所以我期望这些值的总和恰好等于在插入模块之后立即由lsmod命令给出的输出。
在init()函数中不执行dynamic内存分配(kmalloc或vmalloc),以确保它不会导致差异。那么为什么会有不匹配?
奇怪的是,大多数时候,这个不匹配被认为是一个固定的数量!
命令输出如下所示
我怎样才能得到我的程序的内存消耗高峰?
Errno :: ENOMEM当使用交换进程shell时
在windows中,我怎样才能用`new`replace`GlobalAlloc`?
“堆”在哪里?
在linux中如何在同一进程中为线程分配堆栈或内存
大小chardev.ko
text data bss dec hex filename 172 448 1024016 1024636 fa27c chardev.ko
lsmod的
Module Size Used by Tainted: P chardev 1025040 0 – live 0xc009d000
检索堆内存大小及其使用统计等…?
如何删除vector中的元素。 (擦除将不起作用)
有没有什么办法编译和运行程序作为big endian在小端PC?
ELF文件的.bss部分应该放在哪里?
如何使用写时复制最大限度地减lessc + +程序的内存消耗?
你提到在init函数中没有进行分配,但是是否考虑到诸如register_chrdev(9)的调用,这些调用为设备实例内部分配内存? 这是一个恒定的差异的评论,让我怀疑这是否可能是原因。
可能是模块使用的功能被计入模块大小? 尝试
cat /proc/kallsyms | grep module_name
这两个大小之间的差异是404.文本+数据+ 404 = 1024.可能这是一种粒度问题? 我不知道如何在内核中计算大小…
但是,内核代码和数据是使用动态内存分配的。 kmalloc使用预先分配的内存块,所以当分配代码和数据段时,很可能会有一些四舍五入的结果。
尝试增加数据部分的大小,看看lsmod报告的大小是否改变
没有更多的信息,我很想去猜测它的调试开销。 我说诱惑,因为我没有你的内核配置。
总结
以上是内存溢出为你收集整理的内核模块的内存使用情况全部内容,希望文章能够帮你解决内核模块的内存使用情况所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
请登录后查看评论内容