"]sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextEnglish}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget/mm/damon/designmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget#/translations/zh_TW/mm/damon/designmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget#/translations/it_IT/mm/damon/designmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget#/translations/ja_JP/mm/damon/designmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget#/translations/ko_KR/mm/damon/designmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget#/translations/sp_SP/mm/damon/designmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageChinese (Simplified)uh1h hh _documenthsourceNlineNubhcomment)}(h SPDX-License-Identifier: GPL-2.0h]h SPDX-License-Identifier: GPL-2.0}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhhP/var/lib/git/docbuild/linux/Documentation/translations/zh_CN/mm/damon/design.rsthKubhsection)}(hhh](htitle)}(h设计h]h设计}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h可配置的层h]h可配置的层}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh paragraph)}(hXDAMON提供了数据访问监控功能,同时使其准确性和开销可控。基本的访问监控需要依赖于目标地址空间 并为之优化的基元。另一方面,作为DAMON的核心,准确性和开销的权衡机制是在纯逻辑空间中。DAMON 将这两部分分离在不同的层中,并定义了它的接口,以允许各种低层次的基元实现与核心逻辑的配置。h]hXDAMON提供了数据访问监控功能,同时使其准确性和开销可控。基本的访问监控需要依赖于目标地址空间 并为之优化的基元。另一方面,作为DAMON的核心,准确性和开销的权衡机制是在纯逻辑空间中。DAMON 将这两部分分离在不同的层中,并定义了它的接口,以允许各种低层次的基元实现与核心逻辑的配置。}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(h由于这种分离的设计和可配置的接口,用户可以通过配置核心逻辑和适当的低级基元实现来扩展DAMON的 任何地址空间。如果没有提供合适的,用户可以自己实现基元。h]h由于这种分离的设计和可配置的接口,用户可以通过配置核心逻辑和适当的低级基元实现来扩展DAMON的 任何地址空间。如果没有提供合适的,用户可以自己实现基元。}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(h例如,物理内存、虚拟内存、交换空间、那些特定的进程、NUMA节点、文件和支持的内存设备将被支持。 另外,如果某些架构或设备支持特殊的优化访问检查基元,这些基元将很容易被配置。h]h例如,物理内存、虚拟内存、交换空间、那些特定的进程、NUMA节点、文件和支持的内存设备将被支持。 另外,如果某些架构或设备支持特殊的优化访问检查基元,这些基元将很容易被配置。}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubeh}(h]id2ah ]h"]可配置的层ah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h'特定地址空间基元的参考实现h]h'特定地址空间基元的参考实现}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(h:基本访问监测的低级基元被定义为两部分。:h]h:基本访问监测的低级基元被定义为两部分。:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK!hjhhubhenumerated_list)}(hhh](h list_item)}(h-确定地址空间的监测目标地址范围h]h)}(hj6h]h-确定地址空间的监测目标地址范围}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK#hj4ubah}(h]h ]h"]h$]h&]uh1j2hj/hhhhhNubj3)}(h4目标空间中特定地址范围的访问检查。 h]h)}(h3目标空间中特定地址范围的访问检查。h]h3目标空间中特定地址范围的访问检查。}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK$hjKubah}(h]h ]h"]h$]h&]uh1j2hj/hhhhhNubeh}(h]h ]h"]h$]h&]enumtypearabicprefixhsuffix.uh1j-hjhhhhhK#ubh)}(hwDAMON目前为物理和虚拟地址空间提供了基元的实现。下面两个小节描述了这些工作的方式。h]hwDAMON目前为物理和虚拟地址空间提供了基元的实现。下面两个小节描述了这些工作的方式。}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK&hjhhubh)}(hhh](h)}(h$基于VMA的目标地址范围构造h]h$基于VMA的目标地址范围构造}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|hhhhhK*ubh)}(h这仅仅是针对虚拟地址空间基元的实现。对于物理地址空间,只是要求用户手动设置监控目标地址范围。h]h这仅仅是针对虚拟地址空间基元的实现。对于物理地址空间,只是要求用户手动设置监控目标地址范围。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK,hj|hhubh)}(hX在进程的超级巨大的虚拟地址空间中,只有小部分被映射到物理内存并被访问。因此,跟踪未映射的地 址区域只是一种浪费。然而,由于DAMON可以使用自适应区域调整机制来处理一定程度的噪声,所以严 格来说,跟踪每一个映射并不是必须的,但在某些情况下甚至会产生很高的开销。也就是说,监测目标 内部过于巨大的未映射区域应该被移除,以不占用自适应机制的时间。h]hX在进程的超级巨大的虚拟地址空间中,只有小部分被映射到物理内存并被访问。因此,跟踪未映射的地 址区域只是一种浪费。然而,由于DAMON可以使用自适应区域调整机制来处理一定程度的噪声,所以严 格来说,跟踪每一个映射并不是必须的,但在某些情况下甚至会产生很高的开销。也就是说,监测目标 内部过于巨大的未映射区域应该被移除,以不占用自适应机制的时间。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK.hj|hhubh)}(hX出于这个原因,这个实现将复杂的映射转换为三个不同的区域,覆盖地址空间的每个映射区域。这三个 区域之间的两个空隙是给定地址空间中两个最大的未映射区域。这两个最大的未映射区域是堆和最上面 的mmap()区域之间的间隙,以及在大多数情况下最下面的mmap()区域和堆之间的间隙。因为这些间隙 在通常的地址空间中是异常巨大的,排除这些间隙就足以做出合理的权衡。下面详细说明了这一点::h]hX出于这个原因,这个实现将复杂的映射转换为三个不同的区域,覆盖地址空间的每个映射区域。这三个 区域之间的两个空隙是给定地址空间中两个最大的未映射区域。这两个最大的未映射区域是堆和最上面 的mmap()区域之间的间隙,以及在大多数情况下最下面的mmap()区域和堆之间的间隙。因为这些间隙 在通常的地址空间中是异常巨大的,排除这些间隙就足以做出合理的权衡。下面详细说明了这一点:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK3hj|hhubh literal_block)}(h (small mmap()-ed regions and munmap()-ed regions) h]h (small mmap()-ed regions and munmap()-ed regions) }hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhK8hj|hhubeh}(h]vmaah ]h"]$基于vma的目标地址范围构造ah$]h&]uh1hhjhhhhhK*ubh)}(hhh](h)}(h!基于PTE访问位的访问检查h]h!基于PTE访问位的访问检查}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKBubh)}(hX物理和虚拟地址空间的实现都使用PTE Accessed-bit进行基本访问检查。唯一的区别在于从地址中 找到相关的PTE访问位的方式。虚拟地址的实现是为该地址的目标任务查找页表,而物理地址的实现则 是查找与该地址有映射关系的每一个页表。通过这种方式,实现者找到并清除下一个采样目标地址的位, 并检查该位是否在一个采样周期后再次设置。这可能会干扰其他使用访问位的内核子系统,即空闲页跟 踪和回收逻辑。为了避免这种干扰,DAMON使其与空闲页面跟踪相互排斥,并使用 ``PG_idle`` 和 ``PG_young`` 页面标志来解决与回收逻辑的冲突,就像空闲页面跟踪那样。h](hX{物理和虚拟地址空间的实现都使用PTE Accessed-bit进行基本访问检查。唯一的区别在于从地址中 找到相关的PTE访问位的方式。虚拟地址的实现是为该地址的目标任务查找页表,而物理地址的实现则 是查找与该地址有映射关系的每一个页表。通过这种方式,实现者找到并清除下一个采样目标地址的位, 并检查该位是否在一个采样周期后再次设置。这可能会干扰其他使用访问位的内核子系统,即空闲页跟 踪和回收逻辑。为了避免这种干扰,DAMON使其与空闲页面跟踪相互排斥,并使用 }(hjhhhNhNubhliteral)}(h ``PG_idle``h]hPG_idle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 和 }(hjhhhNhNubj)}(h ``PG_young``h]hPG_young}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhR 页面标志来解决与回收逻辑的冲突,就像空闲页面跟踪那样。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKDhjhhubeh}(h]pteah ]h"]!基于pte访问位的访问检查ah$]h&]uh1hhjhhhhhKBubeh}(h]id3ah ]h"]'特定地址空间基元的参考实现ah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h$独立于地址空间的核心机制h]h$独立于地址空间的核心机制}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hhhhhKMubh)}(h下面四个部分分别描述了DAMON的核心机制和五个监测属性,即 ``采样间隔`` 、 ``聚集间隔`` 、 ``更新间隔`` 、 ``最小区域数`` 和 ``最大区域数`` 。h](hQ下面四个部分分别描述了DAMON的核心机制和五个监测属性,即 }(hj5hhhNhNubj)}(h``采样间隔``h]h 采样间隔}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubh 、 }(hj5hhhNhNubj)}(h``聚集间隔``h]h 聚集间隔}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubh 、 }(hj5hhhNhNubj)}(h``更新间隔``h]h 更新间隔}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubh 、 }hj5sbj)}(h``最小区域数``h]h最小区域数}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubh 和 }(hj5hhhNhNubj)}(h``最大区域数``h]h最大区域数}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubh 。}(hj5hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKOhj$hhubh)}(hhh](h)}(h访问频率监测h]h访问频率监测}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKTubh)}(hXDAMON的输出显示了在给定的时间内哪些页面的访问频率是多少。访问频率的分辨率是通过设置 ``采样间隔`` 和 ``聚集间隔`` 来控制的。详细地说,DAMON检查每个 ``采样间隔`` 对每 个页面的访问,并将结果汇总。换句话说,计算每个页面的访问次数。在每个 ``聚合间隔`` 过 去后,DAMON调用先前由用户注册的回调函数,以便用户可以阅读聚合的结果,然后再清除这些结 果。这可以用以下简单的伪代码来描述::h](h{DAMON的输出显示了在给定的时间内哪些页面的访问频率是多少。访问频率的分辨率是通过设置 }(hjhhhNhNubj)}(h``采样间隔``h]h 采样间隔}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 和 }(hjhhhNhNubj)}(h``聚集间隔``h]h 聚集间隔}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh1 来控制的。详细地说,DAMON检查每个 }(hjhhhNhNubj)}(h``采样间隔``h]h 采样间隔}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubho 对每 个页面的访问,并将结果汇总。换句话说,计算每个页面的访问次数。在每个 }(hjhhhNhNubj)}(h``聚合间隔``h]h 聚合间隔}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 过 去后,DAMON调用先前由用户注册的回调函数,以便用户可以阅读聚合的结果,然后再清除这些结 果。这可以用以下简单的伪代码来描述:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKVhjhhubj)}(hXnwhile monitoring_on: for page in monitoring_target: if accessed(page): nr_accesses[page] += 1 if time() % aggregation_interval == 0: for callback in user_registered_callbacks: callback(monitoring_target, nr_accesses) for page in monitoring_target: nr_accesses[page] = 0 sleep(sampling interval)h]hXnwhile monitoring_on: for page in monitoring_target: if accessed(page): nr_accesses[page] += 1 if time() % aggregation_interval == 0: for callback in user_registered_callbacks: callback(monitoring_target, nr_accesses) for page in monitoring_target: nr_accesses[page] = 0 sleep(sampling interval)}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhK\hjhhubh)}(hW这种机制的监测开销将随着目标工作负载规模的增长而任意增加。h]hW这种机制的监测开销将随着目标工作负载规模的增长而任意增加。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKghjhhubeh}(h]id5ah ]h"]访问频率监测ah$]h&]uh1hhj$hhhhhKTubh)}(hhh](h)}(h基于区域的抽样调查h]h基于区域的抽样调查}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hhhhhKkubh)}(hX\为了避免开销的无限制增加,DAMON将假定具有相同访问频率的相邻页面归入一个区域。只要保持 这个假设(一个区域内的页面具有相同的访问频率),该区域内就只需要检查一个页面。因此,对 于每个 ``采样间隔`` ,DAMON在每个区域中随机挑选一个页面,等待一个 ``采样间隔`` ,检 查该页面是否同时被访问,如果被访问则增加该区域的访问频率。因此,监测开销是可以通过设置 区域的数量来控制的。DAMON允许用户设置最小和最大的区域数量来进行权衡。h](hX 为了避免开销的无限制增加,DAMON将假定具有相同访问频率的相邻页面归入一个区域。只要保持 这个假设(一个区域内的页面具有相同的访问频率),该区域内就只需要检查一个页面。因此,对 于每个 }(hj9hhhNhNubj)}(h``采样间隔``h]h 采样间隔}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubhC ,DAMON在每个区域中随机挑选一个页面,等待一个 }(hj9hhhNhNubj)}(h``采样间隔``h]h 采样间隔}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubh ,检 查该页面是否同时被访问,如果被访问则增加该区域的访问频率。因此,监测开销是可以通过设置 区域的数量来控制的。DAMON允许用户设置最小和最大的区域数量来进行权衡。}(hj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKmhj(hhubh)}(hW然而,如果假设没有得到保证,这个方案就不能保持输出的质量。h]hW然而,如果假设没有得到保证,这个方案就不能保持输出的质量。}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKshj(hhubeh}(h]id6ah ]h"]基于区域的抽样调查ah$]h&]uh1hhj$hhhhhKkubh)}(hhh](h)}(h适应性区域调整h]h适应性区域调整}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKwubh)}(hX9即使最初的监测目标区域被很好地构建以满足假设(同一区域内的页面具有相似的访问频率),数 据访问模式也会被动态地改变。这将导致监测质量下降。为了尽可能地保持假设,DAMON根据每个 区域的访问频率自适应地进行合并和拆分。h]hX9即使最初的监测目标区域被很好地构建以满足假设(同一区域内的页面具有相似的访问频率),数 据访问模式也会被动态地改变。这将导致监测质量下降。为了尽可能地保持假设,DAMON根据每个 区域的访问频率自适应地进行合并和拆分。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKyhjhhubh)}(hX1对于每个 ``聚集区间`` ,它比较相邻区域的访问频率,如果频率差异较小,就合并这些区域。 然后,在它报告并清除每个区域的聚合接入频率后,如果区域总数不超过用户指定的最大区域数, 它将每个区域拆分为两个或三个区域。h](h 对于每个 }(hjhhhNhNubj)}(h``聚集区间``h]h 聚集区间}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhX ,它比较相邻区域的访问频率,如果频率差异较小,就合并这些区域。 然后,在它报告并清除每个区域的聚合接入频率后,如果区域总数不超过用户指定的最大区域数, 它将每个区域拆分为两个或三个区域。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK}hjhhubh)}(h}通过这种方式,DAMON提供了其最佳的质量和最小的开销,同时保持了用户为其权衡设定的界限。h]h}通过这种方式,DAMON提供了其最佳的质量和最小的开销,同时保持了用户为其权衡设定的界限。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]id7ah ]h"]适应性区域调整ah$]h&]uh1hhj$hhhhhKwubh)}(hhh](h)}(h动态目标空间更新处理h]h动态目标空间更新处理}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(h监测目标地址范围可以动态改变。例如,虚拟内存可以动态地被映射和解映射。物理内存可以被 热插拔。h]h监测目标地址范围可以动态改变。例如,虚拟内存可以动态地被映射和解映射。物理内存可以被 热插拔。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hX'由于在某些情况下变化可能相当频繁,DAMON允许监控操作检查动态变化,包括内存映射变化, 并仅在用户指定的时间间隔( ``更新间隔`` )中的每个时间段,将其应用于监控操作相关的 数据结构,如抽象的监控目标内存区。h](h由于在某些情况下变化可能相当频繁,DAMON允许监控操作检查动态变化,包括内存映射变化, 并仅在用户指定的时间间隔( }(hjhhhNhNubj)}(h``更新间隔``h]h 更新间隔}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubht )中的每个时间段,将其应用于监控操作相关的 数据结构,如抽象的监控目标内存区。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]id8ah ]h"]动态目标空间更新处理ah$]h&]uh1hhj$hhhhhKubeh}(h]id4ah ]h"]$独立于地址空间的核心机制ah$]h&]uh1hhhhhhhhKMubeh}(h]id1ah ]h"]设计ah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjPerror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(j*j'j jj!jjjjjj"jj%j"j~j{jjjju nametypes}(j*j j!jjj"j%j~jjuh}(j'hjhjjjj|jjjj$j"jj{j(jjjju footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}j^KsRparse_messages]transform_messages] transformerN include_log] decorationNhhub.