linux data access monitor(DAMON)

  • ­­­­­­­­DAMON(data access monitor)简介:

第一个版本提交时间为2020/1/10,功能在持续不断的完善。

DAMON是一个用于Linux内核的数据访问监控框架子系统,它的设计核心是与地址空间无关的。DAMON的核心机制称为“Region Based Sampling(基于区域的采样)”和“Adaptive Regions Adjustment(自适应区域调整)”(详情请参考‘mechanisms.rst’补丁集中的第11个补丁)。

特点:

-精确:(监控信息对DRAM级别的内存管理是非常有用的。但是它可能不太合适cache级别的精准度)

-轻量级:监视开销非常低以至于可以在线应用,同时不影响目标工作负载的性能

-可扩展:无论目标工作负载的大小如何,开销的上限都是恒定的

使用这个框架,可以更好的优化内核中关于内存回收和THP(Transparent Huge Pages)等核心的内存管理机制,从而实现更好的内存管理。伴有很高开销的实验性内存管理优化工作可以再尝试一次。与此同时,在用户空间,具有特殊工作负载的用户将能够编写个性化的工具或应用程序,以便对其系统进行更深入的理解和特定的优化。

  • DAMON的可配置层设计机制

DAMON提供数据访问监视功能,同时使准确性和开销可控。 基本访问监视需要依赖于目标地址空间并针对目标地址空间进行优化的原语。 另一方面,精度和开销权衡机制是DAMON的核心,处于纯逻辑空间。 DAMON将这两个部分分为不同的层,并定义其接口,以允许使用核心逻辑配置各种低级基元实现。

由于这种分离的设计和可配置的接口,用户可以通过使用适当的低级基本实现配置内核逻辑,将DAMON扩展到任何地址空间。 如果没有提供合适的方法,则用户可以自己实现原语。

例如,将来会支持物理内存,虚拟内存,交换空间,还有用于特定进程的,NUMA节点,文件和后备存储设备。 另外,如果某些体系结构或设备支持特殊的优化访问检查原语,则可以轻松的配置它们。

  1. 地址空间特定基元的参考实现

访问监视的基本面的底层原语分为两个部分:

  1. 监视目标地址空间范围的识别。
  2. 对目标空间中特定地址范围的访问检查。

DAMON目前仅支持虚拟地址空间的原语。 以下两个小节介绍了它的工作原理。

  1. 基于PTE位的访问检查

虚拟地址空间的实现使用PTE访问位进行基本访问检查。 它通过遍历地址目标任务的页表从地址中找到相关的PTE访问位。 这样,实现方式找到并清除下一个采样目标地址的位,并在一个采样周期后检查该位是否再次置位。 这可能会使用已访问的位(即空闲页面跟踪和回收逻辑)干扰其他内核子系统。 为了避免此类干扰,DAMON使其与空闲页面跟踪互斥,并像空闲页面跟踪一样使用PG_idle和PG_young页面标志来解决与回收逻辑的冲突。

  1.   基于VMA的目标地址范围构造

进程的超大虚拟地址空间中只有一小部分被映射到物理内存并被访问。 因此,跟踪未映射的地址区域只是浪费。 但是,由于DAMON可以使用自适应区域调整机制来处理一定水平的噪声,因此并不是严格要求跟踪每个映射,而是在某些情况下甚至会产生较高的开销。 就是说,应该删除监视目标内部太大的未映射区域,以免花时间适应机制。

因此,此实现将复杂的映射转换为覆盖地址空间每个映射区域的三个不同区域。 这三个区域之间的两个间隙是给定地址空间中两个最大的未映射区域。 在大多数情况下,两个最大的未映射区域是堆和最上方的mmap()-ed区之间的间隙,以及最下面的mmap()-ed区与堆栈之间的间隙。 由于这些间隙在通常的地址空间中异常巨大,因此排除这些间隙将足以进行合理的权衡。

  • DAMON与地址空间无关的核心机制

下面四个部分分别描述DAMON核心机制和五种监控属性,sampling interval, aggregation interval,regions update interval,minimum number of regions,and maximum number of regions。

  1. Access Frequency Monitoring

