“在低内存中检测到内存损坏”内核消息?

6 power-management suspend linux-kernel

我在低内存消息中检测到一些内存损坏。我已经在此处阅读了相关内容,但恐怕我无法真正从讨论中得出任何结论。当我暂停/恢复时确实会发生这种情况,但与其他遇到类似问题的人不同,我没有 Broadcom wifi 卡。这都是 Marvell 以太网,没有 wifi。

这是一个桌面塔,具有:

Linux gentoomyuser3x86_64 3.10.25-gentoo #1 SMP 2014 x86_64 Intel(R) Core(TM)2 Quad CPU Q6600 @ 2.40GHz GenuineIntel GNU/Linux

这是日志输出:

[12960.735034] Corrupted low memory at ffff88000000fff0 (fff0 phys) = 40000000000000
[12960.735035] Corrupted low memory at ffff88000000fff8 (fff8 phys) = 250c60840020
[12960.735036] ------------[ cut here ]------------
[12960.735042] WARNING: at arch/x86/kernel/check.c:140 check_for_bios_corruption+0x10f/0x120()
[12960.735043] Memory corruption detected in low memory
[12960.735056] Modules linked in: nouveau cfbfillrect cfbimgblt video mxm_wmi wmi cfbcopyarea ttm fbcon bitblit softcursor font tileblit drm_kms_helper backlight fb fbdev fuse
[12960.735060] CPU: 0 PID: 9096 Comm: kworker/0:1 Not tainted 3.10.25-gentoo #1
[12960.735061] Hardware name: System manufacturer Maximus Formula/Maximus Formula, BIOS 1403    09/10/2009
[12960.735064] Workqueue: events check_corruption
[12960.735068]  0000000000000009 ffff8801165fdcf8 ffffffff8157431b ffff8801165fdd38
[12960.735070]  ffffffff81045e9b 0000000000000000 0000000000000000 ffff880000010000
[12960.735073]  ffffffff819b20b0 0000000000000001 ffff880000000000 ffff8801165fdd98
[12960.735074] Call Trace:
[12960.735079]  [<ffffffff8157431b>] dump_stack+0x19/0x1b
[12960.735082]  [<ffffffff81045e9b>] warn_slowpath_common+0x6b/0xa0
[12960.735085]  [<ffffffff81045f71>] warn_slowpath_fmt+0x41/0x50
[12960.735087]  [<ffffffff8102bc2f>] check_for_bios_corruption+0x10f/0x120
[12960.735090]  [<ffffffff8102bc49>] check_corruption+0x9/0x40
[12960.735094]  [<ffffffff81061f8f>] process_one_work+0x17f/0x420
[12960.735096]  [<ffffffff81062679>] worker_thread+0x119/0x370
[12960.735099]  [<ffffffff81062560>] ? rescuer_thread+0x2f0/0x2f0
[12960.735102]  [<ffffffff81068c4b>] kthread+0xbb/0xc0
[12960.735105]  [<ffffffff81068b90>] ? kthread_create_on_node+0x120/0x120
[12960.735109]  [<ffffffff815819ac>] ret_from_fork+0x7c/0xb0
[12960.735111]  [<ffffffff81068b90>] ? kthread_create_on_node+0x120/0x120
[12960.735113] ---[ end trace a3687665afd39e38 ]---
Run Code Online (Sandbox Code Playgroud)

如果需要,详细lspci -v和一些lshw输出可以更好地理解我的设置:

00:00.0 Host bridge: Intel Corporation 82X38/X48 Express DRAM Controller (rev 01)
    Subsystem: ASUSTeK Computer Inc. Device 8295
    Flags: bus master, fast devsel, latency 0
    Capabilities: [e0] Vendor Specific Information: Len=0c <?>

00:06.0 PCI bridge: Intel Corporation 82X38/X48 Express Host-Secondary PCI Express Bridge (rev 01) (prog-if 00 [Normal decode])
    Flags: bus master, fast devsel, latency 0
    Bus: primary=00, secondary=01, subordinate=01, sec-latency=0
    I/O behind bridge: 0000d000-0000dfff
    Memory behind bridge: fd000000-feafffff
    Prefetchable memory behind bridge: 00000000f0000000-00000000f9ffffff
    Capabilities: [88] Subsystem: Intel Corporation Device 0000
    Capabilities: [80] Power Management version 3
    Capabilities: [90] MSI: Enable+ Count=1/1 Maskable- 64bit-
    Capabilities: [a0] Express Root Port (Slot+), MSI 00
    Capabilities: [100] Virtual Channel
    Capabilities: [140] Root Complex Link
    Kernel driver in use: pcieport

