白话 __vm_enough_memory,检查内存是否充足

来源:互联网 发布:直播摄像头美颜软件 编辑:程序博客网 时间:2024/05/19 09:09
__vm_enough_memory(nr_pages){     if(sysctl_overcommit_memory == OVERCOMMIT_ALWAYS) /* 1 */ 不检查 直接返回        return OK;     if (sysctl_overcommit_memory == OVERCOMMIT_GUESS) { /* 0 */   default ,考察如果把可回收内存都回收的话,是否正好满足本次分配。在此模式下,就算返回成功,后续也可能会触发oom,因为此模式对分配者的要求比较宽松。        free = page_cache+ swap + slab_reclaim;        if(free > nr_pages)           return OK;        n  = buddy_system; //伙伴系统空闲内存是否已经到水线        if(n < reserve)           return FAILED;        n -= reserve;     //回收完pagecache和slab ,此次分配再从伙伴系统中挖走一些内存来充数        free += n;        if(free > nr_pages)  //满足不?           return OK;  //此情况下返回成功的话,后续很可能触发oom,因为从伙伴系统挖了很多内存        else           return FAILED;     }        if (sysctl_overcommit_memory == OVERCOMMIT_NEVER{ /* 2 */   means never over commit       考察的是系统已分配的内存是否达到上限,最严格的内存分配限制,一般不会触发oom,      但用户进程很可能分配失败。        allow = totalram* ration + swap;        if(allow > vm_committed_space-nr_pages) //实际占用的物理页帧个数比上限多了          return FAILED;        else           return OK;     }   }


原创粉丝点击