【操作系统百科】内存回收

💡 原文中文,约4600字,阅读约需11分钟。
📝

内容提要

Linux内存回收策略经过20年的演变,MGLRU成为新的发展方向。内存被划分为高、中、低水位,以控制回收时机。经典的LRU维护四条链表,而MGLRU引入了多代机制,以优化扫描效率。swappiness参数用于调节匿名页与文件页的回收比例。kswapd和直接回收各有优缺点,PSI用于监测内存压力。整体目标是减少延迟和内存抖动。

🎯

关键要点

  • Linux内存回收策略经过20年的演变,MGLRU成为新的发展方向。

  • 内存被划分为高、中、低水位,以控制回收时机。

  • 经典的LRU维护四条链表,而MGLRU引入了多代机制,以优化扫描效率。

  • swappiness参数用于调节匿名页与文件页的回收比例。

  • kswapd和直接回收各有优缺点,PSI用于监测内存压力。

  • 整体目标是减少延迟和内存抖动。

延伸问答

MGLRU是什么,它有什么优势?

MGLRU是多代LRU的缩写,它通过引入多代机制来优化内存回收效率,减少扫描开销和内存抖动。

Linux内存回收的水位线是如何划分的?

Linux内存回收将内存划分为高、中、低水位,以控制回收时机,分别对应充裕、唤醒kswapd的阈值和直接回收的阈值。

swappiness参数的作用是什么?

swappiness参数用于调节匿名页与文件页的回收比例,影响内存回收的策略。

kswapd和直接回收有什么区别?

kswapd是后台内核线程负责内存回收,而直接回收是分配者在内存不足时自己进行的回收,后者会导致进程阻塞。

如何监测Linux系统的内存压力?

可以使用PSI(Pressure Stall Information)来监测内存压力,查看/proc/pressure/memory文件获取相关信息。

MGLRU的引入对内存管理有什么实际效果?

MGLRU的引入使得低内存抖动减少40%,kswapd的CPU使用降低35%,并减少了主要故障的发生。

➡️

继续阅读