00:1a.0 USB controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #4 (rev 02) (prog-if 00 [UHCI])
    Subsystem: ASUSTeK Computer Inc. P5K PRO Motherboard
    Flags: bus master, medium devsel, latency 0, IRQ 16
    I/O ports at c800 [size=32]
    Capabilities: [50] PCI Advanced Features
    Kernel driver in use: uhci_hcd

00:1a.1 USB controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #5 (rev 02) (prog-if 00 [UHCI])
    Subsystem: ASUSTeK Computer Inc. P5K PRO Motherboard
    Flags: bus master, medium devsel, latency 0, IRQ 21
    I/O ports at c880 [size=32]
    Capabilities: [50] PCI Advanced Features
    Kernel driver in use: uhci_hcd

00:1a.2 USB controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #6 (rev 02) (prog-if 00 [UHCI])
    Subsystem: ASUSTeK Computer Inc. P5K PRO Motherboard
    Flags: bus master, medium devsel, latency 0, IRQ 18
    I/O ports at cc00 [size=32]
    Capabilities: [50] PCI Advanced Features
    Kernel driver in use: uhci_hcd

00:1a.7 USB controller: Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #2 (rev 02) (prog-if 20 [EHCI])
    Subsystem: ASUSTeK Computer Inc. P5K PRO Motherboard
    Flags: bus master, medium devsel, latency 0, IRQ 18
    Memory at fcfffc00 (32-bit, non-prefetchable) [size=1K]
    Capabilities: [50] Power Management version 2
    Capabilities: [58] Debug port: BAR=1 offset=00a0
    Capabilities: [98] PCI Advanced Features
    Kernel driver in use: ehci-pci

00:1b.0 Audio device: Intel Corporation 82801I (ICH9 Family) HD Audio Controller (rev 02)
    Subsystem: ASUSTeK Computer Inc. Device 8277
    Flags: bus master, fast devsel, latency 0, IRQ 45
    Memory at fcff8000 (64-bit, non-prefetchable) [size=16K]
    Capabilities: [50] Power Management version 2
    Capabilities: [60] MSI: Enable+ Count=1/1 Maskable- 64bit+
    Capabilities: [70] Express Root Complex Integrated Endpoint, MSI 00
    Capabilities: [100] Virtual Channel
    Capabilities: [130] Root Complex Link
    Kernel driver in use: snd_hda_intel

00:1c.0 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 1 (rev 02) (prog-if 00 [Normal decode])
    Flags: bus master, fast devsel, latency 0
    Bus: primary=00, secondary=03, subordinate=03, sec-latency=0
    I/O behind bridge: 00001000-00001fff
    Memory behind bridge: fa000000-fa3fffff
    Prefetchable memory behind bridge: 00000000fbf00000-00000000fbffffff
    Capabilities: [40] Express Root Port (Slot+), MSI 00
    Capabilities: [80] MSI: Enable+ Count=1/1 Maskable- 64bit-
    Capabilities: [90] Subsystem: ASUSTeK Computer Inc. P5K PRO Motherboard
    Capabilities: [a0] Power Management version 2
    Capabilities: [100] Virtual Channel
    Capabilities: [180] Root Complex Link
    Kernel driver in use: pcieport

00:1c.2 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 3 (rev 02) (prog-if 00 [Normal decode])
    Flags: bus master, fast devsel, latency 0
    Bus: primary=00, secondary=02, subordinate=02, sec-latency=0
    I/O behind bridge: 0000e000-0000efff
    Memory behind bridge: feb00000-febfffff
    Prefetchable memory behind bridge: 00000000fa400000-00000000fa5fffff
    Capabilities: [40] Express Root Port (Slot+), MSI 00
    Capabilities: [80] MSI: Enable+ Count=1/1 Maskable- 64bit-
    Capabilities: [90] Subsystem: ASUSTeK Computer Inc. Device 8277
    Capabilities: [a0] Power Management version 2
    Capabilities: [100] Virtual Channel
    Capabilities: [180] Root Complex Link
    Kernel driver in use: pcieport

