Linux 内核参数详解
文章平均质量分 93
为了更好查看linux 内核节点参数的详细信息,从内存管理专栏独立
优惠券已抵扣
余额抵扣
还需支付
¥29.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
私房菜
独乐乐不如众乐乐!!!!
展开
-
Linux 内核参数:panic 相关
当出现panic时会重启系统,该节点表示在重启之前需要wait 的时长,单位为 秒。该值默认值根据 CONFIG_PANIC_TIMEOUT 决定,默认值为 4;emergency_restart() 用以dump kmsg 并重启系统;是每隔100ms 重启 NMI watchdog 的timeout;当使用软件 watchdog 时,推荐该值设为 60s。代码中通过变量 panic_timeout 运算;代码中通过变量 panic_print 运算;该节点默认值为 0;原创 2023-05-23 09:20:31 · 1110 阅读 · 0 评论 -
Linux 内核参数:oom_dump_tasks
当内核执行 OOM killer时,用以一次系统范围内进程dump(不包括内核线程),信息包括pid、uid、tdig、vm size、rss、pgtables bytes、swapents、oom_score_adj、name;如果设置为0,不会进行dump;如果设置为非0,每当OOM killer 确切杀掉一个占用内存的进程时,都会将dump 信息显示;默认值为 1,即使能dump;原创 2022-10-21 14:52:22 · 876 阅读 · 0 评论 -
Linux 内核参数:panic_on_oom
该节点是在进程进入 out_of_memory 时,确定是否进入oom panic;如果值为0,kernel 通过 oom killer 来kill 一些劣质进程,通常 oom killer 可以kill 劣质进程来释放内存;如果值设为1,通过代码可能更清晰理解,可以查看:内核OOM机制一文第 2.3节。设为1 时,kernel 在大部分进入out_of_memory 的情况都会 panic。当时如果一个进程只是使用节点的 mempolicy/cpuset,而且节点变成内存耗尽状态,会通过 oom原创 2022-10-20 17:13:45 · 859 阅读 · 0 评论 -
Linux 内核参数:oom_kill_allocating_task
该节点的值是进程出现在out_of_memory 情况下用以确定是否被kill 的开关;如果该节点被设为0,OOM killer 会扫描整个任务列表,采用试探法选择一个任务kill。通常会选择一个非法占用内存的任务,当此任务被kill 之后会释放大量的内存;如果该节点的值被设为非0,OOM killer 会简单地选择触发out_of_memory 的任务进行kill,这样可以避免在扫描上花代价;原创 2022-10-20 14:06:28 · 535 阅读 · 0 评论 -
Linux 内核参数:vmallocinfo
内存管理是一个相对复杂的内核模块,错综复杂的数据结构和管理逻辑。Linux 内核为了帮助开发者从宏观上把握内存的使用情况,在几大核心数据结构中都有相应的计数统计,如物理页面使用情况、伙伴系统分配情况、内存管理区的页面使用情况、内存回收扫描回收情况、内存规整触发情况等等。在《vmalloc 详解》一文中详细地剖析了vmalloc 的分配、释放流程,系统提供了 /proc/vmallocinfo 节点来查看在vmalloc 区域中分配的内存详细信息。原创 2023-12-20 16:22:45 · 1074 阅读 · 0 评论 -
Linux 内核参数:slabinfo
在之前系列博文中,深入的分析了slub 分配的的原理,系统为了能直观查看所有的slab cache 也在proc 文件系统中创建了一个节点 slabinfo,本文将详细剖析下该节点的原理。slab 分配器概述slub 分配器初始化slub 分配器之__kmem_cache_createslub 分配器之kmem_cache_allocslub 分配器之kmem_cache_createslub 分配器之kmem_cache_freeslub 分配器之kmem_cache_destroy。原创 2022-12-02 10:19:02 · 2086 阅读 · 0 评论 -
Linux 内核参数:vmstat
内存管理是一个相对复杂的内核模块,错综复杂的数据结构和管理逻辑。Linux 内核为了帮助开发者从宏观上把握内存的使用情况,在几大核心数据结构中都有相应的计数统计,如物理页面使用情况、伙伴系统分配情况、内存管理区的页面使用情况、内存回收扫描回收情况、内存规整触发情况等等。本文要分析的节点vmstat是内存管理数据统计的大集合,其中包括了空闲页面、不活跃页面、活跃页面、不可回收页面、cma管理页面、slab管理页面、工作集使用情况、脏页、共享页、回收操作情况、规整情况等等。原创 2022-09-28 11:31:51 · 1213 阅读 · 0 评论 -
Linux 内核参数:meminfo
内存管理是一个相对复杂的内核模块,错综复杂的数据结构和管理逻辑。Linux 内核为了帮助开发者从宏观上把握内存的使用情况,在几大核心数据结构中都有相应的计数统计,如物理页面使用情况、伙伴系统分配情况、内存管理区的页面使用情况、内存回收扫描回收情况、内存规整触发情况等等。本文要分析的节点meminfo是Linux 操作系统中查看系统内存最准确(meminfo 中有内存黑洞)的方法,它包含当前时刻系统的所有物理页面的信息。原创 2022-09-29 10:42:27 · 1539 阅读 · 0 评论 -
Linux 内核参数:zoneinfo
内存管理是一个相对复杂的内核模块,错综复杂的数据结构和管理逻辑。Linux 内核为了帮助开发者从宏观上把握内存的使用情况,在几大核心数据结构中都有相应的计数统计,如物理页面使用情况、伙伴系统分配情况、内存管理区的页面使用情况、内存回收扫描回收情况、内存规整触发情况等等。在 start_kernel() 中,会通过mm_init()原创 2022-09-26 17:31:06 · 2318 阅读 · 0 评论 -
Linux 内核参数:compaction 相关
针对节点 /proc/sys/vm/compact_memory最终手动规整也是通过 compact_zone() 进行最后的规整操作。原创 2022-09-20 21:27:57 · 543 阅读 · 0 评论 -
Linux 内核参数:percpu_pagelist_fraction
针对节点 /proc/sys/vm/percpu_pagelist_fraction原创 2022-08-17 14:18:21 · 437 阅读 · 0 评论 -
Linux 内核参数:dirty_background_bytes和dirty_background_ratio
源码基于:Linux 5.4针对节点:/proc/sys/vm/dirty_background_bytes/proc/sys/vm/dirty_background_ratio/proc/sys/vm/dirty_bytes/proc/sys/vm/dirty_ratio0. 官方描述dirty_background_bytes======================Contains the amount of dirty memory at which .原创 2022-01-15 17:03:15 · 1650 阅读 · 0 评论 -
Linux 内核参数:lowmem_reserve_ratio
kernel在分配内存时,可能会涉及到多个zone,分配会尝试从zonelist第一个zone分配,如果失败就会尝试下一个低级的zone(这里的低级仅仅指zone内存的位置,实际上低地址zone是更稀缺的资源)。考虑这样一种场景应用进程通过内存映射申请Highmem 并且加mlock分配,如果此时HIGH zone无法满足分配,则会尝试从Normal进行分配。问题来了,应用进程在从HIHG“降”到Normal区的分配请求有可能会耗尽Normal区的内存,而且由于mlock又无法回收,最终的...原创 2022-01-11 20:11:54 · 1260 阅读 · 0 评论 -
Linux 内核参数:watermark_scale_factor
针对节点 /proc/sys/vm/water_scale_factor原创 2022-09-24 16:42:11 · 963 阅读 · 0 评论 -
Linux 内核参数:watermark_boost_factor
对于buddy 系统,当申请内存时,会通过函数 get_page_from_freelist()确认有空闲物理页,如果没有的可能通过 __rmqueue_fallback()进行页面迁移,此时会尝试着从其他 migrate type 中迁移出一部分页面用以当前申请 migrate type 使用。而此时如果出现不是迁移整个 page block,那么就会出现该page block 中混合多种 mt(migrate type),此时需要激活 boost 来回收。......原创 2022-08-18 16:01:38 · 1284 阅读 · 0 评论 -
Linux 内核参数:extra_free_kbytes
在后台回收和直接回收发生的时候告诉 VM 保留额外的空闲内存。这对于需要低延迟内存分配和内存分配中有限制的突发的工作负载非常有用。例如,一个接收和传输网络流量(导致内核内内存分配) 的实时应用程序,其最大总消息突发大小为200MB,可能需要额外的200MB空闲内存,以避免直接回收相关的延迟。......原创 2022-08-19 21:20:34 · 1468 阅读 · 0 评论 -
Linux 内核参数:min_free_kbytes
通过描述,该属性用以强制Linux VM 保留最小的free KB数,VM 通过该属性计算系统中每一个zone 的水位watermark[WMARK_MIN] 的值。一些小内存需要满足PF_MEMALLOC 分配,如果设置该属性低于1024KB,系统可能会出现敏感地崩溃,在高负载下容易死锁。.........原创 2022-08-31 14:45:20 · 984 阅读 · 0 评论 -
Linux 内核参数:overcommit 相关
最终会调到overcommit 中,回头来简单看下该函数,大致分为:overcommit_memory 为1 (always) 直接pass,允许overcommit;overcommit_memory 为0 (guess,也是默认值),需要确认申请的pages 是否过大,不要太过分就行;进入overcommit_memory 为2 (never)的流程;进入vm_commit_limit,确认最终overcommit 允许的memory,最终结果存于allowed中;allowed 减去adm原创 2022-02-08 17:53:40 · 1485 阅读 · 0 评论 -
Linux 内核参数:loadavg
在性能优化时,会通过/proc/loadavg 或者 uptime 来确认CPU 的密集情况。Android 中也会在ANR 等异常情况时附带打印 loadavg。本文主要结合代码简单分析 loadavg 原理。原创 2022-02-22 13:45:18 · 1379 阅读 · 0 评论