Apakah mungkin menemukan rentang alamat fisik DIMM?

17

Saya perhatikan bahwa SMBios Type 20 akan membantu di sini, tapi itu opsional pada versi 2.5 (2006-09-05) hlm. 25, L796, dan hlm. 131 , sedangkan tipe 16, 17 dan 19 adalah wajib, tetapi tidak cukup Tolong.

Array Memori Fisik (Tipe 16)

Ada salah satu dari struktur ini untuk keseluruhan sistem, menjelaskan apa yang mungkin terjadi pada board ini.

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

Perangkat Memori (Tipe 17)

Ada satu catatan per setiap Dimm, yang memberi tahu Anda Dimms fisik yang dipasang di papan tulis.

Handle 0x1100, DMI type 17, 34 bytes
Memory Device
    Array Handle: 0x1000
    Error Information Handle: Not Provided
    Total Width: 72 bits
    Data Width: 64 bits
    Size: 2048 MB
    Form Factor: DIMM
    Set: 1
    Locator: DIMM_A1 
    Bank Locator: Not Specified
    Type: DDR3
    Type Detail: Synchronous Registered (Buffered)
    Speed: 1600 MHz
    Manufacturer: XXXX
    Serial Number: XXXX
    Asset Tag: XXXX
    Part Number: XXXX 
    Rank: 1
    Configured Clock Speed: 1333 MHz

Alamat Array Memori yang Dipetakan (Tipe 19)

Mungkin ada beberapa catatan ini, dan setiap catatan berisi daftar alamat fisik.

Ini adalah output dengan dua tongkat 2GB:

Handle 0x1300, DMI type 19, 31 bytes
Memory Array Mapped Address
    Starting Address: 0x00000000000
    Ending Address: 0x000CFFFFFFF
    Range Size: 3328 MB
    Physical Array Handle: 0x1000
    Partition Width: 2

Handle 0x1301, DMI type 19, 31 bytes
Memory Array Mapped Address
    Starting Address: 0x00100000000
    Ending Address: 0x0012FFFFFFF
    Range Size: 768 MB
    Physical Array Handle: 0x1000
    Partition Width: 2

Dan ini adalah output dengan 4 batang; 2 * 2GB dan 2 * 4GB:

Handle 0x1300, DMI type 19, 31 bytes
Memory Array Mapped Address
    Starting Address: 0x00000000000
    Ending Address: 0x000CFFFFFFF
    Range Size: 3328 MB
    Physical Array Handle: 0x1000
    Partition Width: 2

Handle 0x1301, DMI type 19, 31 bytes
Memory Array Mapped Address
    Starting Address: 0x00100000000
    Ending Address: 0x0032FFFFFFF
    Range Size: 8960 MB
    Physical Array Handle: 0x1000
    Partition Width: 2

Perhatikan bahwa pada output sampel pertama di atas, ada dua DIMM 2GB, tetapi dua rentang 3,3GB dan 0,7GB. Dengan 4 Dimms, sistem juga akan menyatukan array alamat memori yang dipetakan wilayah menjadi dua potongan, karena hanya mewakili sama dengan peta e820, yaitu rentang alamat fisik memori yang valid.

Rekaman 1 hingga banyak Tipe 20 terikat dengan tepat satu perangkat memori tipe 17, yang berarti bahwa seluruh rentang fisik dapat diketahui:

Contoh

$ sudo dmidecode -t 20
# dmidecode 2.12
SMBIOS 2.6 present.

Handle 0x002F, DMI type 20, 19 bytes
Memory Device Mapped Address
    Starting Address: 0x00000000000
    Ending Address: 0x000FFFFFFFF
    Range Size: 4 GB
    Physical Device Handle: 0x002B
    Memory Array Mapped Address Handle: 0x002E
    Partition Row Position: 1

Handle 0x0030, DMI type 20, 19 bytes
Memory Device Mapped Address
    Starting Address: 0x00100000000
    Ending Address: 0x001FFFFFFFF
    Range Size: 4 GB
    Physical Device Handle: 0x002C
    Memory Array Mapped Address Handle: 0x002E
    Partition Row Position: 1

Tampaknya mungkin untuk beralih dari alamat ke DIMM untuk EDAC - Tujuan Deteksi Kesalahan & Koreksi , tetapi tidak dari DIMM ke seluruh rentang.

Melihat kode sumber mcelog , ia juga menggunakan tipe 20 untuk decoding-nya.

