首页 > 其他分享 >空闲页面跟踪 (翻译 by chatgpt)

空闲页面跟踪 (翻译 by chatgpt)

时间:2023-12-12 21:34:05浏览次数:23  
标签:负载 mm 内存 chatgpt page 空闲 页面

原文:https://www.kernel.org/doc/html/latest/admin-guide/mm/idle_page_tracking.html

空闲页面跟踪

动机

空闲页面跟踪功能允许跟踪工作负载访问的内存页面和空闲页面。这些信息对于估算工作负载的工作集大小很有用,进而可以在配置工作负载参数、设置内存cgroup限制或决定在计算集群中放置工作负载时加以考虑。

它由CONFIG_IDLE_PAGE_TRACKING=y启用。

用户API

空闲页面跟踪API位于/sys/kernel/mm/page_idle。目前,它由唯一的读写文件/sys/kernel/mm/page_idle/bitmap组成。

该文件实现了一个位图,其中每个位对应一个内存页面。位图由8字节整数组成,PFN#i处的页面映射到数组元素#i/64的第i%64位,字节顺序为本机。当设置一个位时,相应的页面被视为空闲。

如果自从标记为空闲以来未访问页面(有关“访问”实际含义的更多详细信息,请参见实现细节部分),则认为页面是空闲的。要标记页面为空闲,必须通过向文件写入来设置与页面对应的位。写入文件的值与当前位图值进行OR运算。

只有对用户内存页面的访问才会被跟踪。这些页面包括映射到进程地址空间、页面缓存和缓冲页面、交换缓存页面的页面。对于其他页面类型(例如SLAB页面),尝试标记页面为空闲会被静默忽略,因此这些页面永远不会被报告为空闲。

对于大页面,空闲标志仅在头页面上设置,因此必须读取/proc/kpageflags以正确计算空闲的大页面。

从/sys/kernel/mm/page_idle/bitmap读取或写入将在以下情况下返回-EINVAL:如果您不是从8字节边界开始读写,或者读写的大小不是8字节的倍数。如果写入此文件超出最大PFN,将返回-ENXIO。

也就是说,为了估算工作负载未使用的页面数量,应该:

  1. 通过设置/sys/kernel/mm/page_idle/bitmap中相应位来标记所有工作负载页面为空闲。如果工作负载由进程表示,则可以通过读取/proc/pid/pagemap找到页面,或者通过使用/proc/kpagecgroup过滤外来页面来找到工作负载放置在内存cgroup中的页面。

  2. 等待工作负载访问其工作集。

  3. 读取/sys/kernel/mm/page_idle/bitmap并计算设置的位数。如果要忽略某些类型的页面,例如mlocked页面,因为它们不可回收,可以使用/proc/kpageflags将它们过滤掉。

tools/mm目录中的page-types工具可用于协助此过程。如果使用适当选项最初运行该工具,它将标记所有查询的页面为空闲。然后,工具的后续运行可以显示在此期间已清除其空闲标志的页面。

有关/proc/pid/pagemap、/proc/kpageflags和/proc/kpagecgroup的更多信息,请参见《检查进程页表》。

实现细节

内核内部跟踪对用户内存页面的访问,以便在内存短缺条件下首先回收未引用的页面。如果页面最近通过进程地址空间访问,那么将被视为已引用,此时它所映射到的一个或多个PTE将设置已访问位,或者由内核明确标记为已访问(请参见mark_page_accessed())。后者发生在以下情况下:

  • 用户空间进程使用系统调用(例如read(2)或write(2))读取或写入页面

  • 用于存储文件系统缓冲区的页面被读取或写入,因为进程需要其中存储的文件系统元数据(例如列出目录树)

  • 设备驱动程序使用get_user_pages()访问页面

当脏页面由于内存回收或超出脏内存限制而写入交换或磁盘时,它不会被标记为已引用。

空闲内存跟踪功能添加了一个新的页面标志,即Idle flag。此标志由手动设置,通过向/sys/kernel/mm/page_idle/bitmap写入(请参见用户API部分),并在页面被上述方式引用时自动清除。

