linux 内存
u010154760
这个作者很懒,什么都没留下…
展开
-
slab、slob和slub
一:原文链接:http://www.linuxdiyf.com/bbs/viewthread.php?tid=92084 很久很久以前:一个叫做Mark Hemment的哥儿们写了Slab。在接下来的一些年里,其他人对Slab进行了完善。一年半以前,SLOB问世了。SLOB的目标是针对嵌入式系统的,主要是适用于那些内存非常有限的系统,比如32MB以下的内存,它不太注重large s转载 2015-03-01 11:17:38 · 5852 阅读 · 0 评论 -
bin与elf
文件的内容:1. BIN文件是 raw binary 文件,这种文件只包含机器码。2. ELF文件除了机器码外,还包含其它额外的信息,如段的加载地址,运行地址,重定位表,符号表等。所以ELF文件的体积比对应的BIN文件要大。文件的执行:1. 执行raw binary很简单,只需要将程序加载到其起始地址,就可以执行; FILE *fp = fopen("vmli转载 2015-04-07 20:50:53 · 570 阅读 · 0 评论 -
Linux页面异常处理
Linux页面异常处理是一个复杂的过程.它用来处理内存访问各种异常,因为这部份内容涉及到了系统调用的相关部份,所以,我们暂且忽略这部份信息,只要知道,如果有内存访问异常情况,就会转入到do_page_fault()中处理,关于系统调用这部份,我们之后再给出详细的分析,详情请关注本站更新. 同以往一样,本文的代码是基于linux-2.6.21.页面异常处理程序的代码如下:/*转载 2015-04-08 12:42:12 · 639 阅读 · 0 评论 -
Linux缓存机制之页缓存
Linux运用一个功能广泛的缓冲和缓存框架来提高系统的速度。缓冲和缓存利用一部分系统物理内存,确保最重要、最常使用的块设备数据在操作时可直接从主内存获取,而无需从低速设备读取。物理内存还用于存储从快设备读取的数据,使得随后对该数据的访问可直接在物理内存进行,而无需从外部设备再次取用。考虑系统中多种因素然后延迟写回在总体上改进了系统的性能。前面分析的部分,例如内存管理的slab缓存是一个内存到内存的转载 2015-04-13 23:07:19 · 815 阅读 · 0 评论 -
linux 页面的回收
关于页面的使用在之前的一些文章中,我们了解到linux内核会在很多情况下分配页面。1、内核代码可能调用alloc_pages之类的函数,从管理物理页面的伙伴系统(管理区zone上的free_area空闲链表)上直接分配页面(见《linux内核内存管理浅析》)。比如:驱动程序可能用这种方式来分配缓存;创建进程时,内核也是通过这种方式分配连续的两个页面,作为进程的thread_info结构和内转载 2015-04-13 21:26:12 · 908 阅读 · 0 评论 -
Linux缓存机制之页缓存
Linux运用一个功能广泛的缓冲和缓存框架来提高系统的速度。缓冲和缓存利用一部分系统物理内存,确保最重要、最常使用的块设备数据在操作时可直接从主内存获取,而无需从低速设备读取。物理内存还用于存储从快设备读取的数据,使得随后对该数据的访问可直接在物理内存进行,而无需从外部设备再次取用。考虑系统中多种因素然后延迟写回在总体上改进了系统的性能。前面分析的部分,例如内存管理的slab缓存是一个内存到内存的转载 2015-04-14 11:06:56 · 627 阅读 · 0 评论 -
Linux内核剖析之回收页框
http://www.bubuko.com/infodetail-452207.html转载 2015-04-14 20:08:22 · 458 阅读 · 0 评论 -
linux内核页表
曾 几何时,我一直被迷惑着,我知道所有进程和所有内核线程共享内核页表,也就是在页全局目录的768项以上的目录项指向的页表,我一直以为在创建新的进程的 时候创建新进程的页全局目录的时候会连带的把内核的基础全局目录复制过去,实际上这是合理的,当我看到网上很多文章都这么说时,我似乎感到一种欣慰:我太有才了!但是当我读到2.6.17的源代码时, 梦被打碎了,在pgd_alloc里面没有上述的动作,代码如下转载 2015-04-08 12:45:36 · 1084 阅读 · 0 评论 -
Kernel development
Brief itemsKernel release statusThe current development kernel is 2.6.34-rc4, released on April 12, about a week later than would have been expected. The delay was the result of a nasty VM reg转载 2015-04-14 19:32:41 · 924 阅读 · 0 评论 -
elf解析
ELF(Executable and Linking Format)是一种对象文件的格式,用于定义不同类型的对象文件(Object files)中都放了什么东西、以及都以什么样的格式去放这些东西。它自最早在 System V 系统上出现后,被 xNIX 世界所广泛接受,作为缺省的二进制文件格式来使用。可以说,ELF是构成众多xNIX系统的基础之一,所以作为嵌入式Linux系统乃至内核驱动程序开发人转载 2015-04-07 20:52:10 · 661 阅读 · 0 评论 -
BIN与ELF
ELF格式的可执行文件中包含很多BIN以外的信息,用readelf工具可以读出来。比如 想把同一个源码编译出来的BIN和ELF都下载到0x8a000000地址1.对于BIN来讲,是纯粹的数据,如果没有偏移量的话,ICE2默认是下载到0x00000000地址的,所以要有0x8a000000的偏移。2.对于ELF来讲,其中包含着程序的入口点地址,ICE2会去读这个地址(假设是转载 2015-04-07 20:48:21 · 407 阅读 · 0 评论 -
slab着色--一种必然认输的妥协
在最新的linux2.6.28内核当中已经不见slab着色的踪迹了,记得研究2.6.9的时候,我还为理解slab着色大伤脑筋,而实际上我当时根本没有理解它的设计初衷以及最终的效果,只是把它当成了一个纯粹的“算法”来玩,还玩得不亦乐乎... slab的目的是什么?其实它是为了在软件缓存和硬件缓存冲突的时候达成的一种妥协,而普遍的观点是只有相互平等的当事者才具有妥协的可能,如果关系根本转载 2015-03-02 14:45:44 · 766 阅读 · 0 评论 -
page结构体
page->_mapcount表示的是被映射的次数-1;多一个页表项引用这个页这个值就会被+1;一个最明显的地方就是fork中最后copy_process->copy_mm函数会最后会导致这个值+1;原创 2015-03-03 16:18:03 · 823 阅读 · 0 评论 -
What is /proc/slabinfo?
/proc/slabinfo gives information about memory usage on the slab level. Linux kernels uses slab pools to manage memory above the page level. Commonly used objects have their own slab pools. Instead o转载 2015-03-19 15:42:15 · 1243 阅读 · 0 评论 -
Linux 3.x 内核学习笔记——页面的周转
页面周转本文以Linux-3.11.0为例。内核中所有物理内存都有其对应的page结构,这些page在整个系统的运行中,会处于下图的5个状态中。Freeze Page:并非所有内存都可以用于分配,有些内存被内核所保留使用,例如:内核映像本身所处的内存空间、一些硬件要求需要保留的地址区间、内核中一些固有的数据结构(如page结构本身)等。系统在初始化阶段将这些内存所对转载 2015-03-04 10:56:54 · 1024 阅读 · 0 评论 -
Linux内存管理之页面回收
Linux中使用 (radix,size,heap) 来表示优先级搜索树中的节点。其中,radix 表示内存区域的起始位置,heap 表示内存区域的结束位置,size 与内存区域的大小成正比。在优先级搜索树中,父节点的 heap 值一定不会小于子节点的 heap 值。在树中进行查找时,根据节点的 radix 值进行。程序可以根据 size 值区分那些具有相同 radix 值的节点。转载 2015-03-03 17:00:47 · 627 阅读 · 0 评论 -
Mem Cgroup目录无法清理问题分析
Cgroup(Control Group)是内核提供的资源隔离的技术,用于对Linux 系统中用户态进程使用的资源进行隔离,核心思想是:把进程分组,然后为进程组分配资源(包括内存、CPU、IO等)。其中Mem Cgroup用来隔离进程组使用的内存资源。 在Hadoop集群中,我们使用了Mem Cgroup对MapReduce任务使用的内存资源进行隔离控制,以保证单个任务不能占转载 2015-03-04 13:58:41 · 1554 阅读 · 0 评论 -
linux内核内存管理中的pagevec结构体
linux内核的内存管理中有一个2.6内核才加入的并不很张扬的结构体,那就是pagevec:struct pagevec { unsigned long nr; unsigned long cold; struct page *pages[14];};以往要加入到lru链表的page都要加入到这个pagevec了,并不再直接往lru中加入了。可是不加入lr转载 2015-03-12 14:10:21 · 705 阅读 · 0 评论 -
mmap说明
如果同时指定了MAP_FIXED标志并且将起始地址start设置为0,则mmap调用的结果会是什么? 答:在sys_mmap系统调用中并没有看到对这种情况的排斥,可以暂时先理解成不同的架构对应不同的情况,这种情况是否允许在各个架构上的实现是不同的,而sys_mmap作为一个和平台无关的系统调用这里并不会对这种情况进行排斥;而在实际的具体的平台的操作时,比如x86下,当你的addr没有原创 2015-03-24 12:44:59 · 665 阅读 · 0 评论 -
频繁分配释放内存导致的性能问题的分析
现象1 压力测试过程中,发现被测对象性能不够理想,具体表现为: 进程的系统态CPU消耗20,用户态CPU消耗10,系统idle大约70 2 用ps -o majflt,minflt -C program命令查看,发现majflt每秒增量为0,而minflt每秒增量大于10000。初步分析majflt代表major fault,中文名叫大错误,minflt代表minor fa转载 2015-05-14 22:31:03 · 543 阅读 · 0 评论