首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

本文目的 本文补充校正一些Linux内核开发者关于GFP_ATOMIC的认知不完整的地方,阐述GFP_ATOMIC与free内存watermark的关系,并明确什么时候应该用GFP_ATOMIC申请内存...GFP_KERNEL 我们都知道,在中断、软中断、spinlock等原子上下文里面,申请内存,应该使用GFP_ATOMIC标记,譬如内核中有大量的kmalloc/GFP_ATOMIC的例子: 本文补充校正一些Linux...MIN水位以下的内存,只能被紧急情况下的用户申请到,最著名的紧急用户莫过于PF_MEMALLOC用户,task_struct设置了这个标记表示忽略MIN水位。...free内存为0的权力,则会导致PF_MEMALLOC没有内存了。...min水位以下申请内存),哪怕是进程上下文,我们也建议可以考虑使用GFP_ATOMIC 比如田涛童鞋最近在mm/zswap.c发的RFC patch: https://lore.kernel.org/linux-mm

67430

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

本文目的 本文补充校正一些Linux内核开发者关于GFP_ATOMIC的认知不完整的地方,阐述GFP_ATOMIC与free内存watermark的关系,并明确什么时候应该用GFP_ATOMIC申请内存...内存水位,PF_MEMALLOC和GFP_ATOMIC 3. 何时使用GFP_ATOMIC(一个patch分析) GFP_ATOMIC vs....在Linux中,内存有3个水位: HIGH: 系统的free内存大于HIGH水位的时候,是一个相对保险的值,不需要急着做内存回收(reclaim); LOW: 系统的free内存达到LOW水位的时候,...内存为0的权力,则会导致PF_MEMALLOC没有内存了。...min水位以下申请内存),哪怕是进程上下文,我们也建议可以考虑使用GFP_ATOMIC 比如田涛童鞋最近在mm/zswap.c发的RFC patch: https://lore.kernel.org/linux-mm

4.4K31
您找到你想要的搜索结果了吗?
是的
没有找到

Linux 内核 内存管理】物理分配页 ⑦ ( __alloc_pages_slowpath 慢速路径调用函数源码分析 | 判断页阶数 | 读取 mems_allowed | 分配标志位转换 )

alloc_pages_slowpath 慢速路径调用函数 二、判断页阶数 三、读取进程 mems_allowed 成员 四、分配标志位转换 五、__alloc_pages_slowpath 慢速路径调用完整函数源码 在 【Linux...内核源码的 linux-4.12\mm\page_alloc.c#3676 位置 ; 源码路径 : linux-4.12\mm\page_alloc.c#3676 二、判断页阶数 ---- 先判断...; stall_timeout += 10 * HZ; } /* Avoid recursion of direct reclaim */ if (current->flags & PF_MEMALLOC...can_direct_reclaim)) goto fail; /* * PF_MEMALLOC request from this context is rather bizarre...only can loop waiting * for somebody to do a work for us */ WARN_ON_ONCE(current->flags & PF_MEMALLOC

1.1K20

Linux 内核 内存管理】物理分配页 ① ( 分区伙伴分配器物理分配页核心函数 __alloc_pages_nodemask | __alloc_pages_nodemask 函数完整源码 )

alloc_pages_nodemask 二、__alloc_pages_nodemask 函数完整源码 一、分区伙伴分配器物理分配页核心函数 __alloc_pages_nodemask ---- Linux...物理页分配函数 , 所有的 函数 都会调用 __alloc_pages_nodemask 函数 , 该函数是 物理页分配 的 核心函数 ; __alloc_pages_nodemask 函数 定义在 Linux...内核源码的 linux-4.12\mm\page_alloc.c#4003 位置 , 函数原型如下 : /* * This is the 'heart' of the zoned buddy allocator...be inherited for all allocation requests * from a particular context which has been marked by * memalloc_no...gfp_mask); trace_mm_page_alloc(page, order, alloc_mask, ac.migratetype); return page; } 源码路径 : linux

35010

RocketMQ关于Broker闪断故障排查【实战笔记】

四、Linux系统日志分析 通过查看问题时间段日志,发现页分配失败“page allocation failure. order:0, mode:0x20”,也就Page不够了。...五、解决方案 1.调整内核参数 系统版本:CentOS 6.10 内核版本:Linux version 2.6.32-754.17.1.el6.x86_64 在sysctl.conf修改参数vm.zone_reclaim_mode...billtian.github.io/digoal.blog/2017/10/24/03.html 2.参数含义说明 min_free_kbytes This is used to force the Linux...Some minimal amount of memory is needed to satisfy PF_MEMALLOC allocations; if you set this to lower...kswapd回收的过程中也会有少量的内存分配行为(会设上PF_MEMALLOC)标志,这个标志会允许kswapd使用预留内存;另外一种情况是被OOM选中杀死的进程在退出过程中,如果需要申请内存也可以使用预留部分

3.1K20

Linux内核参数min_free_kbytes与lowmem_reserve_ratio

1. min_free_kbytes 先看官方解释: This is used to force the Linux VM to keep a minimum number of kilobytes free...Some minimal amount of memory is needed to satisfy PF_MEMALLOC allocations; if you set this to lower...kswapd回收的过程中也会有少量的内存分配行为(会设上PF_MEMALLOC)标志,这个标志会允许kswapd使用预留内存;另外一种情况是被OOM选中杀死的进程在退出过程中,如果需要申请内存也可以使用预留部分...So the Linux page allocator has a mechanism which prevents allocations which _could_ use highmem from...in_interrupt() && ((p->flags & PF_MEMALLOC) || unlikely(test_thread_flag(TIF_MEMDIE)))),即要求不能在中断上下文,且是正在进行回收

2.3K20

深入理解 Linux 物理内存分配全链路实现

前文回顾 在上篇文章 《深入理解 Linux 物理内存管理》中,笔者详细的为大家介绍了 Linux 内核如何对物理内存进行管理以及相关的一些内核数据结构。...___GFP_MEMALLOC 允许内核在分配内存时可以从所有内存区域中获取内存,包括从紧急预留内存中获取。...___GFP_NOMEMALLOC 标识的优先级要高于 ___GFP_MEMALLOC 好了到现在为止,我们已经知道了 gfp_t 掩码中包含的内存区域修饰符以及内存分配行为修饰符,是不是感觉头有点大了...// ___GFP_NOMEMALLOC 标识的优先级要高于 ___GFP_MEMALLOC if (!...image.png 并以此为起点,结合 Linux 内核 5.19 版本源码详细讨论了物理内存分配在内核中的整个链路实现。

63710

Linux 内核 内存管理】物理分配页 ⑨ ( __alloc_pages_slowpath 慢速路径调用函数源码分析 | retry 标号代码分析 )

文章目录 一、retry 标号代码分析 二、retry 标号完整代码 在 【Linux 内核 内存管理】物理分配页 ② ( __alloc_pages_nodemask 函数参数分析 | __alloc_pages_nodemask...低水线分配 ; 如果上述 " 快速路径 " 分配失败 , 则执行 " 慢速路径 " 分配 ; 上述涉及到了 " 快速路径 " 和 " 慢速路径 " 2 种物理页分配方式 ; 继续接着上一篇博客 【Linux...page = get_page_from_freelist(gfp_mask, order, alloc_flags, ac); if (page) goto got_pg; 源码路径 : linux...can_direct_reclaim) goto nopage; 源码路径 : linux-4.12\mm\page_alloc.c#3817 调用 __alloc_pages_direct_reclaim...; stall_timeout += 10 * HZ; } /* Avoid recursion of direct reclaim */ if (current->flags & PF_MEMALLOC

72510
领券