首页 > 其他分享 >hwpoison 【ChatGPT】

hwpoison 【ChatGPT】

时间:2023-12-12 23:11:06浏览次数:31  
标签:PR MCE KILL 内存 ChatGPT hwpoison 页面

"hwpoison"是什么?

即将推出的英特尔CPU支持从一些内存错误(MCA恢复)中恢复。这需要操作系统声明一个页面为“毒害”,终止与之关联的进程,并避免将来使用它。

这个补丁包在虚拟机中实现了必要的基础设施。

引用概述评论:

高级机器检查处理程序。处理硬件报告的页面通常由于2位ECC内存或缓存故障而被损坏。

这专注于在后台检测到损坏的页面。当当前CPU尝试消耗损坏时,当前运行的进程可以直接被终止。这意味着,如果由于某种原因无法处理错误,那么安全地忽略它是可以的,因为尚未发生任何损坏。相反,当发生这种情况时,将会发生另一个机器检查。

处理各种状态的页面缓存页面。这里的棘手之处在于我们可以异步访问任何页面,因为内存故障可能随时发生,可能违反一些假设。这就是为什么这段代码必须非常小心谨慎。通常情况下,它试图使用正常的锁定规则,即获取标准锁定,即使这可能意味着错误处理需要很长时间。

这里的一些操作有些低效,并且具有非线性的算法复杂性,因为数据结构并未针对这种情况进行优化。这特别适用于从VMA到进程的映射。由于这种情况预计是罕见的,我们希望可以摆脱这一点。

代码包括mm/memory-failure.c中的高级处理程序、新的页面毒害位以及虚拟机中处理毒害页面的各种检查。

目前的主要目标是KVM客户端,但适用于各种应用程序。KVM支持需要最新的qemu-kvm版本。

对于KVM的使用,需要一种新的信号类型,以便KVM可以将机器检查注入到具有适当地址的客户端。理论上,这也允许其他应用程序处理内存故障。预期大多数应用程序不会这样做,但一些非常专业的应用程序可能会。

故障恢复模式

内存故障恢复有两种(实际上是三种)模式:

  1. vm.memory_failure_recovery设置为零:

    所有内存故障都会导致系统崩溃,不会尝试恢复。

  2. 早期终止(可以全局和每个进程单独控制):

    一旦检测到错误,立即向应用程序发送SIGBUS信号。这允许能够以温和方式处理内存错误的应用程序(例如,丢弃受影响的对象)。这是KVM qemu使用的模式。

  3. 晚期终止:

    当应用程序访问到损坏的页面时发送SIGBUS。这适用于不了解内存错误的应用程序,并且是默认模式。需要注意的是,某些页面始终被视为晚期终止。

用户可以通过以下方式控制和配置:

  • vm.memory_failure_recovery:参见sysctl.txt。

  • vm.memory_failure_early_kill:全局启用早期终止模式。

  • PR_MCE_KILL:设置早期/晚期终止模式或恢复为系统默认模式。

    • arg1: PR_MCE_KILL_CLEAR:恢复为系统默认模式。
    • arg1: PR_MCE_KILL_SETarg2定义线程特定模式。
      • PR_MCE_KILL_EARLY:早期终止。
      • PR_MCE_KILL_LATE:晚期终止。
      • PR_MCE_KILL_DEFAULT:使用系统全局默认模式。
        需要注意的是,如果您想要有一个专用的线程代表进程处理SIGBUS(BUS_MCEERR_AO),您应该在指定的线程上调用prctl(PR_MCE_KILL_EARLY)。否则,SIGBUS将发送到主线程。
  • PR_MCE_KILL_GET:返回当前模式。

测试

  • 使用madvise(MADV_HWPOISON, ....)(作为root用户)- 为了测试,在进程中毒害一个页面
  • 通过debugfs /sys/kernel/debug/hwpoison/中的hwpoison-inject模块
    • corrupt-pfn
      • 在此文件中注入PFN指定的hwpoison故障。这会进行一些早期过滤,以避免在测试套件中出现意外损坏的页面。
    • unpoison-pfn
      • 在此文件中软件解毒指定的PFN页面。这样页面可以再次被重用。这仅适用于Linux注入的故障,而不适用于真实的内存故障。一旦发生任何硬件内存故障,此功能将被禁用。
        请注意,这些注入接口不稳定,可能会在内核版本之间发生变化。
  • corrupt-filter-dev-major, corrupt-filter-dev-minor
    • 仅处理与由块设备主/次定义的文件系统相关联的页面的内存故障。-1U是通配符值。这应该仅用于使用人工注入进行测试。
  • corrupt-filter-memcg
    • 将注入限制为由memgroup拥有的页面。由memcg的inode号指定。
    • 示例:
      mkdir /sys/fs/cgroup/mem/hwpoison
      
      usemem -m 100 -s 1000 &
      echo `jobs -p` > /sys/fs/cgroup/mem/hwpoison/tasks
      
      memcg_ino=$(ls -id /sys/fs/cgroup/mem/hwpoison | cut -f1 -d' ')
      echo $memcg_ino > /debug/hwpoison/corrupt-filter-memcg
      
      page-types -p `pidof init`   --hwpoison  # shall do nothing
      page-types -p `pidof usemem` --hwpoison  # poison its pages
      
  • corrupt-filter-flags-mask, corrupt-filter-flags-value
    • 当指定时,仅在((page_flags & mask) == value)时毒害页面。这允许对许多类型的页面进行压力测试。page_flags与/proc/kpageflags中的相同。标志位在include/linux/kernel-page-flags.h中定义,并在《检查进程页表》中有文档记录。
  • 架构特定的MCE注入器
    • x86具有mce-inject、mce-test
    • mce-test中有一些可移植的hwpoison测试程序,见下文。

