Linux内存管理 (17)KSM】的更多相关文章

专题:Linux内存管理专题 关键词:KSM.匿名页面.COW.madvise .MERGEABLE.UNMERGEABLE. KSM是Kernel Samepage Merging的意思,用于合并内容相同的页面. 在虚拟化环境中,同一台主机上存在许多相同OS和应用程序,很多页面内容可能是完全相同的,因此可以被合并,从而释放内存供其它应用程序使用. KSM允许合并同一个进程或不同进程之间内容相同的匿名页面,这对应用程序是不可见的. 把这些相同的页面很成一个只读页面,从而释放物理页面,当应用程序需…
Linux的内存管理涉及到的内容非常庞杂,而且与内核的方方面面耦合在一起,想要理解透彻非常困难. 在开始学习之前进行了一些准备工作<如何展开Linux Memory Management学习?>, 1. 参考资料 遂决定以如下资料作为参考,进行Linux内存管理的研究: <奔跑吧 Linux内核>:以第2章为蓝本展开,这是目前能获取的紧跟当前内核发展(Linux 4.0),并且讲的比较全面的一本资料. <Understanding the Linux Virtual Memo…
内核的 shmall 和 shmmax 参数 SHMMAX= 配置了最大的内存segment的大小 ------>这个设置的比SGA_MAX_SIZE大比较好. SHMMIN= 最小的内存segment的大小 SHMMNI= 整个系统的内存segment的总个数 SHMSEG= 每个进程可以使用的内存segment的最大个数 配置信号灯( semphore )的参数: SEMMSL= 每个semphore set里面的semphore数量 -----> 这个设置大于你的process的个数吧,…
专题:Linux内存管理专题 关键词:slab/slub/slob.slab描述符.kmalloc.本地/共享对象缓冲池.slabs_partial/slabs_full/slabs_free.avail/limit/batchcount. 从Linux内存管理框架图可以知道:slab/slub/slob都是基于伙伴系统. 伙伴系统是以page为单位进行操作的.但是很多场景并不需要如此大的内存分配,slab就是用在这种场景的. 本章节主要内容:从slab相关数据结构讲起,对slab有一个静态的认…
1. General 1.1 /proc/meminfo /proc/meminfo是了解Linux系统内存使用状况主要接口,也是free等命令的数据来源. 下面是cat /proc/meminfo的一个实例. MemTotal: 8054880 kB---------------------对应totalram_pages大小 MemFree: kB---------------------对应vm_stat[NR_FREE_PAGES]大小 MemAvailable: kB---------…
专题:Linux内存管理专题 关键词:malloc.brk.VMA.VM_LOCK.normal page.special page. 每章问答: malloc()函数是C函数库封装的一个核心函数,对应的系统调用是brk(). 1. brk实现 要了解brk的实现首先需要知道进程用户空间的划分,以及struct mm_struct结构体中代码段.数据段.堆相关参数. 然后brk也是基于VMA,找到合适的虚拟地址空间,创建新的VMA并插入VMA红黑树和链表中. 首先看看mm_struct中代码段.…
专题:Linux内存管理专题 关键词:数据异常.缺页中断.匿名页面.文件映射页面.写时复制页面.swap页面. malloc()和mmap()等内存分配函数,在分配时只是建立了进程虚拟地址空间,并没有分配虚拟内存对应的物理内存. 当进程访问这些没有建立映射关系的虚拟内存时,处理器自动触发一个缺页异常. 缺页异常是Linux内存管理中最复杂和重要的一部分,需要考虑很多相关细节,包括匿名页面.KSM页面.page cache页面.写时复制.私有映射和共享映射等. 首先ARMv7-A缺页异常介绍了从数…
专题:Linux内存管理专题 关键词:struct page._count._mapcount.PG_locked/PG_referenced/PG_active/PG_dirty等. Linux的内存管理是以页展开的,struct page非常重要,同时其维护成本也非常高. 这里主要介绍struct page中_count/_mapcount和flags参数. flags是页面标志位集合,是内存管理非常重要的部分. _count表示内核中引用该页面的次数:_mapcount表示页面被进程映射的…
专题:Linux内存管理专题 关键词:RMAP.VMA.AV.AVC. 所谓反向映射是相对于从虚拟地址到物理地址的映射,反向映射是从物理页面到虚拟地址空间VMA的反向映射. RMAP能否实现的基础是通过struct anon_vma.struct anon_vma_chain和sturct vm_area_struct建立了联系,通过物理页面反向查找到VMA. 用户在使用虚拟内存过程中,PTE页表项中保留着虚拟内存页面映射到物理内存页面的记录. 一个物理页面可以同时被多个进程的虚拟地址内存映射,…
专题:Linux内存管理专题 关键词:匿名页面.换入.换出. 如果要将匿名页面的生命周期进行划分,大概就是诞生.使用.换出.换入和销毁. 内核中使用匿名页面的地方有很多,产生缺页中断之后匿名页面就诞生了: 用户进程访问虚拟地址即可访问到匿名页面内容: 在内存紧张的时候,需要回收一些页面来释放内存,匿名页面可能被换出: 如果虚拟地址空间被再次访问,则需要将swap分区中内容换入: 当进程关闭或者退出时,VMA上的映射需要被清除,相关匿名页面会被销毁. 1. 匿名页面的诞生 从内核的角度看,出现匿名…