Alun
sumber
Bisakah Anda menjelaskan Q Anda lebih lanjut? Saya tidak benar-benar mengikuti apa yang Anda minta. Lebih detail atau contoh akan menjadi nilai tambah yang besar. 2 alat yang akan saya mulai dengan , dmidecodedan lshwsaya pikir Anda mencari lebih dari yang disediakan oleh ini?
slm
@slm: lshwdigunakan dmidecodesebagai basis kode dan dmidecode -t 20memberikan informasi yang diinginkan. Tetapi, seperti yang disebutkan, pada versi 2.5 SMBIOS struktur yang menyimpan informasi ini "Memory Device Mapped Address" alias Tipe 20 atau lokasi bank adalah opsional - jadi Q adalah jika ada cara lain untuk mengambil informasi yang sama. - Link antara type 17's Locator nilai dan rentang alamat fisik (seperti opsional disediakan oleh Type 20).
Runium
@Sukminder - terima kasih. Info ini mungkin hanya boleh dimasukkan ke Q. Karena Anda memiliki pegangan di atasnya, maukah Anda melakukannya?
slm
@Sukminder - Saya menambahkan beberapa sampel dmidecode -t 20output, dapatkah Anda menjelaskan nilai locator tipe 17 vs addr fisik, tipe 20?
slm
Saya akan berasumsi bahwa Anda tidak bekerja untuk agen pemerintah 3 huruf atau memiliki tingkat pendanaan mereka. Dan, jika Anda ada di sana, maka Anda tidak bertanya di sini. Untuk PC / Server / MAC modern, rentang memori fisik kemudian dipetakan ke Virtual Ranges, lalu dipetakan ulang oleh OS, Anda mungkin tidak dapat mengetahuinya. Bahkan kemudian, itu mungkin memetakannya ke dalam 640k + Extended Memory of the DOS days. Menggunakan OS 32-bit kemungkinan akan memberi Anda jawaban yang berbeda dari OS 64-bit. Apa tujuan akhir Anda?
MikeP

Jawaban:

1

Ketika Anda memiliki beberapa DIMMS, BIOS dapat mengkonfigurasinya menjadi beberapa interleave. Jadi, Anda mungkin memiliki satu DIMM 2G menjadi fisik 0G-> 4G, byte 0-7, melompati 8-15. (yaitu rendah-64 bit) 2G DIMM lainnya adalah fisik 0G-> 4G, byte 8-15, melewatkan 0-7. (tinggi 64 bit). Perhatikan bahwa saya berpikir bahwa interleave sebenarnya lebih besar dari itu, karena saya pikir jika Anda memiliki memori QDR, bahwa sistem dapat melakukan 1 alamat, siklus data 8x 64-bit, jadi interleaving oleh unit 64-byte akan lebih baik.

Pengaturan fisik 0,7G dan 3,3G yang Anda lihat harus dilakukan dengan perlu menjaga beberapa 4G rendah terbuka untuk perangkat PCI, buffer VGA, klasik <1M 8086 omong kosong, dll. Ini dilakukan oleh jembatan utara. Jadi Anda memiliki peta seperti: 0-> 640K, 1M-> 3.3G, 0.7G untuk BIOS, PCI, dll hingga 4G. Dan kemudian 4G-> 4.7G untuk ram.

mcr
sumber
0

Solusi Brute Force tampaknya

  1. catat kisaran memori dari konfigurasi saat ini
  2. matikan, lepaskan DIMM yang dimaksud dan semua DIMM di atasnya
  3. reboot, tinjau konfigurasi baru.
K7AAY
sumber
2
Tidak yakin itu membantu ... yaitu jika Anda memiliki 6 DIMM 2GB, dan menghapus pasangan, kisaran teratas Anda cenderung menyusut hingga 4GB, tetapi itu tidak memberi tahu Anda di mana mereka berada dalam kasus sebelumnya, tetapi saya akan menguji ini dan perbarui.
Alun
".. dan semua DIMM di atasnya", mis., jika DIMM yang dimaksud ada di slot 2, juga lepaskan DIMM di slot 3 ... n
K7AAY
-1

Semuanya sekarang virtual.

Ada sesuatu yang disebut MMU di perangkat keras yang sudah menerjemahkan alamat untuk OS menjadi alamat fisik nyata. Ini juga dapat mendistribusikan beban antara DIMM dan memetakan bagian lain perangkat keras ke ruang alamat. Apa yang disebut ruang alamat fisik pada level OS sudah melalui tampilan terjemahan TLB .

/programming/36639607/how-exactly-do-kernel-virtual-addresses-get-translated-to-physical-ram adalah penjelasan yang bagus.

Thomas
sumber
1
Dia mengatakan dia ingin kisaran alamat fisik .
dirkt
1
Intel menambahkan MMU ke 80286 dan berfungsi penuh pada i386 ... itu 30+ tahun yang lalu ... begitu banyak untuk "saat ini semuanya virtual" :) memori hampir selalu divirtualisasi.
Eric