当页面标记为空闲时,必须在其映射到的所有PTE中清除the Accessed bit,否则我们将无法检测到来自进程地址空间的页面访问。为避免干扰回收器(如上所述,回收器使用the Accessed bit来提升活跃引用的页面),引入了另一个页面标志,即the Young flag。当由于设置或更新页面的Idle flag而清除PTE的Accessed bit时,将在页面上设置the Young flag。回收器将the Young flag视为额外的PTE Accessed bit,因此将考虑此类页面为已引用。

由于空闲内存跟踪功能基于内存回收逻辑,因此仅适用于在LRU列表上的页面,其他页面将被静默忽略。这意味着如果用户内存页面被隔离,它将被忽略,但由于通常不会有很多这样的页面,这不应明显影响整体结果。为了不阻塞空闲页面位图的扫描,可能也会跳过锁定页面。

标签:负载,mm,内存,chatgpt,page,空闲,页面
From: https://www.cnblogs.com/pengdonglin137/p/17876236.html

相关文章

  • SLUB简短用户指南 (翻译 by chatgpt)
    原文:https://www.kernel.org/doc/html/v6.6/mm/slub.htmlSLUB简短用户指南SLUB的基本理念与SLAB非常不同。SLAB需要重新构建内核以激活所有slab缓存的调试选项。SLUB始终包含完整的调试功能,但默认情况下处于关闭状态。SLUB可以仅针对选定的slab启用调试,以避免对整个系统性能产生......
  • 设备的能量模型【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/power/energy-model.html设备的能量模型1.概述能量模型(EM)框架充当了一个接口,连接了了解各种性能水平下设备功耗的驱动程序和愿意利用该信息做出节能决策的内核子系统。关于设备功耗的信息来源在不同平台上可能会有很大的差异。在某些......
  • radio单选按钮选中时当前页面实现跳转
    下面是一个单选的span标签:<spanstyle="width:500px;"><inputtype="radio"name="chart"value="overAll"checked="checked"/>搜狗<inputtype="radio"name="chart"value="in......
  • 【Python爬虫】爬虫框架Scrapy初使用_爬取4399游戏页面数据
    Scrapy简介Scrapy是一个用于爬取和提取数据的开源web抓取框架。它提供了一个强大的机制,让开发者可以轻松地创建和管理爬虫程序,以从网站上自动提取结构化的数据。以下是Scrapy的一些主要特点和优势:强大灵活的爬取能力:Scrapy具有高度可配置的请求处理和数据提取功能。它可以轻......
  • Python爬虫无法获取页面内容的常见原因及解决方法
     在使用Python进行网页爬取时,有时会遇到无法获取页面内容的情况。本文将探讨造成这种情况的常见原因,并提供一些解决方法,帮助您顺利进行网页内容的爬取。 当我们使用Python进行网页爬取时,有时会遇到无法获取页面内容的情况。以下是可能导致这种情况的常见原因: 1.请求错误: 在构......
  • System Suspend and Device Interrupts 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/power/suspend-and-interrupts.html系统挂起和设备中断版权©2014IntelCorp.作者:[email protected]挂起和恢复设备中断在系统挂起后(即在所有设备的->prepare、->suspend和->suspend_late回调已经执行......
  • 设备电源管理数据类型【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/driver-api/pm/types.htmlstructdev_pm_opsdevicePMcallbacks.Definition:structdev_pm_ops{int(*prepare)(structdevice*dev);void(*complete)(structdevice*dev);int(*suspend)(structdevice*dev)......
  • Power Management Strategies【ChatGPT】
    https://www.kernel.org/doc/html/latest/admin-guide/pm/strategies.html这段文本介绍了Linux内核支持的两种主要高级电源管理策略。第一种策略是基于使用整个系统的全局低功耗状态,其中用户空间代码无法执行,整个系统的活动性显著降低,称为睡眠状态。当用户空间请求时,内核将系......
  • I/O设备的运行时电源管理框架【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/power/runtime_pm.htmlI/O设备的运行时电源管理框架[email protected],[email protected].,[email protected].简介I/O......
  • 什么是前端 Web 应用响应式页面布局里的 Breakpoint 概念
    在Web前端开发中,响应式设计是一个非常重要的概念,它允许网页UI根据不同的设备屏幕大小进行适当的调整以优化用户体验。在这种设计中,breakpoint是一个关键的概念。我们可以把breakpoint理解为屏幕宽度的一种临界点,当屏幕宽度达到这个点时,我们会调整页面布局以适应这个新的屏幕......