S{sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextEnglish}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget /mm/hwpoisonmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget/translations/zh_TW/mm/hwpoisonmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget/translations/it_IT/mm/hwpoisonmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget/translations/ja_JP/mm/hwpoisonmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget/translations/ko_KR/mm/hwpoisonmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget/translations/sp_SP/mm/hwpoisonmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageChinese (Simplified)uh1h hh _documenthsourceNlineNubhsection)}(hhh](htitle)}(hhwpoisonh]hhwpoison}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhL/var/lib/git/docbuild/linux/Documentation/translations/zh_CN/mm/hwpoison.rsthK ubh)}(hhh](h)}(h什么是hwpoison?h]h什么是hwpoison?}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh paragraph)}(h即将推出的英特尔CPU支持从一些内存错误中恢复( ``MCA恢复`` )。这需要操作系统宣布 一个页面"poisoned",杀死与之相关的进程,并避免在未来使用它。h](hC即将推出的英特尔CPU支持从一些内存错误中恢复( }(hhhhhNhNubhliteral)}(h ``MCA恢复``h]h MCA恢复}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhubh| )。这需要操作系统宣布 一个页面”poisoned”,杀死与之相关的进程,并避免在未来使用它。}(hhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hA这个补丁包在虚拟机中实现了必要的(编程)框架。h]hA这个补丁包在虚拟机中实现了必要的(编程)框架。}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(h引用概述中的评论::h]h引用概述中的评论:}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh literal_block)}(hXv高级机器的检查与处理。处理方法是损坏的页面被硬件报告,通常是由于2位ECC内 存或高速缓存故障。 这主要是针对在后台检测到的损坏的页面。当当前的CPU试图访问它时,当前运行的进程 可以直接被杀死。因为还没有访问损坏的页面, 如果错误由于某种原因不能被处理,就可 以安全地忽略它. 而不是用另外一个机器检查去处理它。 处理不同状态的页面缓存页。这里棘手的部分是,相对于其他虚拟内存用户, 我们可以异 步访问任何页面。因为内存故障可能随时随地发生,可能违反了他们的一些假设。这就是 为什么这段代码必须非常小心。一般来说,它试图使用正常的锁规则,如获得标准锁,即使 这意味着错误处理可能需要很长的时间。 这里的一些操作有点低效,并且具有非线性的算法复杂性,因为数据结构没有针对这种情 况进行优化。特别是从vma到进程的映射就是这种情况。由于这种情况大概率是罕见的,所 以我们希望我们可以摆脱这种情况。h]hXv高级机器的检查与处理。处理方法是损坏的页面被硬件报告,通常是由于2位ECC内 存或高速缓存故障。 这主要是针对在后台检测到的损坏的页面。当当前的CPU试图访问它时,当前运行的进程 可以直接被杀死。因为还没有访问损坏的页面, 如果错误由于某种原因不能被处理,就可 以安全地忽略它. 而不是用另外一个机器检查去处理它。 处理不同状态的页面缓存页。这里棘手的部分是,相对于其他虚拟内存用户, 我们可以异 步访问任何页面。因为内存故障可能随时随地发生,可能违反了他们的一些假设。这就是 为什么这段代码必须非常小心。一般来说,它试图使用正常的锁规则,如获得标准锁,即使 这意味着错误处理可能需要很长的时间。 这里的一些操作有点低效,并且具有非线性的算法复杂性,因为数据结构没有针对这种情 况进行优化。特别是从vma到进程的映射就是这种情况。由于这种情况大概率是罕见的,所 以我们希望我们可以摆脱这种情况。}hj sbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1jhhhKhhhhubh)}(h该代码由mm/memory-failure.c中的高级处理程序、一个新的页面poison位和虚拟机中的 各种检查组成,用来处理poison的页面。h]h该代码由mm/memory-failure.c中的高级处理程序、一个新的页面poison位和虚拟机中的 各种检查组成,用来处理poison的页面。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK*hhhhubh)}(h{现在主要目标是KVM客户机,但它适用于所有类型的应用程序。支持KVM需要最近的qemu-kvm 版本。h]h{现在主要目标是KVM客户机,但它适用于所有类型的应用程序。支持KVM需要最近的qemu-kvm 版本。}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK-hhhhubh)}(hX:对于KVM的使用,需要一个新的信号类型,这样KVM就可以用适当的地址将机器检查注入到客户 机中。这在理论上也允许其他应用程序处理内存故障。我们的期望是,所有的应用程序都不要这 样做,但一些非常专业的应用程序可能会这样做。h]hX:对于KVM的使用,需要一个新的信号类型,这样KVM就可以用适当的地址将机器检查注入到客户 机中。这在理论上也允许其他应用程序处理内存故障。我们的期望是,所有的应用程序都不要这 样做,但一些非常专业的应用程序可能会这样做。}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK0hhhhubeh}(h]id1ah ]h"]什么是hwpoison?ah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h故障恢复模式h]h故障恢复模式}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLhhhhhK5ubh)}(hH有两种(实际上是三种)模式的内存故障恢复可以在。h]hH有两种(实际上是三种)模式的内存故障恢复可以在。}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK7hjLhhubhdefinition_list)}(hhh](hdefinition_list_item)}(hlvm.memory_failure_recovery sysctl 置零: 所有的内存故障都会导致panic。请不要尝试恢复。 h](hterm)}(h)vm.memory_failure_recovery sysctl 置零:h]h)vm.memory_failure_recovery sysctl 置零:}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhhhK:hjrubh definition)}(hhh]h)}(hA所有的内存故障都会导致panic。请不要尝试恢复。h]hA所有的内存故障都会导致panic。请不要尝试恢复。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK:hjubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jphhhK:hjmubjq)}(h早期处理 (可以在全局和每个进程中控制) 一旦检测到错误,立即向应用程序发送SIGBUS这允许 应用程序以温和的方式处理内存错误(例如,放弃受影响的对象) 这是KVM qemu使用的 模式。 h](jw)}(h 早期处理h]h 早期处理}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhhhK?hjubj)}(hhh]h)}(h(可以在全局和每个进程中控制) 一旦检测到错误,立即向应用程序发送SIGBUS这允许 应用程序以温和的方式处理内存错误(例如,放弃受影响的对象) 这是KVM qemu使用的 模式。h]h(可以在全局和每个进程中控制) 一旦检测到错误,立即向应用程序发送SIGBUS这允许 应用程序以温和的方式处理内存错误(例如,放弃受影响的对象) 这是KVM qemu使用的 模式。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK=hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jphhhK?hjmhhubjq)}(h推迟处理 当应用程序运行到损坏的页面时,发送SIGBUS。这对不知道内存错误的应用程序来说是 最好的,默认情况下注意一些页面总是被当作late kill处理。 h](jw)}(h 推迟处理h]h 推迟处理}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhhhKChjubj)}(hhh]h)}(h当应用程序运行到损坏的页面时,发送SIGBUS。这对不知道内存错误的应用程序来说是 最好的,默认情况下注意一些页面总是被当作late kill处理。h]h当应用程序运行到损坏的页面时,发送SIGBUS。这对不知道内存错误的应用程序来说是 最好的,默认情况下注意一些页面总是被当作late kill处理。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKBhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jphhhKChjmhhubeh}(h]h ]h"]h$]h&]uh1jkhjLhhhhhNubeh}(h]id2ah ]h"]故障恢复模式ah$]h&]uh1hhhhhhhhK5ubh)}(hhh](h)}(h 用户控制h]h 用户控制}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKFubjl)}(hhh](jq)}(h-vm.memory_failure_recovery 参阅 sysctl.txt h](jw)}(hvm.memory_failure_recoveryh]hvm.memory_failure_recovery}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhhhKIhj%ubj)}(hhh]h)}(h参阅 sysctl.txth]h参阅 sysctl.txt}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKIhj7ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jphhhKIhj"ubjq)}(h4vm.memory_failure_early_kill 全局启用early kill h](jw)}(hvm.memory_failure_early_killh]hvm.memory_failure_early_kill}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhhhKLhjTubj)}(hhh]h)}(h全局启用early killh]h全局启用early kill}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKLhjfubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jphhhKLhj"hhubjq)}(hX1PR_MCE_KILL 设置early/late kill mode/revert 到系统默认值。 arg1: PR_MCE_KILL_CLEAR: 恢复到系统默认值 arg1: PR_MCE_KILL_SET: arg2定义了线程特定模式 PR_MCE_KILL_EARLY: Early kill PR_MCE_KILL_LATE: Late kill PR_MCE_KILL_DEFAULT 使用系统全局默认值 注意,如果你想有一个专门的线程代表进程处理SIGBUS(BUS_MCEERR_AO),你应该在 指定线程上调用prctl(PR_MCE_KILL_EARLY)。否则,SIGBUS将被发送到主线程。 h](jw)}(h PR_MCE_KILLh]h PR_MCE_KILL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhhhK^hjubj)}(hhh](h)}(h7设置early/late kill mode/revert 到系统默认值。h]h7设置early/late kill mode/revert 到系统默认值。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKOhjubjl)}(hhh](jq)}(h1arg1: PR_MCE_KILL_CLEAR: 恢复到系统默认值h](jw)}(harg1: PR_MCE_KILL_CLEAR:h]harg1: PR_MCE_KILL_CLEAR:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhhhKQhjubj)}(hhh]h)}(h恢复到系统默认值h]h恢复到系统默认值}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKRhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jphhhKQhjubjq)}(harg1: PR_MCE_KILL_SET: arg2定义了线程特定模式 PR_MCE_KILL_EARLY: Early kill PR_MCE_KILL_LATE: Late kill PR_MCE_KILL_DEFAULT 使用系统全局默认值 h](jw)}(harg1: PR_MCE_KILL_SET:h]harg1: PR_MCE_KILL_SET:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhhhK[hjubj)}(hhh](h)}(harg2定义了线程特定模式h]harg2定义了线程特定模式}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKThjubjl)}(hhh](jq)}(hPR_MCE_KILL_EARLY: Early killh](jw)}(hPR_MCE_KILL_EARLY:h]hPR_MCE_KILL_EARLY:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhhhKVhjubj)}(hhh]h)}(h Early killh]h Early kill}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKWhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jphhhKVhjubjq)}(hPR_MCE_KILL_LATE: Late killh](jw)}(hPR_MCE_KILL_LATE:h]hPR_MCE_KILL_LATE:}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhhhKXhj-ubj)}(hhh]h)}(h Late killh]h Late kill}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKYhj?ubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jphhhKXhjubjq)}(h0PR_MCE_KILL_DEFAULT 使用系统全局默认值 h](jw)}(hPR_MCE_KILL_DEFAULTh]hPR_MCE_KILL_DEFAULT}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhhhK[hj\ubj)}(hhh]h)}(h使用系统全局默认值h]h使用系统全局默认值}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK[hjnubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jphhhK[hjubeh}(h]h ]h"]h$]h&]uh1jkhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jphhhK[hjubeh}(h]h ]h"]h$]h&]uh1jkhjubh)}(h注意,如果你想有一个专门的线程代表进程处理SIGBUS(BUS_MCEERR_AO),你应该在 指定线程上调用prctl(PR_MCE_KILL_EARLY)。否则,SIGBUS将被发送到主线程。h]h注意,如果你想有一个专门的线程代表进程处理SIGBUS(BUS_MCEERR_AO),你应该在 指定线程上调用prctl(PR_MCE_KILL_EARLY)。否则,SIGBUS将被发送到主线程。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK]hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jphhhK^hj"hhubjq)}(h#PR_MCE_KILL_GET 返回当前模式 h](jw)}(hPR_MCE_KILL_GETh]hPR_MCE_KILL_GET}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhhhKahjubj)}(hhh]h)}(h返回当前模式h]h返回当前模式}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKahjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jphhhKahj"hhubeh}(h]h ]h"]h$]h&]uh1jkhjhhhhhNubeh}(h]id3ah ]h"] 用户控制ah$]h&]uh1hhhhhhhhKFubh)}(hhh](h)}(h测试h]h测试}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKdubh bullet_list)}(hhh](h list_item)}(hNmadvise(MADV_HWPOISON, ....) (as root) - 在测试过程中Poison一个页面 h]h)}(hMmadvise(MADV_HWPOISON, ....) (as root) - 在测试过程中Poison一个页面h]hMmadvise(MADV_HWPOISON, ....) (as root) - 在测试过程中Poison一个页面}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKfhjubah}(h]h ]h"]h$]h&]uh1jhj hhhhhNubj)}(hX通过debugfs ``/sys/kernel/debug/hwpoison/`` hwpoison-inject模块 corrupt-pfn 在PFN处注入hwpoison故障,并echoed到这个文件。这做了一些早期过滤,以避 免在测试套件中损坏非预期页面。 unpoison-pfn 在PFN的Software-unpoison页面对应到这个文件。这样,一个页面可以再次被 复用。这只对Linux注入的故障起作用,对真正的内存故障不起作用。 注意这些注入接口并不稳定,可能会在不同的内核版本中发生变化 corrupt-filter-dev-major, corrupt-filter-dev-minor 只处理与块设备major/minor定义的文件系统相关的页面的内存故障。-1U是通 配符值。这应该只用于人工注入的测试。 corrupt-filter-memcg 限制注入到memgroup拥有的页面。由memcg的inode号指定。 Example:: 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)的情况下才会poison页面。 这允许对许多种类的页面进行压力测试。page_flags与/proc/kpageflags中的相 同。这些标志位在include/linux/kernel-page-flags.h中定义,并在 Documentation/admin-guide/mm/pagemap.rst中记录。 h](h)}(hC通过debugfs ``/sys/kernel/debug/hwpoison/`` hwpoison-inject模块h](h通过debugfs }(hj.hhhNhNubh)}(h``/sys/kernel/debug/hwpoison/``h]h/sys/kernel/debug/hwpoison/}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.ubh hwpoison-inject模块}(hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhhj*ubjl)}(hhh](jq)}(hcorrupt-pfn 在PFN处注入hwpoison故障,并echoed到这个文件。这做了一些早期过滤,以避 免在测试套件中损坏非预期页面。h](jw)}(h corrupt-pfnh]h corrupt-pfn}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhhhKkhjQubj)}(hhh]h)}(h在PFN处注入hwpoison故障,并echoed到这个文件。这做了一些早期过滤,以避 免在测试套件中损坏非预期页面。h]h在PFN处注入hwpoison故障,并echoed到这个文件。这做了一些早期过滤,以避 免在测试套件中损坏非预期页面。}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKkhjcubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jphhhKkhjNubjq)}(hunpoison-pfn 在PFN的Software-unpoison页面对应到这个文件。这样,一个页面可以再次被 复用。这只对Linux注入的故障起作用,对真正的内存故障不起作用。 h](jw)}(h unpoison-pfnh]h unpoison-pfn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhhhKohjubj)}(hhh]h)}(h在PFN的Software-unpoison页面对应到这个文件。这样,一个页面可以再次被 复用。这只对Linux注入的故障起作用,对真正的内存故障不起作用。h]h在PFN的Software-unpoison页面对应到这个文件。这样,一个页面可以再次被 复用。这只对Linux注入的故障起作用,对真正的内存故障不起作用。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKnhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jphhhKohjNubeh}(h]h ]h"]h$]h&]uh1jkhj*ubh)}(hW注意这些注入接口并不稳定,可能会在不同的内核版本中发生变化h]hW注意这些注入接口并不稳定,可能会在不同的内核版本中发生变化}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKqhj*ubjl)}(hhh](jq)}(hcorrupt-filter-dev-major, corrupt-filter-dev-minor 只处理与块设备major/minor定义的文件系统相关的页面的内存故障。-1U是通 配符值。这应该只用于人工注入的测试。 h](jw)}(h2corrupt-filter-dev-major, corrupt-filter-dev-minorh]h2corrupt-filter-dev-major, corrupt-filter-dev-minor}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhhhKuhjubj)}(hhh]h)}(h只处理与块设备major/minor定义的文件系统相关的页面的内存故障。-1U是通 配符值。这应该只用于人工注入的测试。h]h只处理与块设备major/minor定义的文件系统相关的页面的内存故障。-1U是通 配符值。这应该只用于人工注入的测试。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKthjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jphhhKuhjubjq)}(hXcorrupt-filter-memcg 限制注入到memgroup拥有的页面。由memcg的inode号指定。 Example:: 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 h](jw)}(hcorrupt-filter-memcgh]hcorrupt-filter-memcg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhhhKhjubj)}(hhh](h)}(hE限制注入到memgroup拥有的页面。由memcg的inode号指定。h]hE限制注入到memgroup拥有的页面。由memcg的inode号指定。}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKxhjubh)}(h Example::h]hExample:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKzhjubj )}(hX^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 pagesh]hX^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}hj&sbah}(h]h ]h"]h$]h&]jjuh1jhhhK|hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jphhhKhjubjq)}(hXlcorrupt-filter-flags-mask, corrupt-filter-flags-value 当指定时,只有在((page_flags & mask) == value)的情况下才会poison页面。 这允许对许多种类的页面进行压力测试。page_flags与/proc/kpageflags中的相 同。这些标志位在include/linux/kernel-page-flags.h中定义,并在 Documentation/admin-guide/mm/pagemap.rst中记录。 h](jw)}(h5corrupt-filter-flags-mask, corrupt-filter-flags-valueh]h5corrupt-filter-flags-mask, corrupt-filter-flags-value}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhhhKhj@ubj)}(hhh]h)}(hX5当指定时,只有在((page_flags & mask) == value)的情况下才会poison页面。 这允许对许多种类的页面进行压力测试。page_flags与/proc/kpageflags中的相 同。这些标志位在include/linux/kernel-page-flags.h中定义,并在 Documentation/admin-guide/mm/pagemap.rst中记录。h]hX5当指定时,只有在((page_flags & mask) == value)的情况下才会poison页面。 这允许对许多种类的页面进行压力测试。page_flags与/proc/kpageflags中的相 同。这些标志位在include/linux/kernel-page-flags.h中定义,并在 Documentation/admin-guide/mm/pagemap.rst中记录。}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjRubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jphhhKhjubeh}(h]h ]h"]h$]h&]uh1jkhj*ubeh}(h]h ]h"]h$]h&]uh1jhj hhhNhNubj)}(h架构特定的MCE注入器 x86 有 mce-inject, mce-test 在mce-test中的一些便携式hwpoison测试程序,见下文。 h](h)}(h架构特定的MCE注入器h]h架构特定的MCE注入器}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj{ubh)}(hx86 有 mce-inject, mce-testh]hx86 有 mce-inject, mce-test}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj{ubh)}(hC在mce-test中的一些便携式hwpoison测试程序,见下文。h]hC在mce-test中的一些便携式hwpoison测试程序,见下文。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj{ubeh}(h]h ]h"]h$]h&]uh1jhj hhhhhNubeh}(h]h ]h"]h$]h&]bullet*uh1j hhhKfhjhhubeh}(h]id4ah ]h"]测试ah$]h&]uh1hhhhhhhhKdubh)}(hhh](h)}(h引用h]h引用}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubjl)}(hhh](jq)}(h@http://halobates.de/mce-lc09-2.pdf 09年LinuxCon的概述演讲 h](jw)}(h"http://halobates.de/mce-lc09-2.pdfh]h reference)}(hjh]h"http://halobates.de/mce-lc09-2.pdf}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurijuh1jhjubah}(h]h ]h"]h$]h&]uh1jvhhhKhjubj)}(hhh]h)}(h09年LinuxCon的概述演讲h]h09年LinuxCon的概述演讲}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jphhhKhjubjq)}(hxgit://git.kernel.org/pub/scm/utils/cpu/mce/mce-test.git 测试套件(在tsrc中的hwpoison特定可移植测试)。 h](jw)}(h7git://git.kernel.org/pub/scm/utils/cpu/mce/mce-test.gith]h7git://git.kernel.org/pub/scm/utils/cpu/mce/mce-test.git}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhhhKhjubj)}(hhh]h)}(h?测试套件(在tsrc中的hwpoison特定可移植测试)。h]h?测试套件(在tsrc中的hwpoison特定可移植测试)。}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jphhhKhjhhubjq)}(hQgit://git.kernel.org/pub/scm/utils/cpu/mce/mce-inject.git x86特定的注入器 h](jw)}(h9git://git.kernel.org/pub/scm/utils/cpu/mce/mce-inject.gith]h9git://git.kernel.org/pub/scm/utils/cpu/mce/mce-inject.git}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhhhKhj=ubj)}(hhh]h)}(hx86特定的注入器h]hx86特定的注入器}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjOubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jphhhKhjhhubeh}(h]h ]h"]h$]h&]uh1jkhjhhhhhNubeh}(h]id5ah ]h"]引用ah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h限制h]h限制}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjzhhhhhKubj )}(hhh]j)}(h不是所有的页面类型都被支持,而且永远不会。大多数内核内部对象不能被恢 复,目前只有LRU页。 h]h)}(h不是所有的页面类型都被支持,而且永远不会。大多数内核内部对象不能被恢 复,目前只有LRU页。h]h不是所有的页面类型都被支持,而且永远不会。大多数内核内部对象不能被恢 复,目前只有LRU页。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubah}(h]h ]h"]h$]h&]j-uh1j hhhKhjzhhubh)}(h--- Andi Kleen, 2009年10月h]h--- Andi Kleen, 2009年10月}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjzhhubeh}(h]id6ah ]h"]限制ah$]h&]uh1hhhhhhhhKubeh}(h]hwpoisonah ]h"]hwpoisonah$]h&]uh1hhhhhhhhK ubeh}(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_handlerjerror_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}(jjjIjFjj jjjjjwjtjju nametypes}(jjIjjjjwjuh}(jhjFhj jLjjjjjtjjjzu footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}jKsRparse_messages]hsystem_message)}(hhh]h)}(h`Possible incomplete section title. Treating the overline as ordinary text because it's so short.h]hbPossible incomplete section title. Treating the overline as ordinary text because it’s so short.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjRubah}(h]h ]h"]h$]h&]levelKtypeINFOlineKsourcehuh1jPhjzhhhhhNubatransform_messages] transformerN include_log] decorationNhhub.