64ビットLinuxは3〜32 GBのRAMを認識しません。

64ビットLinuxは3〜32 GBのRAMを認識しません。

私の問題は、欠陥のあるメモリモジュールが原因で発生しました。そしてカーネルバイナリが破損している可能性が高いです。


私は基本的に新しいハードウェアでコンピュータを起動しました。私は以前に何も変更せずにDebian 6.0 AMD64を実行してきましたが(文字通り、古いマザーボードからハードドライブを取り出して新しいマザーボードに再接続しました)、奇妙なことがわかりました。

  • 実際には4 x 8GBのRAMがインストールされています。
  • UEFI/BIOS 設定で 16383MB RAM が報告される
  • Linuxでは、free -m2985MBのRAMが報告されます。

2985MBは純粋に偶然だと思うには3GBに近すぎるようですが、明らかに64ビットカーネルuname -rで印刷されます2.6.32-5-amd64。これは私が使用しているシステムドライブにインストールされているすべてのカーネルです。新しいマザーボードはAsus M5A97 Proで、DDR3スロットが4つあり、8GBモジュールをサポートしているそうです。メモリモジュール自体は同じで、4つのCorsair XMS3 PC12800 8GBを一緒に購入しました。

UEFI設定を詳しく見たことがありませんでしたが、私は見てきましたが、RAMをたくさんアクティブにするために変更する必要はありませんでした。

編集する:実際に64ビットを実行していることをさらに確認してください。

# file `which free`
/usr/bin/free: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped
#

どうなりますか?私は何をすべきですか?

編集2:要求に応じてdmesg、dmidecode、およびmeminfo。現時点ではシステムに物理的にアクセスできないため、一部のモジュールを取り出して動作するかどうかを確認するには、今夜待つ必要があります。 (dmidecodeは3 x 8 GBと空のDIMMスロットを報告します。また、カーネルのMTRRミスマッチメッセージに注意してください。その結果、13 GBの損失が発生し、これは少なくともマザーボードの自己報告に合計されます。)

# dmidecode --type memory
# dmidecode 2.9
SMBIOS 2.7 present.

Handle 0x0026, DMI type 16, 23 bytes
Physical Memory Array
        Location: System Board Or Motherboard
        Use: System Memory
        Error Correction Type: Multi-bit ECC
        Maximum Capacity: 32 GB
        Error Information Handle: Not Provided
        Number Of Devices: 4

Handle 0x0028, DMI type 17, 34 bytes
Memory Device
        Array Handle: 0x0026
        Error Information Handle: Not Provided
        Total Width: 64 bits
        Data Width: 64 bits
        Size: 8192 MB
        Form Factor: DIMM
        Set: None
        Locator: DIMM0
        Bank Locator: BANK0
        Type: <OUT OF SPEC>
        Type Detail: Synchronous
        Speed: 1333 MHz (0.8 ns)
        Manufacturer: Manufacturer0
        Serial Number: SerNum0
        Asset Tag: AssetTagNum0
        Part Number: Array1_PartNumber0

Handle 0x002A, DMI type 17, 34 bytes
Memory Device
        Array Handle: 0x0026
        Error Information Handle: Not Provided
        Total Width: 64 bits
        Data Width: 64 bits
        Size: 8192 MB
        Form Factor: DIMM
        Set: None
        Locator: DIMM1
        Bank Locator: BANK1
        Type: <OUT OF SPEC>
        Type Detail: Synchronous
        Speed: 1333 MHz (0.8 ns)
        Manufacturer: Manufacturer1
        Serial Number: SerNum1
        Asset Tag: AssetTagNum1
        Part Number: Array1_PartNumber1

Handle 0x002C, DMI type 17, 34 bytes
Memory Device
        Array Handle: 0x0026
        Error Information Handle: Not Provided
        Total Width: 64 bits
        Data Width: 64 bits
        Size: 8192 MB
        Form Factor: DIMM
        Set: None
        Locator: DIMM2
        Bank Locator: BANK2
        Type: <OUT OF SPEC>
        Type Detail: Synchronous
        Speed: 1333 MHz (0.8 ns)
        Manufacturer: Manufacturer2
        Serial Number: SerNum2
        Asset Tag: AssetTagNum2
        Part Number: Array1_PartNumber2

