首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

【Linux 内核 内存管理】物理分配页 ⑧ ( __alloc_pages_slowpath 慢速路径调用函数源码分析 | 获取首选内存区域 | 异步回收内存页 | 最低水线也分配 | 直接分配 )

调用 wake_all_kswapds 函数 , 异步 回收 物理内存页 , 这里的异步 是通过 唤醒 " 回收线程 " 进行回收内存页的 ; if (gfp_mask & __GFP_KSWAPD_RECLAIM...got_pg; 源码路径 : linux-4.12\mm\page_alloc.c#3743 四、直接分配内存 ---- 申请 物理页 内存 的阶数 , 满足以下 3 个条件 : can_direct_reclaim...to ignore * watermarks, as the ALLOC_NO_WATERMARKS attempt didn't yet happen. */ if (can_direct_reclaim...want to heavily disrupt the * system, so we fail the allocation instead of entering * direct reclaim.... */ if (compact_result == COMPACT_DEFERRED) goto nopage; /* * Looks like reclaim/

1.4K20

宋宝华:Linux内核中用GFP_ATOMIC申请内存究竟意味着什么?

对于不可睡眠的上下文,如果我们用常规的GFP_KERNEL这样的标记去申请内存,可能引发直接的内存reclaim,从而引起睡眠,所以GFP_KERNEL这种标记只适合进程上下文调用: ?...#define GFP_KERNEL \ (__GFP_RECLAIM | __GFP_IO | __GFP_FS) #define __GFP_RECLAIM \ ((__force...gfp_t)(___GFP_DIRECT_RECLAIM|___GFP_KSWAPD_RECLAIM) 内存水位,PF_MEMALLOC和GFP_ATOMIC 那么GFP_ATOMIC是否仅仅意味着不能睡眠呢...档案是否定的,GFP_ATOMIC还与内存reclaim的水位相关。下面这个图是讲述水位watermark的一个著名的图,笔者懒得画了,直接从网下copy过来: ?...在Linux中,内存有3个水位: HIGH: 系统的free内存大于HIGH水位的时候,是一个相对保险的值,不需要急着做内存回收(reclaim); LOW: 系统的free内存达到LOW水位的时候,

4K31

宋宝华:Linux内核中用GFP_ATOMIC申请内存究竟意味着什么?

,应该使用GFP_ATOMIC标记,譬如内核中有大量的kmalloc/GFP_ATOMIC的例子: 对于不可睡眠的上下文,如果我们用常规的GFP_KERNEL这样的标记去申请内存,可能引发直接的内存reclaim...,从而引起睡眠,所以GFP_KERNEL这种标记只适合进程上下文调用: #define GFP_KERNEL \ (__GFP_RECLAIM | __GFP_IO | __GFP_FS)...#define __GFP_RECLAIM \ ((__force gfp_t)(___GFP_DIRECT_RECLAIM|___GFP_KSWAPD_RECLAIM) 内存水位,PF_MEMALLOC...和GFP_ATOMIC HIGH: 系统的free内存大于HIGH水位的时候,是一个相对保险的值,不需要急着做内存回收(reclaim); LOW: 系统的free内存达到LOW水位的时候,启动后台...进行内存回收,回收的目标是让空闲内存达到HIGH水位; MIN:系统应该保有的最小free内存,当空闲内存达到这个值的时候,kswapd的后台回收可能来不及了,一般用户在申请内存的时候,进行DIRECT RECLAIM

58930
领券