Linux 64-bit tidak mengenali RAM saya antara 3 dan 32 GB

8

Masalah saya disebabkan oleh modul memori yang rusak dan sangat mungkin kernel biner yang rusak.


Saya baru saja mem-boot PC saya dengan perangkat keras yang pada dasarnya baru. Saya telah menjalankan Debian 6.0 AMD64 sebelumnya, dan tidak ada perubahan di sana (secara harfiah; Saya baru mencabut hard disk dari motherboard lama dan menghubungkannya kembali ke yang baru), tetapi menemukan sesuatu yang aneh:

  • Saya telah memasang RAM 4 x 8 GB secara fisik
  • Pengaturan UEFI / BIOS melaporkan RAM 16383 MB
  • Linux free -mmelaporkan 2985 MB RAM

2985 MB tampaknya terlalu dekat dengan tanda 3 GB ajaib untuk itu menjadi kebetulan semata, tetapi uname -rdicetak 2.6.32-5-amd64; jelas sebuah kernel 64-bit, yang adalah semua yang pernah diinstal pada drive sistem yang saya gunakan. Motherboard baru adalah Asus M5A97 Pro, yang memiliki empat slot DDR3 yang seharusnya mendukung modul 8 GB. Modul memori itu sendiri identik, empat Corsair XMS3 PC12800 8 GB, dibeli bersama.

Saya belum melihat-lihat pengaturan UEFI secara detail, tetapi memang menelusuri dan melihat tidak ada yang tampak seperti itu perlu diubah untuk memungkinkan sejumlah besar RAM.

Sunting: Konfirmasi lebih lanjut bahwa saya benar-benar menjalankan 64-bit:

# 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
#

Ada apa dengan ini, dan apa yang bisa saya lakukan?

Sunting 2: dmesg, dmidecode dan meminfo, seperti yang diminta. Saya tidak memiliki akses fisik ke sistem sekarang, jadi harus menunggu sampai malam ini untuk mengeluarkan beberapa modul dan melihat apa yang dilakukannya. (Perhatikan bahwa dmidecode melaporkan 3 x 8GB plus satu slot DIMM kosong. Juga catat pesan ketidakcocokan MTRR dari kernel, yang menyebabkan hilangnya 13 GB, yang setidaknya menambah dengan apa yang dilaporkan motherboard itu sendiri.)

# 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
#

Grepping untuk e820 menunjukkan banyak rentang, dengan topping out e820 update range: 00000000bdf00000 - 000000043f000000 (usable) ==> (reserved). 43f000000 adalah 16 GiB, bdf00000 adalah 3039 MiB. Saya tidak melihat itu kebetulan.

# 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
# 

EDIT 3/4 - keberhasilan sebagian:

  • Memutakhirkan UEFI BIOS dari versi 0705 x64 08/23/2011menjadi 1007 02/10/2012tidak membantu: masalah yang sama tetap terjadi.
  • Menghapus satu modul DIMM (saya menebak di mana slot # 4: yang terjauh dari CPU) memungkinkan BIOS mendeteksi dan menggunakan 24 GB yang tersisa, walaupun konfigurasi tiga DIMM tidak "disarankan" sesuai dengan diagram dalam manual pengguna. Khususnya, tempat duduk salah satu DIMM yang tersisa di slot # 4 masih memungkinkan untuk digunakan, sehingga slotnya baik-baik saja. Mengembalikan DIMM "asli" ke dalam slot itu menjatuhkan saya kembali pada titik awal.
  • Mem-boot dari CD instalasi Debian 6.0.3 AMD64 ke lingkungan penyelamatan dan memeriksa dmesghasilnya tidak menunjukkan kesalahan MTRR serupa . Juga, dalam lingkungan itu, dengan 3 x 8GB diinstal, 24 GB (plus atau minus epsilon kali pi atau sekitar; Saya tidak melakukan matematika yang tepat) muncul sebagai dapat digunakan sesuai dengan free.
  • Memutakhirkan / menginstal ulang kernel (ada peningkatan kecil yang tersedia) tampaknya telah memperbaiki masalah MTRR juga. dmesgsekarang melaporkan total 26198016 KB, dan tidak ada kesalahan MTRR, yang sesuai dengan apa yang saya harapkan dengan 3 x 8GB diinstal. free -msekarang melaporkan 24114 MB total RAM, yang sejujurnya cukup dekat untuk saya.

Baunya seperti DIMM muntah, plus kernel yang karena alasan apa pun rusak; yang terakhir mungkin telah terjadi selama pemadaman listrik (meskipun saya harus mengatakan itu adalah cara yang aneh untuk memecah kernel!). DIMM yang tidak berfungsi akan kembali ke pengecer segera setelah saya berbicara dengan mereka (semoga besok).

(semoga) EDIT FINAL

Saya RMA akan salah satu dari dua pasang DIMM, itu diterima oleh reseller sebagai rusak dan mereka mengirimi saya pasangan baru, yang tampaknya berfungsi dengan baik. Jadi saya sekarang pada dasarnya di mana saya awalnya dimaksudkan hampir sebulan yang lalu (meskipun sebagian besar waktu itu tidak benar-benar karena reseller), dengan 32 GB RAM dapat digunakan; free -mmelaporkan 32194 MB total memori, dan kernel melaporkan 34586624kRAM pada inisialisasi, yang keduanya sesuai dengan harapan saya.

sebuah CVn
sumber
2
Dari pernyataan pertama Anda, sepertinya Anda memindahkan hard disk dengan OS yang terpasang ke board sistem baru? Tes yang sangat bagus adalah mengunduh distro langsung dan mem-bootnya. Slax, DSL, Ubuntu, atau apa pun. Jika itu mengakui jumlah RAM yang tepat maka Anda kemungkinan akan menghadapi masalah HAL / udev. Pada titik itu, Anda akan menghemat lebih banyak waktu membuat cadangan dan menginstal ulang daripada mencoba memperbaikinya. Kecuali Anda seorang geek seperti saya dan ingin menghabiskan berjam-jam atau berhari-hari di atasnya:}
2bc
2
Silakan memposting output dmidecode --type memorydan seratus baris pertama atau lebih dari output dmesg(pastikan untuk memasukkan apa pun yang terlihat seperti ini tentang memori).
Gilles 'SO- stop being evil'
1
WARNING: BIOS bug: CPU MTRRs don't cover all of memory, losing 13295MB of RAM.Nah, ada 13G Anda yang hilang.
Mat
1
@Mat, bukan 16G lainnya yang hilang, namun. Mereka mungkin akan membutuhkan sedikit lebih banyak mencari-cari.
CVn
1
Saya akan tertarik dengan apa yang dikatakan oleh debian live (/ ubuntu, karena ini adalah hal terdekat berikutnya), karena itu dapat digunakan untuk dengan mudah membedakan antara masalah dengan perangkat keras Anda dan masalah dengan konfigurasi Anda.
dtech

