哈喽,我是子牙,一个很卷的硬核男人
深入研究计算机底层、Windows内核、Linux内核、Hotspot源码……聚焦做那些大家想学没地方学的课程。为了保证课程质量及教学效果,一年磨一剑,三年先后做了这些课程:手写JVM、手写OS、带你用纯汇编写OS、手写64位多核OS、实战Linux内核…
这篇文章给大家分享Linux内核内存模块一个很重要的知识点:水位线,就是这玩意
这玩意干啥的呢?控制内存回收的。这玩意是理解Linux内核物理内存管理模块一个非常重要的知识点,还有一个就是lowmem_reserve,这个后面写文章详谈
关于水位线,能搜到的资料还是蛮多的,有的讲得蛮好的,但是我没有看到一篇文章是单步调试Linux内核给出证明的,如所有讲底层的文章还是一样,只是讲原理。所以我准备取其精华去其糟粕,结合自己的理解,再结合我能做到的单步调试Linux内核,写一篇通俗易懂、有理有据的文章。如果你觉得有收获,用你的小手点下分享就是对我最大的支持,创作不易……
我会分享这些:
-
水位线是个什么东东,机制是怎样的?
-
Linux内核中有几条水位线,水位线的值是如何算出来的
-
Linux内核是如何基于水位线控制内存回收线程的
-
NUMA架构中,水位线是如何工作的
-
如果证明你说的都是对的
-
我想根据业务需求调整内存,怎么做
关注公众号【硬核子牙】,阅读更多我写的硬核文章,关于操作系统、Linux内核、Java虚拟机…
本文是基于64位Linux内核写的,以下,enjoy
01 水位线watermark
如果你是做Java、Python、PHP的,你肯定听过垃圾收集器(GC),你写程序时不用考虑内存的申请与回收,都是由虚拟机帮你完成的。那虚拟机如何知道何时回收呢?有个阈值对吧,内存使用达到那个阈值就启动回收线程进行回收。这里说的水位线就相当于是这个阈值
那Linux内核中有几条水位线呢?三条。对应的阈值就是三个:
这三条水位线与内存回收线程之间是如何协同工作的呢?如图