linux 内存 - KO内存占用

说明

  • KO(kernel module)占用的内存分为两部分:
  1. 静态占用 :ko insmod时系统固定分配的内存。
  2. 动态申请 :代码中动态申请的内存,由于申请方式不同,统计的方式也可能不同,例如:使用vmalloc和kmalloc申请内存,统计方式就不同;代码是否执行以及执行次数不同,统计结果也不同。

静态占用

  • KO静态占用内存是通过vmalloc分配的, 主要分为两部分
  1. core_layout
  2. init_layout
  • 可通过linux内核代码确认。
// 文件:linux_5.10/kernel/module.c
static struct module *layout_and_allocate(struct load_info *info, int flags)
{...ndx = find_sec(info, ".data..ro_after_init");if (ndx)info->sechdrs[ndx].sh_flags |= SHF_RO_AFTER_INIT;...ndx = find_sec(info, "__jump_table");if (ndx)info->sechdrs[ndx].sh_flags |= SHF_RO_AFTER_INIT;/* Determine total sizes, and put offsets in sh_entsize.  For nowthis is done generically; there doesn't appear to be anyspecial cases for the architectures. */layout_sections(info->mod, info);layout_symtab(info->mod, info);/* Allocate and move to the final place */err = move_module(info->mod, info);if (err)return ERR_PTR(err);/* Module has been copied to its final place now: return it. */mod = (void *)info->sechdrs[info->index.mod].sh_addr;kmemleak_load_module(mod, info);return mod;
}static int move_module(struct module *mod, struct load_info *info)
{
.../* Do the allocs. */ptr = module_alloc(mod->core_layout.size);
...if (mod->init_layout.size) {ptr = module_alloc(mod->init_layout.size);...}
...
}void * __weak module_alloc(unsigned long size)
{       // 使用vmalloc申请内存return __vmalloc_node_range(size, 1, VMALLOC_START, VMALLOC_END,GFP_KERNEL, PAGE_KERNEL_EXEC, VM_FLUSH_RESET_PERMS,NUMA_NO_NODE, __builtin_return_address(0));
}

占用统计

  1. lsmod 或 /proc/modules
  • lsmod打印的KO列表中有个size属性,表示KO内存占用。
  • lsmod 的数据来自/proc/modules。
~# lsmod 
Module                  Size  Used by    Tainted: GF 
xxxx_ive            234750  0 
xxx_ipcm               84490  0 
xxxx_tpu             26507  0 
xxxx_clock_cooling     4685  0 
xxxx_sys             21052  1 xxxx_ive
~# cat /proc/modules 
xxxx_ive 234750 0 - Live 0xffffffdf808a5000 (FO)
xxx_ipcm 84490 0 - Live 0xffffffdf80881000 (FO)
xxxx_tpu 26507 0 - Live 0xffffffdf80873000 (FO)
xxxxx_clock_cooling 4685 0 - Live 0xffffffdf8086e000 (FO)
xxxxx_sys 21052 1 xxxx_ive, Live 0xffffffdf80863000 (FO)
  • /proc/modules显示的size包括KO的init_size和core_size,少于实际静态占用,可通过以下节点查看分别大小。
~# cat /sys/module/xxxx_sys/initsize
~# cat /sys/module/xxxx_sys/coresize
  1. cat /proc/meminfo 查看vmallocUsed 项,cat /proc/vmallocinfo 中查看单个KO的内存占用。
~# cat /proc/meminfo
....
VmallocTotal:   67108863 kB
VmallocUsed:        2564 kB
VmallocChunk:          0 kB
....
~# cat /proc/vmallocinfo
....
0x(____ptrval____)-0x(____ptrval____)   28672 load_module+0x6fa/0x1c5a pages=6 vmalloc
0x(____ptrval____)-0x(____ptrval____)   12288 load_module+0x6fa/0x1c5a pages=2 vmalloc
0x(____ptrval____)-0x(____ptrval____)   32768 load_module+0x6fa/0x1c5a pages=7 vmalloc
0x(____ptrval____)-0x(____ptrval____)   90112 load_module+0x6fa/0x1c5a pages=21 vmalloc
0x(____ptrval____)-0x(____ptrval____)  241664 load_module+0x6fa/0x1c5a pages=58 vmalloc
....
  • 有些平台上VmallocUsed 显示为0 KB。

