文章预览
作者:cynrikluo 内存不是无限的,总有不够用的时候,linux内核用三个机制来处理这种情况:内存回收、内存规整、oom-kill。 当发现内存不足时,内核会先尝试内存回收,从一些进程手里拿回一些页;如果这样还是不能满足申请需求,则触发内存规整;再不行,则触发oom主动kill掉一个不太重要的进程,释放内存。 低内存情况下,内核的处理逻辑 内存申请的核心函数是 __alloc_pages_nodemask : /* * This is the 'heart' of the zoned buddy allocator. */ struct page * __ alloc_pages_nodemask ( gfp_t gfp_mask , unsigned int order , int preferred_nid , nodemask_t * nodemask ) { struct page * page ; unsigned int alloc_flags = ALLOC_WMARK_LOW; gfp_t alloc_mask; /* The gfp_t that was actually used for allocation */ struct alloc_context ac = { }; __alloc_pages
………………………………