参考资料

限制

并非所有页面类型都受支持,而且永远也不会受支持。目前只能恢复大多数内核内部对象,仅支持LRU页面。

--- Andi Kleen,2009年10月

标签:PR,MCE,KILL,内存,ChatGPT,hwpoison,页面
From: https://www.cnblogs.com/pengdonglin137/p/17898088.html

相关文章

  • 物理地址模型 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/mm/memory-model.html物理内存模型系统中的物理内存可以以不同的方式进行寻址。最简单的情况是物理内存从地址0开始,并延伸到最大地址的连续范围。然而,这个范围可能包含对CPU不可访问的小空洞。然后可能存在完全不同地址的几个连续范围。......
  • KSM 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/mm/ksm.htmlKernelSamepageMerging(KSM)KSM是一种节省内存的去重功能,通过CONFIG_KSM=y启用,添加到Linux内核中的2.6.32版本。有关其实现,请参阅mm/ksm.c,以及http://lwn.net/Articles/306704/和https://lwn.net/Articles/330589/。KSM的用......
  • 虚拟映射的内核栈支持 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/mm/vmalloced-kernel-stacks.html虚拟映射的内核栈支持作者[email protected]概述这是从引入虚拟映射内核栈功能的代码和原始补丁系列中整理的信息https://lwn.net/Articles/694348/。介绍内核栈溢出通常很难调......
  • 页面迁移 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/mm/page_migration.html#page-migration页面迁移页面迁移允许在NUMA系统中的节点之间移动页面的物理位置,同时进程正在运行。这意味着进程看到的虚拟地址不会改变。但是,系统重新排列这些页面的物理位置。另请参阅异构内存管理(HMM),用于......
  • Multi-Gen LRU 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/mm/multigen_lru.html多代LRU多代LRU是一种替代LRU实现,它优化页面回收并在内存压力下提高性能。页面回收决定了内核的缓存策略和内存过度分配的能力。它直接影响了kswapdCPU的使用率和RAM的效率。设计概述目标设计目标包括:良好的......
  • 空闲页面报告 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/mm/free_page_reporting.html空闲页面报告空闲页面报告是一种API,设备可以通过该API注册以接收当前系统未使用的页面列表。这在虚拟化的情况下非常有用,因为虚拟机可以利用这些数据通知hypervisor它不再使用内存中的某些页面。对于驱动程......
  • 文心一言 VS 讯飞星火 VS chatgpt (155)-- 算法导论12.3 2题
    二、用go语言,假设通过反复向一棵树中插人互不相同的关键字来构造一棵二叉搜索树。证明:在这棵树中查找关键字所检查过的结点数目等于先前插入这个关键字所检查的结点数目加1。文心一言:为了证明这个结论,我们可以使用二叉搜索树的性质:在二叉搜索树中,每个节点包含一个关键字以及指......
  • 异构内存管理(HMM) 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/mm/hmm.html异构内存管理(HMM)HMM提供基础设施和辅助工具,将非常规内存(例如设备内存,如GPU板载内存)整合到常规内核路径中,其核心是为此专门设计的用于此类内存的structpage(请参见本文档的第5至7节)。HMM还提供了用于SVM(共享虚拟内存)的可选辅......
  • DAMON: 数据访问监控 (翻译 by chatgpt)
    原文:https://www.kernel.org/doc/html/v6.6/admin-guide/mm/damon/index.htmlDAMON:数据访问监控DAMON允许进行轻量级的数据访问监控。使用DAMON,用户可以分析其系统的内存访问模式并进行优化。入门指南先决条件记录数据访问模式可视化记录的模式数据访问模式感知内存管理......
  • 空闲页面跟踪 (翻译 by chatgpt)
    原文:https://www.kernel.org/doc/html/latest/admin-guide/mm/idle_page_tracking.html空闲页面跟踪动机空闲页面跟踪功能允许跟踪工作负载访问的内存页面和空闲页面。这些信息对于估算工作负载的工作集大小很有用,进而可以在配置工作负载参数、设置内存cgroup限制或决定在计算......