Handle 0x002E, DMI type 17, 34 bytes
Memory Device
        Array Handle: 0x0026
        Error Information Handle: Not Provided
        Total Width: Unknown
        Data Width: 64 bits
        Size: No Module Installed
        Form Factor: DIMM
        Set: None
        Locator: DIMM3
        Bank Locator: BANK3
        Type: Unknown
        Type Detail: Synchronous
        Speed: Unknown
        Manufacturer: Manufacturer3
        Serial Number: SerNum3
        Asset Tag: AssetTagNum3
        Part Number: Array1_PartNumber3
#
======================================================================
# cat /proc/meminfo
MemTotal:        3056820 kB
MemFree:         1470820 kB
Buffers:          390204 kB
Cached:           194660 kB
SwapCached:            0 kB
Active:           488024 kB
Inactive:         419096 kB
Active(anon):     231112 kB
Inactive(anon):    96660 kB
Active(file):     256912 kB
Inactive(file):   322436 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:                 8 kB
Writeback:             0 kB
AnonPages:        322320 kB
Mapped:            33012 kB
Shmem:              5472 kB
Slab:             613952 kB
SReclaimable:     597404 kB
SUnreclaim:        16548 kB
KernelStack:        2384 kB
PageTables:        19472 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     1528408 kB
Committed_AS:     621464 kB
VmallocTotal:   34359738367 kB
VmallocUsed:      294484 kB
VmallocChunk:   34359429080 kB
HardwareCorrupted:     0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:        9216 kB
DirectMap2M:     2054144 kB
DirectMap1G:     1048576 kB
#
======================================================================
# dmesg | grep -i memory
[    0.000000] WARNING: BIOS bug: CPU MTRRs don't cover all of memory, losing 13295MB of RAM.
[    0.000000] WARNING: at /tmp/buildd/linux-2.6-2.6.32/debian/build/source_amd64_none/arch/x86/kernel/cpu/mtrr/cleanup.c:1092 mtrr_trim_uncached_memory+0x2e6/0x311()
[    0.000000]  [<ffffffff814f7f1e>] ? mtrr_trim_uncached_memory+0x2e6/0x311
[    0.000000]  [<ffffffff814f7f1e>] ? mtrr_trim_uncached_memory+0x2e6/0x311
[    0.000000]  [<ffffffff814f7f1e>] ? mtrr_trim_uncached_memory+0x2e6/0x311
[    0.000000] initial memory mapped : 0 - 20000000
[    0.000000] init_memory_mapping: 0000000000000000-00000000bdf00000
[    0.000000] PM: Registered nosave memory: 000000000009d000 - 000000000009e000
[    0.000000] PM: Registered nosave memory: 000000000009e000 - 00000000000a0000
[    0.000000] PM: Registered nosave memory: 00000000000a0000 - 00000000000e0000
[    0.000000] PM: Registered nosave memory: 00000000000e0000 - 0000000000100000
[    0.000000] PM: Registered nosave memory: 00000000bd94d000 - 00000000bd99c000
[    0.000000] PM: Registered nosave memory: 00000000bd99c000 - 00000000bd9a6000
[    0.000000] PM: Registered nosave memory: 00000000bd9a6000 - 00000000bdade000
[    0.000000] PM: Registered nosave memory: 00000000bdade000 - 00000000bdaef000
[    0.000000] PM: Registered nosave memory: 00000000bdaef000 - 00000000bdb02000
[    0.000000] PM: Registered nosave memory: 00000000bdb02000 - 00000000bdb04000
[    0.000000] PM: Registered nosave memory: 00000000bdb04000 - 00000000bdb0d000
[    0.000000] PM: Registered nosave memory: 00000000bdb0d000 - 00000000bdb13000
[    0.000000] PM: Registered nosave memory: 00000000bdb13000 - 00000000bdb75000
[    0.000000] PM: Registered nosave memory: 00000000bdb75000 - 00000000bdd78000
[    0.000000] Memory: 3046732k/3111936k available (3075k kernel code, 4728k absent, 60476k reserved, 1879k data, 584k init)
[    1.636730] Freeing initrd memory: 9501k freed
[    1.647370] Freeing unused kernel memory: 584k freed
[    4.876602] [TTM] Zone  kernel: Available graphics memory: 1528410 kiB.
[    4.876615] [drm] radeon: 256M of VRAM memory ready
[    4.876617] [drm] radeon: 512M of GTT memory ready.
[   25.571018] VBoxDrv: dbg - g_abExecMemory=ffffffffa051d6c0
#