Jawaban:

14

Pertama, jika BIOS / UEFI Anda tidak mendeteksi RAM Anda dengan benar, maka OS Anda tidak akan melakukan yang lebih baik. Tidak perlu melangkah lebih jauh jika BIOS Anda menampilkan informasi yang salah tentang pengaturan Anda.

=> Anda mungkin memiliki setidaknya masalah perangkat keras.

EDIT : Dari dmesg Anda | memori grep, tampaknya Anda sebenarnya memiliki masalah perangkat keras, yang terletak di bios tertanam Anda. Setidaknya, Linux telah mendeteksi dan memperingatkan Anda tentang hal itu: WARNING: BIOS bug: CPU MTRRs don't cover all of memory, losing 13295MB of RAM. Tampaknya juga salah satu dari modul 4 ram Anda dikenali atau dimasukkan secara tidak benar.

Anda dapat melaporkannya ke pabrik Anda, memutakhirkan bios Anda dan mengganti motherboard Anda. Ada banyak kemungkinan bahwa dengan RAM yang lebih sedikit, Anda tidak akan menemukan bug ini.

Sebagai catatan tambahan, Anda mungkin setuju dengan kutipan terkenal dari Linus Torvalds ini tentang pembuat BIOS :

Penulis BIOS adalah monyet yang benar-benar tidak kompeten

Kedua, ketika BIOS Anda OK dengan apa yang Anda miliki di motherboard, Anda dapat melihatnya di Linux /proc/meminfo. Seringkali sangat jelas tentang apa yang diketahui dan dilakukan sistem linux Anda dengan memori Anda. Inilah yang saya miliki di RAM 64bit / 8 Gb saya:

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

Tentang proses boot dan apa yang digunakan / dibebaskan oleh kernel linux, Anda dapat mengambilnya dari dmesg:

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

Sunting : Seperti yang dikatakan Gilles, dengan dmidecode --type memory, Anda dapat memiliki detail tentang konfigurasi perangkat keras Anda. Sepertinya ini untuk sistem 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]
Coren
sumber
5

Cari / var / log / dmesg untuk peta memori (grep untuk 'e820') dan hitung berapa banyak memori yang dilaporkan ada yang dapat digunakan. Inilah yang dikatakan BIOS untuk memuat OS untuk memori.

(Ini hanya benar untuk boot gaya lama. Saya tidak tahu bagaimana memori dilaporkan jika boot gaya EFI digunakan, tapi saya kira ada laporan serupa.)

Juga, melaporkan 16GB oleh BIOS ketika 32GB diinstal berarti ada beberapa keanehan dalam pengaturan memori. Coba kurangi memori yang terpasang menjadi 4 atau 8 GB dan bandingkan efeknya.

Netch
sumber
Lihat hasil edit saya untuk data e820. Menghapus modul memori secara fisik untuk melihat apa yang harus menunggu sampai malam ini. Satu-satunya modul DDR3 yang saya miliki masing-masing adalah 8 GB.
CVn
Sepertinya sudah cukup sekarang - Anda memiliki perangkat keras dan lunak yang berfungsi dengan baik. Tindakan terakhir adalah memasang modul memori yang benar untuk mengisinya dan membuat saluran ganda berfungsi. Selamat.
Netch
0

Banyak papan AMD yang lebih tua mungkin memiliki 4 slot tetapi jika Anda mengisi slot terakhir Anda meminta masalah. Ini masalah chipset yang tidak bisa diperbaiki.

Rick
sumber
Saya tidak akan benar-benar menganggap Asus M5A97 Pro sebagai motherboard "yang lebih tua" (Saya tidak tahu tanggal pembuatannya, tetapi didasarkan pada chipset AMD 970, dan Wikipedia menempatkan seri 900 pada tanggal rilis Juni 2011, kurang dari satu tahun sebelum pertanyaan ini berlaku pada bulan Maret 2012). Dan berlari dari media instalasi menunjukkan gambaran realitas yang sangat berbeda dari sudut pandang OS. Dan masalah akhirnya diselesaikan dengan mengganti modul memori yang rusak dengan yang berfungsi dan menginstal ulang kernel (seperti yang dikatakan tepat di bagian atas pertanyaan).
CVn