区别

* xxxx_ive
lsmod size:             234750
vmallocinfo size:       241664
  • 看/proc/vmallocinfo 中的数据和lsmod 数据差别在两点:
  1. 内存页(4096)对齐
  2. 多一内存页(栅栏页)

整体占用统计方法

  1. insmod/rmmod ko后cat /proc/meminfo 看available变化(但是不是很准确)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/29212.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DAY04_SpringMVC—SpringMVC简介PostMan和ApiFox工具使用SpringMVC请求与响应REST风格

目录 一 SpringMVC简介1 SpringMVC概述问题导入1.1 SpringMVC概述 2 入门案例问题导入2.0 回顾Servlet技术开发web程序流程2.1 使用SpringMVC技术开发web程序流程2.2 代码实现【第一步】创建web工程(Maven结构)【第二步】设置tomcat服务器,加…

C++的string类

1.string简介 string不是STL的一部分,但是和STL一起学习会更加容易融会贯通。 而实际上string是一个类模板,使用字符的顺序容器实现(也就是字符的顺序表),string整个系列支持char的动态增长(字符编码有几…

【iOS安全】开启任意app的WebView远程调试

参考:https://mp.weixin.qq.com/s/bNKxQaVrPaXsZ5BPbsXy7w (来自周智老师的公众号) 概述 Safari 有一个内置的前端调试器, 在iPhone通过局域网或者USB连接MacBook 并启用Safari 远程调试之后,前端调试器默认情况下对…

mysql之limit语句详解

一、介绍 LIMIT是MySQL内置函数,其作用是用于限制查询结果的条数。 二、使用 1. 语法格式 LIMIT [位置偏移量,] 行数 其中,中括号里面的参数是可选参数,位置偏移量是指MySQL查询分析器要从哪一行开始显示,索引值从0开始&#xff…

【剑指Offer 15】二进制中1的个数,Java解密。

LeetCode 剑指Offer 75道练习题 文章目录 剑指Offer:二进制中1的个数示例:限制:解题思路:剑指Offer:二进制中1的个数 【题目描述】 编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为 汉明重量))。 提示…

构建Docker容器监控系统 (1)(Cadvisor +InfluxDB+Grafana)

目录 Cadvisor InfluxDBGrafana 1. Cadvisor 2.InfluxDB 3.Grafana 开始部署: 下载组件镜像 创建自定义网络 创建influxdb容器 创建数据库和数据库用户 创建Cadvisor 容器 准备测试镜像 创建granafa容器 访问granfana 添加数据源 Add data source 新建 …

java.sql.SQLFeatureNotSupportedException 问题及可能的解决方法

目录 问题 分析: 解决方法 问题 java.sql.SQLFeatureNotSupportedException 分析: 可能是你的 druid的maven依赖版本太低了,我的以前是1.1.16,就出现了异常! 解决方法 把druid的maven依赖版本调高! 运…

unity海康威视原生SDK拉取网络摄像头画面,并展示在一个Material上

原理是使用sdk获取视频流,格式为YUV,然后分离YUV通道到三张不同的Texture2D上,通过shader将三个通道重新输出为原始图像。 我将所用的各个部分已经整理成一个压缩包,免积分下载 压缩包结构如下 使用步骤 1 DLL:放在Plugins文件…

湘大oj1138爱你一生一世题解:最大公约数 逆向思维 int整除会向下取整