DAMON的输出显示在给定的持续时间内哪些页面被频繁访问。 通过设置sampling interval和aggregation interval来控制访问频率的分辨率。 详细地说,DAMON检查每个sampling interval对每个页面的访问并汇总结果。 换句话说,计算对每个页面的访问次数。 在每个aggregation interval过去之后,DAMON调用用户先前注册的回调函数,以便用户可以读取聚合结果,然后清除结果。

这种机制的监视开销将随目标工作负载的大小增加而任意增加。

  1. Region Based Sampling

为了避免无限制地增加开销,DAMON将假定具有相同访问频率的多个相邻页面分组到一个区域中。只有在这个前提下(一个区域内的页面具有相同的访问频率),只需要检查该区域里的一个页面即可。因此,在每个sampling interval中,DAMON只需要在每个区域随机抽取一个页面并清除其访问位即可。再经过一个sampling interval之后,DAMON读取页面的访问位,如果同时设置了该位,则增加该区域的访问频率。因此,通过设置区域的数量,可以控制监控开销。DAMON允许用户设置区域的最小和最大数量来进行权衡。

但是,如果不能保证这个假设,这个方案就不能保证输出的质量。

  1. Adaptive Regions Adjustment

即使初始监控目标区域构造良好,以满足假设(相同区域中的页面具有相似的访问频率),数据访问模式也可以动态更改。这将导致低监测质量。为了尽可能地保持这个假设,DAMON根据每个区域的访问频率自适应地进行合并和分割。

对于aggregation interval,比较相邻区域的访问频率,当频率差较小时进行合并。然后,在报告并清除每个区域的聚合访问频率之后,如果区域总数不超过分割后用户指定的最大区域数,则将每个区域分割为两到三个区域。

通过这种方式,DAMON提供了最佳的质量和最小的开销,同时为用户设置了相应的限制。

  1. Dynamic Target Space Updates Handling

监视目标地址范围可以动态的变化。例如,虚拟内存可以动态映射和取消映射。 物理内存可能被热插拔。

由于在某些情况下更改可能非常频繁,因此DAMON会检查动态内存映射更改,并仅针对每个用户指定的时间间隔(regions update interval)将其应用于抽象的目标区域。

  • DAMON提供的功能及内核架构

       提供每个地址范围的访问频率。

       内核空间跟用户空间都可以使用它用来分析优化内存管理。

内核架构

此图来自于SeongJae Park在The Linux Kernel Summit, August 2020的PPT。

 

  • Frequently Asked Questions
  1. 为什么使用新的子系统,而不是扩展perf或其他用户空间工具?

首先,因为它需要尽可能地轻量级,以便能够在线使用,所以应该避免任何不必要的开销,比如内核-用户空间上下文切换成本。其次,DAMON的目标是供其他程序使用,包括内核。因此,依赖于像perf这样的特定工具是不可取的。这是DAMON在内核空间实现的两个最大原因。

  1. “idle pages tracking”或“perf mem”可以代替DAMON吗?

idle pages tracking是一个用于访问检查物理地址空间的低级原语。“perf mem”也一样,虽然它可以使用抽样来最小化开销。另一方面,DAMON是用于监视各种地址空间的高级框架。它专注于内存管理优化,并提供复杂的准确性/开销处理机制。因此,“idle pages tracking”和“perf mem”可以作为DAMON输出的一个子集,但不能替代DAMON。

  1. 如何使用DAMON优化我的系统内存管理?

由于基于DAMON的优化有几种方法,所以我们编写了一个单独的文档,优化指南。请参考。

  1. DAMON是否只支持虚拟内存?

不。DAMON的核心是与地址空间无关的。用户可以在DAMON核上实现和配置特定地址空间的底层基元部分,包括监控目标区域的构建和实际的访问检查。这样,DAMON用户就可以使用任何访问检查技术监视任何地址空间。

尽管如此,DAMON默认情况下为虚拟内存提供了基于vma跟踪和基于PTE访问位检查的虚拟内存地址相关功能,以供参考和方便使用。在不久的将来,我们也将为物理内存地址空间提供这些功能。

  1. 我可以简单地监控页面粒度吗?

是的,你可以通过将min_nr_regions属性设置为高于工作集除以页面的值来实现。因为监控目标区域的大小被强制设置为>=页面大小,所以区域划分将无效。

 

参考链接:

https://damonitor.github.io/doc/html/latest-damon

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值