![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
内存管理
文章平均质量分 90
菜鸟别浪
联系方式:hzj_smile@126.com
展开
-
kmem_cache的创建和释放-slub分配器
目录kmem_cache_createkmem_cache_create_usercopy __kmem_cache_aliasfind_mergeablecreate_cache__kmem_cache_createkmem_cache_openkmem_cache_destroyshutdown_cache 内核版本:kernel-4.19kmem_cache是slub...原创 2022-05-13 23:42:13 · 3240 阅读 · 1 评论 -
对象释放函数kmem_cache_free核心函数slab_free的实现详解
1.kmem_cache_free函数void kmem_cache_free(struct kmem_cache *s, void *x)//X是要释放的对象{ s = cache_from_obj(s, x);//virt_to_head_page通过对象x找到该对象所在的slab的首个page,再通过page找到所属的slab缓存 if (!s) return; slab_...原创 2020-02-15 14:23:34 · 1236 阅读 · 0 评论 -
VSZ、RSS、Pss的区别和含义
ps aux命令的VSZ和RSS项:VSZ:指的是进程内存空间的大小,并不代表进程真正用到的内存,因为有些空间会仅在页表中挂个名,也就是说只是虚拟存在着,只有真正用到的时候内核才会把虚拟页面和真正的物理页面映射起来。比如,(malloc或mmap的调用),由于程序中并没有用到这些内存,没有物理内存被分配,也就不应算到进程的帐上。RSS:(resident set size)表示常驻内存的大小,但是...原创 2019-08-23 17:39:23 · 13116 阅读 · 0 评论 -
统计系统所有进程总共占用多少内存
常见误解: ps aux 命令显示的 RSS 列来统计全部进程总共占用的物理内存大小,这是不合理的。RSS(resident set size)表示常驻内存的大小,但是由于不同的进程之间会共享内存,所以把所有进程RSS进行累加的方法会重复计算共享内存,得到的结果是偏大的。正确的方法: 累加 /proc/[1-9]*/smaps 中的 Pss 。/proc/&l...原创 2019-08-23 17:38:08 · 1565 阅读 · 0 评论 -
kmem_cache_alloc核心函数slab_alloc_node的实现详解
kmem_cache_alloc()是申请slub对象的入口函数,他的核心实现就是slab_alloc_node函数,此函数涉及的面很广,包括cgroup,进程调度,内存管理,cpu抢占等细节,需要仔细推敲深究;代码版本:kernel-3.10(一)全函数概要 /* * Inlined fastpath so that allocation functions (kma...原创 2019-08-18 16:35:35 · 3815 阅读 · 0 评论 -
内存管理-slub对象的分配和释放(三)
内核版本:3.10.0-693.21.1.el7.x86_641.slub cache内存的分配:kmem_cache_alloc(详见kmem_cache_alloc核心函数slab_alloc_node的实现详解) 对象的分配与释放不是直接在kmem_cache_node上面操作的,而是在kmem_cache_cpu上。一个kmem_cache维护了一组kmem_cache_cpu,分...原创 2019-08-18 16:29:00 · 674 阅读 · 0 评论 -
内存管理-内存slub分配器(二)
一、为啥越来越多使用slub slab分配器的弊端,我们知道slab分配器中每个node结点(用slab结构体kmem_cache中的kmem_cache_node结构体表示node)有三个链表,分别是空闲slab链表(slabs_free),部分空slab链表(slabs_partial),已满slab链表(slabs_full),这三个链表中维护着对应的slab缓冲区。我们也知道...原创 2019-08-18 16:18:10 · 666 阅读 · 0 评论 -
跟踪slab分配堆栈流程的方法(perf、systemtap)
跟踪slab分配堆栈流程的方法(perf、systemtap)内存泄露是在解决内核故障会遇到的棘手情况,根据具体的内存使用情况,追踪相应slab cache的分配堆栈流程,是追踪泄露原因的第一步,接下来根据内核版本的不同,介绍二种跟踪slab分配的方法;1.在perf支持probe功能的情况下(内核版本高于3.10内核),可以使用perf probe追踪相应slab cache的分配堆栈流程;...原创 2019-07-05 10:46:08 · 1049 阅读 · 0 评论 -
内存管理-基础知识框架和关键结构体(一)
一、基本概念 1.逻辑地址:包含在机器语言指令中的用来指定一个操作数或者一条指令的地址。每一个逻辑地址由一个段和偏移量组成,偏移量指明了从段开始的地方到实际地址的距离。 2.线性地址(又叫虚拟地址):是一个32位无符号整数,可以用来表示高达4GB的地址,也即是说,高达4294967296个内存单元。线性地址通常用十六进制进行表示,范围为0x00000000到0xffffffff...原创 2019-07-13 18:09:16 · 483 阅读 · 0 评论 -
/proc/meminfo 文件
参考:http://linuxperf.com/?cat=7/proc/meminfo是了解Linux系统内存使用状况的主要接口,我们的命令行工具free、vmstat等都是通过此接口获得;但是他的信息远比free等命令丰富的多;接下来对此文件进行探究。内核负责输出/proc/meminfo的源代码是:fs/proc/meminfo.c :meminfo_proc_show();基本的内容...原创 2019-04-30 16:34:15 · 1666 阅读 · 1 评论 -
swap使用率达到100%的解决办法
一:方法1.增加物理内存的大小,减少swap使用的可能性;2.杀掉使用swap最多的进程,这种方法比较low,不太建议了;3.通过创建swapfile分区,来增加swap空间;4.主动swapout:swapoff -a 执行结束后,再执行swapon -a。二:具体操作1.增加物理内存就无话可说了;2.找到10个最大进程数量: #!/bin/bashps ax -o p...原创 2019-04-18 20:22:57 · 17162 阅读 · 1 评论 -
linux中的numa和swap
linux中的numa和swap一.linux的numa技术(非一致性内存访问)1.numa的基础认知 所有处理器都共享系统总线,因此当处理器的数目增大时,系统总线的竞争冲突加大,系统总线将成为瓶颈,所以目前SMP系统的CPU数目一般只有数十个,可扩展能力受到极大限制。NUMA技术有效结合了SMP系统易编程性和MPP(大规模并行)系统易扩展性的特点,较好解决了SMP系统的可扩展性...原创 2019-04-15 20:23:56 · 1852 阅读 · 0 评论