e820をGreppingすると様々な範囲が表示され、最高値はe820 update range: 00000000bdf00000 - 000000043f000000 (usable) ==> (reserved)16GiBで.43f000000、3039MiBでbdf00000です。はいいいえ見て、これは偶然の一致です。

# dmesg | grep -i e820
[    0.000000]  BIOS-e820: 0000000000000000 - 000000000009d800 (usable)
[    0.000000]  BIOS-e820: 000000000009d800 - 00000000000a0000 (reserved)
[    0.000000]  BIOS-e820: 00000000000e0000 - 0000000000100000 (reserved)
[    0.000000]  BIOS-e820: 0000000000100000 - 00000000bd94d000 (usable)
[    0.000000]  BIOS-e820: 00000000bd94d000 - 00000000bd99c000 (ACPI NVS)
[    0.000000]  BIOS-e820: 00000000bd99c000 - 00000000bd9a6000 (ACPI data)
[    0.000000]  BIOS-e820: 00000000bd9a6000 - 00000000bdade000 (reserved)
[    0.000000]  BIOS-e820: 00000000bdade000 - 00000000bdaef000 (ACPI NVS)
[    0.000000]  BIOS-e820: 00000000bdaef000 - 00000000bdb02000 (reserved)
[    0.000000]  BIOS-e820: 00000000bdb02000 - 00000000bdb04000 (ACPI NVS)
[    0.000000]  BIOS-e820: 00000000bdb04000 - 00000000bdb0d000 (reserved)
[    0.000000]  BIOS-e820: 00000000bdb0d000 - 00000000bdb13000 (ACPI NVS)
[    0.000000]  BIOS-e820: 00000000bdb13000 - 00000000bdb75000 (reserved)
[    0.000000]  BIOS-e820: 00000000bdb75000 - 00000000bdd78000 (ACPI NVS)
[    0.000000]  BIOS-e820: 00000000bdd78000 - 00000000bdf00000 (usable)
[    0.000000]  BIOS-e820: 00000000fec00000 - 00000000fec01000 (reserved)
[    0.000000]  BIOS-e820: 00000000fec10000 - 00000000fec11000 (reserved)
[    0.000000]  BIOS-e820: 00000000fec20000 - 00000000fec21000 (reserved)
[    0.000000]  BIOS-e820: 00000000fed00000 - 00000000fed01000 (reserved)
[    0.000000]  BIOS-e820: 00000000fed61000 - 00000000fed71000 (reserved)
[    0.000000]  BIOS-e820: 00000000fed80000 - 00000000fed90000 (reserved)
[    0.000000]  BIOS-e820: 00000000fef00000 - 0000000100000000 (reserved)
[    0.000000]  BIOS-e820: 0000000100001000 - 000000043f000000 (usable)
[    0.000000] e820 update range: 0000000000000000 - 0000000000010000 (usable) ==> (reserved)
[    0.000000] e820 update range: 00000000bdf00000 - 000000043f000000 (usable) ==> (reserved)
[    0.000000] update e820 for mtrr
# 