00:1d.0 USB controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #1 (rev 02) (prog-if 00 [UHCI])
    Subsystem: ASUSTeK Computer Inc. P5K PRO Motherboard
    Flags: bus master, medium devsel, latency 0, IRQ 23
    I/O ports at c080 [size=32]
    Capabilities: [50] PCI Advanced Features
    Kernel driver in use: uhci_hcd

00:1d.1 USB controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #2 (rev 02) (prog-if 00 [UHCI])
    Subsystem: ASUSTeK Computer Inc. P5K PRO Motherboard
    Flags: bus master, medium devsel, latency 0, IRQ 19
    I/O ports at c400 [size=32]
    Capabilities: [50] PCI Advanced Features
    Kernel driver in use: uhci_hcd

00:1d.2 USB controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #3 (rev 02) (prog-if 00 [UHCI])
    Subsystem: ASUSTeK Computer Inc. P5K PRO Motherboard
    Flags: bus master, medium devsel, latency 0, IRQ 18
    I/O ports at c480 [size=32]
    Capabilities: [50] PCI Advanced Features
    Kernel driver in use: uhci_hcd

00:1d.7 USB controller: Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #1 (rev 02) (prog-if 20 [EHCI])
    Subsystem: ASUSTeK Computer Inc. P5K PRO Motherboard
    Flags: bus master, medium devsel, latency 0, IRQ 23
    Memory at fcfff800 (32-bit, non-prefetchable) [size=1K]
    Capabilities: [50] Power Management version 2
    Capabilities: [58] Debug port: BAR=1 offset=00a0
    Capabilities: [98] PCI Advanced Features
    Kernel driver in use: ehci-pci

00:1e.0 PCI bridge: Intel Corporation 82801 PCI Bridge (rev 92) (prog-if 01 [Subtractive decode])
    Flags: bus master, fast devsel, latency 0
    Bus: primary=00, secondary=04, subordinate=04, sec-latency=32
    Capabilities: [50] Subsystem: ASUSTeK Computer Inc. P5K PRO Motherboard

00:1f.0 ISA bridge: Intel Corporation 82801IR (ICH9R) LPC Interface Controller (rev 02)
    Subsystem: ASUSTeK Computer Inc. P5K PRO Motherboard
    Flags: bus master, medium devsel, latency 0
    Capabilities: [e0] Vendor Specific Information: Len=0c <?>

00:1f.2 SATA controller: Intel Corporation 82801IR/IO/IH (ICH9R/DO/DH) 6 port SATA Controller [AHCI mode] (rev 02) (prog-if 01 [AHCI 1.0])
    Subsystem: ASUSTeK Computer Inc. Device 8277
    Flags: bus master, 66MHz, medium devsel, latency 0, IRQ 43
    I/O ports at bc00 [size=8]
    I/O ports at b880 [size=4]
    I/O ports at b800 [size=8]
    I/O ports at b480 [size=4]
    I/O ports at b400 [size=32]
    Memory at fcffe800 (32-bit, non-prefetchable) [size=2K]
    Capabilities: [80] MSI: Enable+ Count=1/16 Maskable- 64bit-
    Capabilities: [70] Power Management version 3
    Capabilities: [a8] SATA HBA v1.0
    Capabilities: [b0] PCI Advanced Features
    Kernel driver in use: ahci

00:1f.3 SMBus: Intel Corporation 82801I (ICH9 Family) SMBus Controller (rev 02)
    Subsystem: ASUSTeK Computer Inc. P5K PRO Motherboard
    Flags: medium devsel, IRQ 18
    Memory at fcfff400 (64-bit, non-prefetchable) [size=256]
    I/O ports at 0400 [size=32]

01:00.0 VGA compatible controller: NVIDIA Corporation GF119 [GeForce GT 610] (rev a1) (prog-if 00 [VGA controller])
    Subsystem: Gigabyte Technology Co., Ltd Device 3546
    Flags: bus master, fast devsel, latency 0, IRQ 16
    Memory at fd000000 (32-bit, non-prefetchable) [size=16M]
    Memory at f0000000 (64-bit, prefetchable) [size=128M]
    Memory at f8000000 (64-bit, prefetchable) [size=32M]
    I/O ports at dc00 [size=128]
    Expansion ROM at fea00000 [disabled] [size=512K]
    Capabilities: [60] Power Management version 3
    Capabilities: [68] MSI: Enable- Count=1/1 Maskable- 64bit+
    Capabilities: [78] Express Endpoint, MSI 00
    Capabilities: [b4] Vendor Specific Information: Len=14 <?>
    Capabilities: [100] Virtual Channel
    Capabilities: [128] Power Budgeting <?>
    Capabilities: [600] Vendor Specific Information: ID=0001 Rev=1 Len=024 <?>
    Kernel driver in use: nouveau
    Kernel modules: nouveau

