> For the complete documentation index, see [llms.txt](https://book.bsdcn.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://book.bsdcn.org/man/man4/mca.4.md).

# mca.4

`mca` — 机器校验架构

## 名称

`mca`

## 描述

`mca` 子系统提供对 x86 机器校验架构（Machine Check Architecture）的支持。CPU 使用此架构报告各种硬件问题，从可纠正错误到不可纠正的致命错误。`mca` 子系统处理 CPU 报告的错误，并根据用户提供的配置进行记录。

`mca` 子系统会自动编译进每个 x86 内核。

## 日志记录

默认情况下，每条消息会记录到四个位置：

* 控制台
* 系统日志（使用 `LOG_KERN` syslog(3) 设施）
* 内核中的事件记录缓存
* 统计数组

管理员可以使用 `hw.mca.uselog` [sysctl(8)](/man/man8/sysctl.8.md) 或可调参数设置来禁用非致命错误的控制台日志记录。致命错误始终会记录到控制台。

可以使用 `hw.mca.records` [sysctl(8)](/man/man8/sysctl.8.md) 节点从用户空间访问内核中的事件记录缓存。默认情况下，内核中的事件记录缓存会无限制增长，并包含自系统引导以来接收到的所有 `mca` 事件的记录。可以使用 `hw.mca.maxcount` [sysctl(8)](/man/man8/sysctl.8.md) 或可调参数设置来限制缓存（此时它将变为环形缓冲区）或完全禁用缓存。

可以使用 `hw.mca.stats` [sysctl(8)](/man/man8/sysctl.8.md) 节点检索统计数组。

## SYSCTL 变量

该子系统具有多个配置选项，用于控制事件的处理和记录方式。这些选项通过 [sysctl(8)](/man/man8/sysctl.8.md) 变量或可调参数进行配置。这些设置控制诸如日志目标、事件限制和采样等内容。这些设置直接影响日志的完整性以及处理 `mca` 事件的性能影响。系统管理员可能需要审查这些设置并进行修改，以在其环境中获得适当的行为。

`#include <x86/mca.h>`

`#include <x86/mca.h>`

**`hw.mca.enabled`** （仅可作为可调参数设置。）如果设置为 0，CPU 不会被配置为向内核发送 `mca` 消息。默认值为 1（启用）。

**`hw.mca.log_corrected`** （可作为可调参数或 sysctl 设置。）如果启用，已纠正的消息会记录到控制台、syslog、内核事件缓存和统计数组中（受控制这些设施的单独配置约束）。如果禁用，已纠正的消息仅记录到内核事件缓存中（受控制该设施的单独配置约束）。默认值为 1（启用）。

**`hw.mca.intel6h_HSD131`** （仅可作为可调参数设置。）此设置启用对某些 Intel 桌面 Haswell CPU 可能报告的良性已纠正奇偶校验错误的变通方案。（名称“HSD131”来源于 Intel 关于此问题的勘误报告名称。）默认值为 0（禁用）。

**`hw.mca.amd10h_L1TP`** （仅可作为可调参数设置。）在某些 AMD CPU 上启用一级 TLB 奇偶校验错误的日志记录。此选项对其他 CPU 没有影响。默认值为 1（启用）。

**`hw.mca.erratum383`** （仅可作为可调参数设置。）此设置启用对 AMD Family 10h CPU 上 Erratum 383 的变通方案。该勘误改变了页面提升或降级为超级页（super-pages）的方式。在受影响的 AMD CPU 上，`hw.mca.amd10h_L1TP` 或 `hw.mca.erratum383` 必须有一个开启。如果两者都关闭，系统将在引导时动态启用 `hw.mca.erratum383`。默认值为 0（禁用）。

**`hw.mca.uselog`** （可作为可调参数或 sysctl 设置。）如果启用，系统会将有关非致命 `mca` 事件的消息发送到 syslog 而不是控制台。如果禁用，系统会将有关非致命 `mca` 事件的消息同时发送到 syslog 和控制台。致命事件始终记录到控制台。默认值为 false（禁用）。

**`hw.mca.stats`** （只读 sysctl。）返回一个包含 `MCA_T_COUNT` 个 uint64\_t 值的数组。`enum mca_stat_types` 定义提供了 `MCA_T_COUNT` 的值以及各种事件类型的索引值。

**`hw.mca.log_interval`** （可作为可调参数或 sysctl 设置。）设置记录可纠正错误之间的最短时间（以秒为单位）。速率限制仅在系统记录了一定数量的同类型错误后才会应用。其目的是减少系统看到并尝试记录突发相似错误所带来的影响（尤其是打印到控制台时）。如果此设置为 0，则不应用速率限制。默认值为 0（无速率限制）。

**`hw.mca.cmc_throttle`** （可作为可调参数或 sysctl 设置。仅在启用 [apic(4)](/man/man4/apic.4.md) 支持且硬件支持 CMC 中断节流时可用。）设置节流 CMC 中断的最长时间（以秒为单位）。在正常操作中，系统会在事件发生时尽快尝试接收 CMC 中断。但是，如果在短时间内发生高频率的事件，系统将开始节流 CMC 中断。当事件继续以高速率发生时，系统将逐渐增加节流间隔，直到达到 `hw.mca.cmc_throttle` 设置。默认值为 60 秒。

**`hw.mca.count`** （只读 sysctl。）返回内核缓存中当前的 `mca` 记录数。这可用于确定通过 `hw.mca.records` [sysctl(8)](/man/man8/sysctl.8.md) 接口可读取多少条记录。也可用于监控内核记录缓存所使用的内存量。

**`hw.mca.maxcount`** （可作为可调参数或 sysctl 设置。）此设置控制 `mca` 记录的内核缓存的大小和行为。如果设置为 -1，内核缓存无限制增长，并包含自引导或上次更改 `hw.mca.maxcount` 设置以来的完整记录事件。如果设置为 0，则禁用内核缓存。如果设置为正整数，内核缓存将作为环形缓冲区运行，条目数由该设置定义。默认值为 -1（无限制）。

**`hw.mca.interval`** （可作为可调参数或 sysctl 设置。）此设置控制内核主动扫描新 `mca` 事件的频率（以秒为单位）。在许多情况下，CPU 会发送中断以通知新事件。但是，在某些情况下，定期扫描事件会发现新事件。默认值为 300 秒。

**`hw.mca.force_scan`** （仅可作为 sysctl 设置。）将此设置为任何非零值将强制立即扫描 `mca` 事件。将其设置为零无效。这在功能上是一个只写设置。当前值始终为 0，即使在扫描运行时也是如此。默认值为 0（未请求扫描）。

**`hw.mca.records.n`** （只读 sysctl。）用于将 `mca` 记录从内核缓存复制到用户空间进程。[sysctl(8)](/man/man8/sysctl.8.md) 节点中的 `n` 值是内核缓存中的整数索引。（或者换个说法，“新”值描述了内核应跳过多少条记录才能找到所需记录。）返回值是 `struct mca_record`，定义于

## 加载器可调参数

可调参数可在引导内核之前在 [loader(8)](/man/man8/loader.8.md) 提示符下设置，或存储在 **`/boot/loader.conf`** 中。所有可调参数都有对应的 [sysctl(8)](/man/man8/sysctl.8.md) 条目。可调参数已在 SYSCTL 变量章节中列出。

## 兼容性

`mca` 仅在 x86 系统上可用。

## 参见

loader.conf(5), [sysctl(8)](/man/man8/sysctl.8.md), syslogd(8)

## 作者

`mca` 子系统最初由 John Baldwin <jhb@FreeBSD.org> 编写。

本手册页由 Jonathan Looney <jtl@FreeBSD.org> 编写。


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://book.bsdcn.org/man/man4/mca.4.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