編集3/4 - 部分的に成功しました。

  • UEFI BIOSをバージョンから次のバージョンにアップグレードしても0705 x64 08/23/2011役に立ち1007 02/10/2012ませんでした。同じ問題がまだ存在します。
  • 1つのDIMMモジュールを取り外すと(どのスロットがCPUから最も遠い#4であるかをうまく推測できました)、ユーザーガイドの図にもかかわらず、BIOSは残りの24GBを検出して使用できました。スロット#4に残りのDIMMの1つを取り付けても使用できるため、そのスロットに問題はありません。 「元の」DIMMをそのスロットに再接続し、元の位置に戻りました。
  • Debian 6.0.3 AMD64インストールCDからリカバリ環境に起動し、dmesg出力が表示されていることを確認します。同様のMTRRエラーはありません。。また、その環境で3 x 8GBをインストールすると、24GB(プラスまたはマイナスのイプシロン乗算パイ程度、正確な計算はしません)はfree
  • カーネルをアップグレード/再インストールすると(マイナーアップグレードが可能)、MTRRの問題が解決するようです。dmesgこれで合計26198016KBを報告し、MTRRエラーはありません。これは3 x 8GBのインストールで予想されたものです。free -mこれで総RAMが24114MBと報告されていますが、正直言って、この数値は私には十分近いです。

これは何らかの理由で損傷したコアと組み合わせたDIMMの臭いがします。可能停電中に発生しました(たとえカーネル衝突の奇妙な方法だったと言わなければなりませんが!)。ディーラーと会話するとすぐに(おそらく明日)利用できないDIMMがディーラーに返されます。

(おそらく)最終編集

私は2組のDIMMのうちの1つに対してRMAを実行しましたが、ディーラーはそれが破損していると思って、正しく機能しているように見える新しいペアを私に送りました。したがって、私は本質的にほぼ一ヶ月前に元の意図した場所にいます(ただし、その時間のかなりの部分がディーラーに帰属しませんでしたが)。 32GBの使用可能メモリがfree -m報告され、カーネル報告が34586624k初期化されました。 RAMの両方が私が期待していたものとほぼ同じです。

答え1

まず、BIOS / UEFIがRAMを正しく検出できない場合、OSはより良いパフォーマンスを発揮できません。 BIOSが設定に関する誤った情報を表示している場合は、追加のアクションは必要ありません。

=>そうかもしれません。少なくともハードウェアの問題。

編集する:dmesg | grepメモリで確認した結果実際に内蔵BIOSのハードウェアの問題です。少なくともLinuxはこれを検出し、次のように警告しましたWARNING: BIOS bug: CPU MTRRs don't cover all of memory, losing 13295MB of RAM。 RAMモジュールの4つのうちの1つが認識されていないか、正しく接続されていないようです。

メーカーに報告し、BIOSをアップグレードし、マザーボードを交換することができます。 RAMが少ないと、このエラーが発生しない可能性が高くなります。

参考までに、あなたは有名な引用に同意することができます。Linus TorvaldsがBIOSメーカーについて話します。:

BIOSの作者はしばしば完全に無能な常習者です。

次に、BIOSがマザーボードの実際の構成と一致するかどうかをLinuxで確認できます/proc/meminfo。一般に、Linuxシステムが何を知っていて、メモリをどのように使用しているのかは非常に明確です。私の64ビット/ 8GB RAMの外観は次のとおりです。

$ cat /proc/meminfo 
MemTotal:        8175652 kB
MemFree:         5476336 kB
Buffers:           63924 kB
Cached:          1943460 kB
SwapCached:            0 kB
[...]

ブートプロセスとLinuxカーネルが使用/リリースする内容に関しては、以下からgrepできますdmesg

$ dmesg | grep Memory
[    0.000000] Memory: 8157672k/8904704k available (6138k kernel code, 534168k absent, 212864k reserved, 6896k data, 988k init)

編集する:Gillesが言ったように、あなたはdmidecode --type memoryハードウェア構成の詳細を学ぶことができます。 4x2Gbシステムでは、次のようになります。

$ sudo dmidecode --type memory
# dmidecode 2.9
SMBIOS 2.6 present.

Handle 0x0020, DMI type 16, 15 bytes
Physical Memory Array
    Location: System Board Or Motherboard
    Use: System Memory
    Error Correction Type: None
    Maximum Capacity: 32 GB
    Error Information Handle: Not Provided
    Number Of Devices: 4

Handle 0x0022, DMI type 17, 28 bytes
Memory Device
    Array Handle: 0x0020
    Error Information Handle: Not Provided
    Total Width: 64 bits
    Data Width: 64 bits
    Size: 2048 MB
    [...]
[This block is repeated for each module]

答え2

/var/log/dmesgでメモリマップ( 'e820'の場合はgrep)を検索し、そこに報告されている利用可能なメモリ量を計算します。これは、BIOSがロードされているオペレーティングシステムにメモリについて知らせます。

(これはレガシーブートにのみ適用されます。EFIスタイルブートを使用している場合、メモリがどのように報告されるかはわかりませんが、同様のレポートがあると思います。)

また、32GBがインストールされている場合、BIOSは16GBを報告します。インストールされているメモリを4GBまたは8GBに減らして効果を比較してみてください。

答え3

多くの古いAMDマザーボードには4つのスロットがありますが、最後のスロットを埋めると問題が発生します。これはチップセットの問題なので解決できません。

関連情報