01:00.1 Audio device: NVIDIA Corporation GF119 HDMI Audio Controller (rev a1)
    Subsystem: Gigabyte Technology Co., Ltd Device 3546
    Flags: bus master, fast devsel, latency 0, IRQ 17
    Memory at feafc000 (32-bit, non-prefetchable) [size=16K]
    Capabilities: [60] Power Management version 3
    Capabilities: [68] MSI: Enable- Count=1/1 Maskable- 64bit+
    Capabilities: [78] Express Endpoint, MSI 00
    Kernel driver in use: snd_hda_intel

02:00.0 Ethernet controller: Marvell Technology Group Ltd. 88E8056 PCI-E Gigabit Ethernet Controller (rev 12)
    Subsystem: ASUSTeK Computer Inc. Motherboard
    Flags: bus master, fast devsel, latency 0, IRQ 44
    Memory at febfc000 (64-bit, non-prefetchable) [size=16K]
    I/O ports at e800 [size=256]
    Expansion ROM at febc0000 [disabled] [size=128K]
    Capabilities: [48] Power Management version 3
    Capabilities: [50] Vital Product Data
    Capabilities: [5c] MSI: Enable+ Count=1/1 Maskable- 64bit+
    Capabilities: [e0] Express Legacy Endpoint, MSI 00
    Capabilities: [100] Advanced Error Reporting
    Kernel driver in use: sky2

lshw

        gentoomyuser3x86_64          
        description: Desktop Computer
        product: Maximus Formula (To Be Filled By O.E.M.)
        vendor: System manufacturer
        version: System Version
        serial: System Serial Number
        width: 64 bits
        capabilities: smbios-2.4 dmi-2.4
        configuration: boot=normal chassis=desktop family=To Be Filled By O.E.M. sku=To Be Filled By O.E.M. uuid=00020003-0004-0005-0006-000700080009
      *-core
           description: Motherboard
           product: Maximus Formula
           vendor: ASUSTeK Computer INC.
           physical id: 0
           version: Rev 1.xx
           serial: MB-1234567890
           slot: To Be Filled By O.E.M.
         *-firmware
              description: BIOS
              vendor: American Megatrends Inc.
              physical id: 0
              version: 1403
              date: 09/10/2009
              size: 64KiB
              capacity: 1984KiB
              capabilities: isa pci pnp apm upgrade shadowing escd cdboot bootselect socketedrom edd int13floppy1200 int13floppy720 int13floppy2880 int5printscreen int9keyboard int14serial int17printer int10video acpi usb ls120boot zipboot biosbootspecification
         *-cpu
              description: CPU
              product: Intel(R) Core(TM)2 Quad CPU    Q6600  @ 2.40GHz
              vendor: Intel Corp.
              physical id: 4
              bus info: cpu@0
              version: Intel(R) Core(TM)2 Quad CPU Q6600 @ 2.40GHz
              serial: To Be Filled By O.E.M.
              slot: LGA775
              size: 2394MHz
              capacity: 3800MHz
              width: 64 bits
              clock: 266MHz
              capabilities: fpu fpu_exception wp vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx x86-64 constant_tsc arch_perfmon pebs bts rep_good nopl aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm lahf_lm dtherm tpr_shadow vnmi flexpriority cpufreq
            *-cache:0
                 description: L1 cache
                 physical id: 5
                 slot: L1-Cache
                 size: 128KiB
                 capacity: 128KiB
                 capabilities: internal write-back data
            *-cache:1
                 description: L2 cache
                 physical id: 6
                 slot: L2-Cache
                 size: 8MiB
                 capacity: 8MiB
                 capabilities: internal write-back instruction
Run Code Online (Sandbox Code Playgroud)

这是 Gentoo 但在 Arch 上,我可以找到这个。powerdown在 Arch 的某个地方提到了一个允许“正常”暂停/恢复的包。我暂停:

echo -n "mem" > /sys/power/state
Run Code Online (Sandbox Code Playgroud)

那么我应该担心什么吗,我暂停系统的方式有什么问题吗?

正如建议的那样,我已经使用memtest86+运行了一次完整的传递(我认为 15 分钟,12 次测试)并且没有出现错误。这是 2x2gb 海盗船。这个钻机被烧毁并且非常稳定。我已经为此编译了 1000 多个 Gentoo 包。


进一步测试

在社区成员确定已部署的内核补丁完全解决此错误(还原“epoll:使用 freezable 阻塞调用”)后,我尝试将该补丁应用于我的源代码。它原来我已经安装了补丁!?

我还安装了suspend包含s2ram等的包。这个实用程序在挂起计算机的方式上似乎没有什么不同。我比较了使用 s2ram 和使用我使用的命令的挂起和唤醒事件的日志,没有区别。我的结论是,在这方面使用echo -n "mem" > /sys/power/state.

我还验证了ethtool局域网唤醒被禁用(支持唤醒:pg/唤醒:d)所以如果我理解正确,它应该不会干扰电源事件。

可能是bios里的设置?或者 bios 不再更新并将触发该异常,我们将不得不接受它。

Mik*_*nen 5

默认情况下,Linux 内核为 BIOS 保留最低 64K 的系统内存,并反复扫描该部分内存以查找意外更改。如果后台扫描进程注意到内存被意外更改(损坏),它会向内核日志发送一些类似内容的垃圾邮件

Corrupted low memory at <virtual address> (<address> phys) = <memory contents after corruption>
...
Memory corruption detected in low memory
...
Hardware name: <BIOS info>
Run Code Online (Sandbox Code Playgroud)

virtual address指向损坏内存的虚拟地址在哪里。这实际上可以是任何东西,除非您知道某些其他软件正在使用所述地址,否则您可以放心地忽略它。身体address是有趣的部分。只要该地址(始终以十六进制打印)低于 64K(2^16 字节),您就可以了,并且消息确实想说

主板制造商不称职,系统 BIOS 正在写入低内存区域(0-64K 物理内存),而没有使用 ACPI 内存表保留该区域。别担心,Linux 内核预料到了这个错误,并没有在那里存储任何重要的东西。如果您的 BIOS 得到修复,您也可以使用实际 RAM 的最后 64K。但是,您可能需要重新编译内核以禁用 BIOS 存在此错误的预期。

内核开发人员试图收集已知错误 BIOS 版本的列表,并且仅在 BIOS 已知存在错误时才禁用最低 64K RAM 的使用。在实践中,事实证明 BIOS 制造商的能力不足,因此创建一个已知良好 BIOS 版本的列表更有意义。那个列表会短得多。从长远来看,将最低的 64K 内存声明为总是坏的并忽略整个混乱会容易得多。这将导致所有 i386/amd64 兼容的 linux 计算机丢失 64K 的 RAM,但会允许开发人员将时间花在更高效的事情上。

如果你知道你的 BIOS 是坏的(上面的警告被发送到内核日志)并且只想跳过对坏 BIOS 的扫描并继续保留内存,你可以保留该内存区域并禁用扫描。只需添加以下内核标志:

memmap=64K$0 memory_corruption_check=0
Run Code Online (Sandbox Code Playgroud)

该标志memmap在物理地址 0(物理 RAM 的开始)保留 64K 的 RAM,标志memory_corruption_check禁用后台扫描损坏。

如果您的系统有意外的 RAM 损坏并且您怀疑 BIOS,则添加memmap=1024K$0将在 Linux 内核的物理 RAM 开始时保留 1MB。有传言说 Windows 10 默认会这样做,所以如果未来的 BIOS 版本在前 1MB 中全部损坏,如果损坏不会导致使用 Windows 10 出现任何问题,我不会感到惊讶。


slm*_*slm 3

我怀疑这实际上是内存损坏,而是当系统挂起/恢复或内核本身出现问题时,进程没有正确挂起。

为此,我发现了这个内核错误,听起来可能与之相关:Bug 61781 - Userspace memory crash after suspemd-to-RAM - Bisected to: 1c441e9 "epoll: use freezableblocking call"。

已经开发了一个补丁,所以我会确保您的内核包含该补丁。