在Linux系统中,kswapd是一个内核线程,负责在内存不足时回收页面。它的工作机制大致如下:

1. 内存申请:当系统从buddy系统中申请内存失败时,会尝试通过kswapd线程进行内存回收。
2. 线程创建:系统启动时,内核会为每个NUMA内存节点创建一个kswapd线程。每个节点有一个独立的kswapd线程,以node id为后缀。
3. 内存回收:kswapd线程会对LRU(最近最少使用)列表和slab缓存中的内存进行回收。
4. 休眠与唤醒:kswapd线程在完成一次内存回收后会尝试进入休眠状态,以减少对CPU的占用。如果短时间内被再次唤醒,表明内存压力较大;如果在短暂休眠后没有被唤醒,则会进行更长时间的休眠。
5. 内存回收策略:kswapd的目标是保持每个内存区域(zone)的空闲内存超过高水位线,以确保系统性能和响应。

kswapd的工作是基于节点的,每个节点有一个kswapd线程,主要相关的数据结构挂载到pglist_data中。这些数据结构包括节点ID、kswapd等待队列、内存回收order等信息。

总的来说,kswapd是Linux内存管理的重要组成部分,它通过异步回收内存来确保系统在内存紧张时仍能正常运行¹²³。

源: 与必应的对话, 2024/4/16
(1) Linux内核那些事之kswapd - 知乎 - 知乎专栏. https://zhuanlan.zhihu.com/p/574462887.
(2) Linux内存回收(一)---kswapd回收 - 知乎 - 知乎专栏. https://zhuanlan.zhihu.com/p/453987504.
(3) Linux常见内核进程说明 - kswapd和kcompactd - 云谷计算. https://luohao-brian.github.io/2019/01/26/Linux%E5%B8%B8%E8%A7%81%E5%86%85%E6%A0%B8%E8%BF%9B%E7%A8%8B%E8%AF%B4%E6%98%8E-kswapd%E5%92%8Ckcompactd/.
(4) kswapd进程工作原理(四)——总结_kswap进程-CSDN博客. https://blog.csdn.net/u010039418/article/details/114456268.

Comments

Be the first to add a comment