1*ee65728eSMike Rapoport.. SPDX-License-Identifier: GPL-2.0 2*ee65728eSMike Rapoport 3*ee65728eSMike Rapoport:Original: Documentation/mm/damon/design.rst 4*ee65728eSMike Rapoport 5*ee65728eSMike Rapoport:翻译: 6*ee65728eSMike Rapoport 7*ee65728eSMike Rapoport 司延腾 Yanteng Si <siyanteng@loongson.cn> 8*ee65728eSMike Rapoport 9*ee65728eSMike Rapoport:校译: 10*ee65728eSMike Rapoport 11*ee65728eSMike Rapoport 12*ee65728eSMike Rapoport==== 13*ee65728eSMike Rapoport设计 14*ee65728eSMike Rapoport==== 15*ee65728eSMike Rapoport 16*ee65728eSMike Rapoport可配置的层 17*ee65728eSMike Rapoport========== 18*ee65728eSMike Rapoport 19*ee65728eSMike RapoportDAMON提供了数据访问监控功能,同时使其准确性和开销可控。基本的访问监控需要依赖于目标地址空间 20*ee65728eSMike Rapoport并为之优化的基元。另一方面,作为DAMON的核心,准确性和开销的权衡机制是在纯逻辑空间中。DAMON 21*ee65728eSMike Rapoport将这两部分分离在不同的层中,并定义了它的接口,以允许各种低层次的基元实现与核心逻辑的配置。 22*ee65728eSMike Rapoport 23*ee65728eSMike Rapoport由于这种分离的设计和可配置的接口,用户可以通过配置核心逻辑和适当的低级基元实现来扩展DAMON的 24*ee65728eSMike Rapoport任何地址空间。如果没有提供合适的,用户可以自己实现基元。 25*ee65728eSMike Rapoport 26*ee65728eSMike Rapoport例如,物理内存、虚拟内存、交换空间、那些特定的进程、NUMA节点、文件和支持的内存设备将被支持。 27*ee65728eSMike Rapoport另外,如果某些架构或设备支持特殊的优化访问检查基元,这些基元将很容易被配置。 28*ee65728eSMike Rapoport 29*ee65728eSMike Rapoport 30*ee65728eSMike Rapoport特定地址空间基元的参考实现 31*ee65728eSMike Rapoport========================== 32*ee65728eSMike Rapoport 33*ee65728eSMike Rapoport基本访问监测的低级基元被定义为两部分。: 34*ee65728eSMike Rapoport 35*ee65728eSMike Rapoport1. 确定地址空间的监测目标地址范围 36*ee65728eSMike Rapoport2. 目标空间中特定地址范围的访问检查。 37*ee65728eSMike Rapoport 38*ee65728eSMike RapoportDAMON目前为物理和虚拟地址空间提供了基元的实现。下面两个小节描述了这些工作的方式。 39*ee65728eSMike Rapoport 40*ee65728eSMike Rapoport 41*ee65728eSMike Rapoport基于VMA的目标地址范围构造 42*ee65728eSMike Rapoport------------------------- 43*ee65728eSMike Rapoport 44*ee65728eSMike Rapoport这仅仅是针对虚拟地址空间基元的实现。对于物理地址空间,只是要求用户手动设置监控目标地址范围。 45*ee65728eSMike Rapoport 46*ee65728eSMike Rapoport在进程的超级巨大的虚拟地址空间中,只有小部分被映射到物理内存并被访问。因此,跟踪未映射的地 47*ee65728eSMike Rapoport址区域只是一种浪费。然而,由于DAMON可以使用自适应区域调整机制来处理一定程度的噪声,所以严 48*ee65728eSMike Rapoport格来说,跟踪每一个映射并不是必须的,但在某些情况下甚至会产生很高的开销。也就是说,监测目标 49*ee65728eSMike Rapoport内部过于巨大的未映射区域应该被移除,以不占用自适应机制的时间。 50*ee65728eSMike Rapoport 51*ee65728eSMike Rapoport出于这个原因,这个实现将复杂的映射转换为三个不同的区域,覆盖地址空间的每个映射区域。这三个 52*ee65728eSMike Rapoport区域之间的两个空隙是给定地址空间中两个最大的未映射区域。这两个最大的未映射区域是堆和最上面 53*ee65728eSMike Rapoport的mmap()区域之间的间隙,以及在大多数情况下最下面的mmap()区域和堆之间的间隙。因为这些间隙 54*ee65728eSMike Rapoport在通常的地址空间中是异常巨大的,排除这些间隙就足以做出合理的权衡。下面详细说明了这一点:: 55*ee65728eSMike Rapoport 56*ee65728eSMike Rapoport <heap> 57*ee65728eSMike Rapoport <BIG UNMAPPED REGION 1> 58*ee65728eSMike Rapoport <uppermost mmap()-ed region> 59*ee65728eSMike Rapoport (small mmap()-ed regions and munmap()-ed regions) 60*ee65728eSMike Rapoport <lowermost mmap()-ed region> 61*ee65728eSMike Rapoport <BIG UNMAPPED REGION 2> 62*ee65728eSMike Rapoport <stack> 63*ee65728eSMike Rapoport 64*ee65728eSMike Rapoport 65*ee65728eSMike Rapoport基于PTE访问位的访问检查 66*ee65728eSMike Rapoport----------------------- 67*ee65728eSMike Rapoport 68*ee65728eSMike Rapoport物理和虚拟地址空间的实现都使用PTE Accessed-bit进行基本访问检查。唯一的区别在于从地址中 69*ee65728eSMike Rapoport找到相关的PTE访问位的方式。虚拟地址的实现是为该地址的目标任务查找页表,而物理地址的实现则 70*ee65728eSMike Rapoport是查找与该地址有映射关系的每一个页表。通过这种方式,实现者找到并清除下一个采样目标地址的位, 71*ee65728eSMike Rapoport并检查该位是否在一个采样周期后再次设置。这可能会干扰其他使用访问位的内核子系统,即空闲页跟 72*ee65728eSMike Rapoport踪和回收逻辑。为了避免这种干扰,DAMON使其与空闲页面跟踪相互排斥,并使用 ``PG_idle`` 和 73*ee65728eSMike Rapoport``PG_young`` 页面标志来解决与回收逻辑的冲突,就像空闲页面跟踪那样。 74*ee65728eSMike Rapoport 75*ee65728eSMike Rapoport 76*ee65728eSMike Rapoport独立于地址空间的核心机制 77*ee65728eSMike Rapoport======================== 78*ee65728eSMike Rapoport 79*ee65728eSMike Rapoport下面四个部分分别描述了DAMON的核心机制和五个监测属性,即 ``采样间隔`` 、 ``聚集间隔`` 、 80*ee65728eSMike Rapoport``更新间隔`` 、 ``最小区域数`` 和 ``最大区域数`` 。 81*ee65728eSMike Rapoport 82*ee65728eSMike Rapoport 83*ee65728eSMike Rapoport访问频率监测 84*ee65728eSMike Rapoport------------ 85*ee65728eSMike Rapoport 86*ee65728eSMike RapoportDAMON的输出显示了在给定的时间内哪些页面的访问频率是多少。访问频率的分辨率是通过设置 87*ee65728eSMike Rapoport``采样间隔`` 和 ``聚集间隔`` 来控制的。详细地说,DAMON检查每个 ``采样间隔`` 对每 88*ee65728eSMike Rapoport个页面的访问,并将结果汇总。换句话说,计算每个页面的访问次数。在每个 ``聚合间隔`` 过 89*ee65728eSMike Rapoport去后,DAMON调用先前由用户注册的回调函数,以便用户可以阅读聚合的结果,然后再清除这些结 90*ee65728eSMike Rapoport果。这可以用以下简单的伪代码来描述:: 91*ee65728eSMike Rapoport 92*ee65728eSMike Rapoport while monitoring_on: 93*ee65728eSMike Rapoport for page in monitoring_target: 94*ee65728eSMike Rapoport if accessed(page): 95*ee65728eSMike Rapoport nr_accesses[page] += 1 96*ee65728eSMike Rapoport if time() % aggregation_interval == 0: 97*ee65728eSMike Rapoport for callback in user_registered_callbacks: 98*ee65728eSMike Rapoport callback(monitoring_target, nr_accesses) 99*ee65728eSMike Rapoport for page in monitoring_target: 100*ee65728eSMike Rapoport nr_accesses[page] = 0 101*ee65728eSMike Rapoport sleep(sampling interval) 102*ee65728eSMike Rapoport 103*ee65728eSMike Rapoport这种机制的监测开销将随着目标工作负载规模的增长而任意增加。 104*ee65728eSMike Rapoport 105*ee65728eSMike Rapoport 106*ee65728eSMike Rapoport基于区域的抽样调查 107*ee65728eSMike Rapoport------------------ 108*ee65728eSMike Rapoport 109*ee65728eSMike Rapoport为了避免开销的无限制增加,DAMON将假定具有相同访问频率的相邻页面归入一个区域。只要保持 110*ee65728eSMike Rapoport这个假设(一个区域内的页面具有相同的访问频率),该区域内就只需要检查一个页面。因此,对 111*ee65728eSMike Rapoport于每个 ``采样间隔`` ,DAMON在每个区域中随机挑选一个页面,等待一个 ``采样间隔`` ,检 112*ee65728eSMike Rapoport查该页面是否同时被访问,如果被访问则增加该区域的访问频率。因此,监测开销是可以通过设置 113*ee65728eSMike Rapoport区域的数量来控制的。DAMON允许用户设置最小和最大的区域数量来进行权衡。 114*ee65728eSMike Rapoport 115*ee65728eSMike Rapoport然而,如果假设没有得到保证,这个方案就不能保持输出的质量。 116*ee65728eSMike Rapoport 117*ee65728eSMike Rapoport 118*ee65728eSMike Rapoport适应性区域调整 119*ee65728eSMike Rapoport-------------- 120*ee65728eSMike Rapoport 121*ee65728eSMike Rapoport即使最初的监测目标区域被很好地构建以满足假设(同一区域内的页面具有相似的访问频率),数 122*ee65728eSMike Rapoport据访问模式也会被动态地改变。这将导致监测质量下降。为了尽可能地保持假设,DAMON根据每个 123*ee65728eSMike Rapoport区域的访问频率自适应地进行合并和拆分。 124*ee65728eSMike Rapoport 125*ee65728eSMike Rapoport对于每个 ``聚集区间`` ,它比较相邻区域的访问频率,如果频率差异较小,就合并这些区域。 126*ee65728eSMike Rapoport然后,在它报告并清除每个区域的聚合接入频率后,如果区域总数不超过用户指定的最大区域数, 127*ee65728eSMike Rapoport它将每个区域拆分为两个或三个区域。 128*ee65728eSMike Rapoport 129*ee65728eSMike Rapoport通过这种方式,DAMON提供了其最佳的质量和最小的开销,同时保持了用户为其权衡设定的界限。 130*ee65728eSMike Rapoport 131*ee65728eSMike Rapoport 132*ee65728eSMike Rapoport动态目标空间更新处理 133*ee65728eSMike Rapoport-------------------- 134*ee65728eSMike Rapoport 135*ee65728eSMike Rapoport监测目标地址范围可以动态改变。例如,虚拟内存可以动态地被映射和解映射。物理内存可以被 136*ee65728eSMike Rapoport热插拔。 137*ee65728eSMike Rapoport 138*ee65728eSMike Rapoport由于在某些情况下变化可能相当频繁,DAMON允许监控操作检查动态变化,包括内存映射变化, 139*ee65728eSMike Rapoport并仅在用户指定的时间间隔( ``更新间隔`` )中的每个时间段,将其应用于监控操作相关的 140*ee65728eSMike Rapoport数据结构,如抽象的监控目标内存区。