一、链接 爱你一生一世 二、题目 题目描述 在2013年1月4日,这个“爱你一生一世”的特别日子,男生都想向自己的喜欢的女生表达爱意。 你准备在该死的C语言考试后,去向她(或者他?)告白。告白怎么能缺了礼…

渗透攻击方法:原型链污染

目录 一、什么是原型链 1、原型对象 2、prototype属性 3、原型链 1、显示原型 2、隐式原型 3、原型链 4、constructor属性 二、原型链污染重现 实例 Nodejs沙箱逃逸 1、什么是沙箱(sandbox) 2、vm模块 一、什么是原型链 1、原型对象 JavaS…

Springboot格式化给前端返回的时间格式

Springboot格式化给前端返回的时间格式 新增注解新增注解执行逻辑建立注解及注解执行逻辑的关联将时间转换注解注入Spring容器在返回对象的属性中加入注解结束 新增注解 Documented Target({FIELD,METHOD}) Retention(RUNTIME) public interface DateFormatTransform {String …

不只是Axure,这5 个也能轻松画原型图!

在设计和开发过程中,原型图是一个至关重要的工具。它是将设计理念转化为可视化、交互式的形式,使团队成员和利益相关者更好地理解和评估产品的功能和用户体验。选择适合的软件工具对于画原型图至关重要,本文将介绍 5 种常用的画原型图软件&am…

spring 面试题

一、Spring面试题 专题部分 1.1、什么是spring? Spring是一个轻量级Java开发框架,最早有Rod Johnson创建,目的是为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题。它是一个分层的JavaSE/JavaEE full-stack(一站式)轻量…

【LeetCode 75】第二十三题(2352)相等行列对

目录 题目: 示例: 分析: 代码运行结果: 题目: 示例: 分析: 题目很简洁,就是要我们寻找行与列相同的对数。相同行与列不仅是要元素相同,还需要顺序也一样&#xff08…

tomcat虚拟主机配置演示

一.新建用于显示的index.jsp文件,写入内容 二.修改tomcat/apache-tomcat-8.5.70/conf/server.xml配置文件 匹配到Host那部分,按上面格式在后面添加自己的域名和文件目录信息 主要是修改name和docBase 保存退出重启tomcat,确保tomcat运行…

IDEA 修改jar包版本后项目中出现多个版本

问题描述: 使用IDEA,在pom文件中修改了某个依赖jar包的版本后,重新编译发现旧的版本没有删除,项目中同一个jar可以看到有两个版本,导致编译时随机选择了其中一个版本,导致编译失败。 已知问题:…

接口安全防护方案

文章目录 1.认证与授权机制2.参数校验3.接口加密4.防止暴力破解5.安全头设置6.日志监控 1.认证与授权机制 使用令牌(Token)、OAuth等认证方式,确保只有合法用户可以访问接口。授权机制可以防止未经授权的用户访问敏感接口。 示例:…

如何使用Pycharm 快速搭建 Django 项目 (分享详细图文教程)

1. 准备工作 在开始创建Django项目之前,需要先确保已经安装了Python和Pycharm。并且python中已经安装好了Django依赖。 1安装python(这里我安装使用的是python3.11.4稳定版本) 官网下载太慢了这里直接贴网盘下载连接了,一起贴出py…

常见监控网络链路和网络设备的方法

网络监控主要包括网络链路监控和网络设备监控,通常系统运维人员会比较关注。 一、网络链路监控 网络链路监控主要包含三个部分,网络连通性、网络质量、网络流量。 连通性和质量的监控手段非常简单,就是在链路一侧部署探针,去探…

Leetcode-每日一题【剑指 Offer 14- II. 剪绳子 II】

题目 2、3、3的三段,此时得到的最大乘积是18。 答案需要取模 1e97(1000000007),如计算初始结果为:1000000008,请返回 1。 示例 1: 输入: 2输出: 1解释: 2 1 1, 1 1 1 示例 2: 输入: 10输出…