64비트 Linux가 3~32GB RAM을 인식하지 못합니다.

64비트 Linux가 3~32GB 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 8GB와 빈 DIMM 슬롯을 보고합니다. 또한 커널의 MTRR 불일치 메시지에 주목하세요. 결과적으로 13GB의 손실이 발생하며 이는 적어도 마더보드 자체 보고에 합산됩니다.)

# 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이 되지 않았습니다. 똑같은 문제가 여전히 존재합니다.
  • 하나의 DIMM 모듈을 제거하면(어느 슬롯이 CPU에서 가장 먼 #4인지 운 좋게 추측할 수 있었습니다) 사용 설명서의 다이어그램에도 불구하고 BIOS가 나머지 24GB를 감지하고 사용할 수 있었습니다. 슬롯 #4에 나머지 DIMM 중 하나를 설치해도 여전히 사용할 수 있으므로 해당 슬롯에는 문제가 없습니다. "원래" 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이 딜러에게 반환될 것입니다.

(아마도) 최종 편집

두 쌍의 DIMM 중 하나에 대해 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개 중 하나가 인식되지 않거나 올바르게 연결되지 않은 것 같습니다.

제조사에 신고하고, 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개 있을 수 있지만 마지막 슬롯을 채우면 문제가 발생합니다. 이는 칩셋 문제이므로 해결할 수 없습니다.

관련 정보