当前位置:首页 > CN2资讯 > 正文内容

linux memleak的使用 linux mlock

2天前CN2资讯

一般用户空间关联的物理页面是按需通过缺页异常的方式分配和调页,当系统物理内存不足时页面回收算法会回收一些最近很少使用的页面,但是有时候我们需要锁住一些物理页面防止其被回收(如时间有严格要求的应用),Linux中提供了mlock相关的系统调用供用户空间使用来锁住部分或全部的地址空间关联的物理页面。

本文的分析基于arm64处理器架构,内核版本为Linux-5.10.27,我们会结合重点内核源代码来解析mlock是如何做到锁住进程地址空间关联的物理内存的,又是如何防止相关的物理页面被交换出去的。

一、主动缺页

mlock的主要代码处理流程如下,这里我们主要关注主动缺页部分:

mlock处理路径中,会将VM_LOCKED标志加入到vma->vm_flags中(由于设置的地址区域有可能跨越多个vma,所以代码中会涉及到分裂和合并的操作,实质上都会设置相关的vma->vm_flags的VM_LOCKED标志),然后会调用__mm_populate来填充虚拟页对应的物理页,最终在faultin_page函数中试图查找vma中的每个虚拟页对应的物理页面(对应于follow_page_mask函数),如果没有找到会调用handle_mm_fault主动触发缺页处理。

二、内存回收处理

1. 扫描活跃的lru链表

内存回收扫描活跃的lru链表时,对于设定了VM_LOCKED的vma处理链路如下:

可以看到:当扫描活跃的lru链表的时候,会通过反向映射机制查找到映射这个物理页面的每个vma, 对于设置了vma->vm_flags 的VM_LOCKED标志的vma来说直接退出反向映射处理即可,不需要进行访问计数的统计工作,本身这样的物理页面就需要常驻内存不要进行回收。

2. 扫描不活跃的lru链表

内存回收扫描不活跃的lru链表时,对于设定了VM_LOCKED的vma处理链路如下:

可以看到:调用链中也会调用page_referenced 函数通过反向映射机制查找到映射这个物理页面的每个vma, 对于设置了vma->vm_flags 的VM_LOCKED标志的vma来说直接退出反向映射处理即可,返回到page_check_references函数时,判断如果有vma设置了VM_LOCKED标志就会返回PAGEREF_RECLAIM到shrink_page_list函数接着处理。

shrink_page_list函数在处理完page_check_references之后,就进行回收处理,对于页表映射页会调用try_to_unmap来解除页表映射。

3. 反向映射处理

shrink_page_list在回收物理页面之前会调用try_to_unmap来解除映射到这个页面所有页表项,相关处理如下:

对于映射到这个物理页的每个vma来说,如果vma->vm_flags设置了VM_LOCKED标志,则会调用mlock_vma_page来做mlock处理,然后返回false,结束反向映射处理。

下面我们来看mlock_vma_page做了什么事情:

可以看到:mlock_vma_page首先设置页描述符的PG_mlocked标志,然后会zone的NR_MLOCK页面记账,然后会将页面从原来的lru链表中隔离出来,最后会将页面加入不可回收的lru中(这个代码大家自行阅读,实际上是判断页描述符的PG_mlocked标志)。

mlock_vma_page处理的重点就是将页面加入到不可回收的lru链表,这样内存回收的时候就不会在扫描到这样的页面了。

mlock的整个过程如下图所示:

三、munlock处理

munlock会解除原来锁住的页面,处理路径如下:

当然代码中也会有对应的vma的分裂处理,主要处理为:清除vma的VM_LOCKED标志,清除页描述符的PG_mlocked标志,最后就会将原来在不可回收的lru中的页面重新加入对应的lru链表中。

这里还有一个细节,那就是有可能这个页面对多个vma共享,所以会通过try_to_munlock来处理,处理路径如下:

会通过反向映射机制,遍历这样页对应的所有vma,如果传递的ttu_flags为TTU_MUNLOCK且vma->vm_flags没有设置VM_LOCKED标志,则直接返回,检查下一个vma;如果有一个vma设置了VM_LOCKED标志,说明这个页面还不能被回收,就会通过mlock_vma_page函数重新将页面加入到不可回收的lru链表。

munlock的整个处理过程如下图:

四、总结

对于一些对时间有严格要求的应用场景,访问时按需分配和调页机制的时延可能是未知的,内核中提供了mlock相关的系统调用,用于将虚拟内存区域对应的物理页面“锁在”内存中。内核对应mlock锁住的页面实际上它主要做了两步比较重要的操作:1,调用mlock的时候就将所需要的物理页面准备好;2,内存回收时当扫描到相关的物理页面时,将其放入不可回收的lru链表。第一步保证访问的虚拟地址对应的物理页面在内存中,第二步保证了锁住的页面不会被回收。



    你可能想看:

    扫描二维码推送至手机访问。

    版权声明:本文由皇冠云发布,如需转载请注明出处。

    本文链接:https://www.idchg.com/info/32342.html

    分享给朋友:

    “linux memleak的使用 linux mlock” 的相关文章

    探索日本V文化:从排球V联赛到Vtuber的多元化发展

    在谈到日本的多元化时,首先无法忽视的是“日本 v”这个词汇所涵盖的多个领域。它不仅代表了排球运动的一个新平台,也象征着现代金融科技,以及独特的二次元文化。这些领域虽然各自独立,但它们共同描绘出日本社会在多个层面上的文化与技术的融合。 1.1 日本排球V联赛 自2018年启幕以来,日本排球V联赛(V....

    VPS流媒体解锁测试:确保顺畅访问全球流媒体内容

    在如今的互联网时代,流媒体已经成为我们日常生活中不可或缺的一部分。无论是观看热门电视剧,还是播放最新的音乐视频,流媒体服务的便捷性吸引了无数用户。然而,涉及不同地区提供的内容时,依然存在一些区域限制。这时,VPS(虚拟专用服务器)流媒体解锁技术的重要性便不言而喻。 VPS流媒体解锁是指通过虚拟专用服...

    RackNerd评测:高性价比VPS服务体验与优缺点分析

    谈到VPS主机服务,RackNerd无疑是近年来备受关注的一个名字。成立于2019年的RackNerd,以其高性价比和出色的客户服务,迅速在行业内站稳了脚跟。无论你是个人网站的博主,还是小型企业的运营者,RackNerd都能为你提供一个合适的解决方案。 RackNerd的主要数据中心遍布北美和欧洲,...

    GA Cloud:全球化一站式云计算服务,优化您的企业数据管理

    GA Cloud成立于2021年,实际上是我对云计算服务界的一次全新探索。作为一家致力于全球化一站式云计算服务的公司,GA Cloud在市场中逐渐凸显出它的实力和影响力。我们在香港本地拥有8个以上的POP接入点,同时也在马来西亚、美国、日本、欧洲等地设立了多个数据中心。目前,我们的数据机柜数量已超过...

    搬瓦工查看流量使用的最佳方法与管理策略

    在使用搬瓦工(BandwagonHost)这家VPS提供商时,了解流量的相关信息是非常重要的。搬瓦工的流量套餐设计十分灵活,满足了不同用户的需求。每个VPS方案都设有流量限制,比如每月500GB或1TB,这些限制会直接影响到我们如何使用这些资源。用户在选择方案时,应该充分考虑自己的日常使用习惯,以便...

    IEPL:企业国际以太网专线的优势与申请指南

    什么是IEPL 当我第一次接触IEPL(International Ethernet Private Line)时,我意识到它是一种为企业提供国际级别的网络连接服务,特别适合那些需要在不同国家和地区之间高效、安全传输数据的公司。这项服务一般由电信运营商提供,旨在帮助企业实现及时的信息交流和数据传输。...