Bir DIMM'nin fiziksel adres aralığını bulmak mümkün müdür?


17

SMBios Tip 20'nin burada yardımcı olacağını unutmayın, ancak sürüm 2.5 (2006-09-05) s. 25, L796 ve s. 131'den itibaren isteğe bağlıdır , ancak 16, 17 ve 19 türleri zorunludur, ancak tam olarak yoktur. Yardım.

Fiziksel Bellek Dizisi (Tip 16)

Tüm sistem için bu yapılardan biri var ve bu kartta neyin mümkün olduğunu açıklıyor.

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

Bellek Aygıtı (Tip 17)

Her bir Dimm için bir kayıt vardır, bu da kartta kurulu fiziksel Dimms'i gösterir.

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

Bellek Dizisi Eşlenen Adresi (Tür 19)

Bu kayıtlardan birden fazla olabilir ve her kayıt bir dizi fiziksel adresi listeler.

İşte iki 2GB çubuklu çıktı:

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

Ve işte 4 çubuklu çıktı; 2 * 2GB ve 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

Yukarıdaki ilk örnek çıktısında iki adet 2 GB DIMM, ancak iki adet 3,3 GB ve 0,7 GB aralığının bulunduğunu unutmayın. 4 Dimm ile, sistem aynı zamanda e820 haritasının aynısını temsil ettiği için bellek dizisi eşlenmiş adres bölgesini iki parçaya birleştirir, yani geçerli bellek fiziksel adres aralıkları.

1 ila birçok Tip 20 kaydı, tam bir tip 17 bellek cihazına bağlanır, yani tüm fiziksel aralık bilinir:

Misal

$ 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

EDAC - Hata Tespiti ve Düzeltme amaçları için adresden DIMM'e gitmek mümkün görünüyor , ancak DIMM'den tüm aralığa değil.

Mcelog'un kaynak koduna bakıldığında , kod çözme için tip 20 kullanıyor.


Q'nuzu daha ayrıntılı açıklayabilir misiniz? Sorduğun şeyi gerçekten takip etmiyorum. Daha fazla ayrıntı veya örnek büyük bir artı olacaktır. / W ı başlayacağını söyledi 2 alet dmidecodeve lshwama bu verilenden daha fazlasını arıyorsanız düşünüyorsun?
slm

@slm: lshwkullanımlar dmidecodekod üs olarak ve dmidecode -t 20istediği bilgi verir. Ancak, belirtildiği gibi, SMBIOS 2.5 sürümü ile bu bilgiyi "Bellek Cihazı Eşlenmiş Adres" olarak da bilinen Tür 20 veya banka konumu isteğe bağlıdır - bu nedenle Q, aynı bilgiyi almanın başka bir yolu varsa. - arasındaki bağlantı type 17bireyin Belirleme (isteğe bağlı olarak sağladığı değeri ve fiziksel adres aralığında Type 20).
Runium

@Sukminder - teşekkürler. Bu bilgi muhtemelen Q ile birleştirilmelidir.
slm

@Sukminder - Bazı örnek dmidecode -t 20çıktılar ekledim , tip 17'nin konumlandırıcı değerini fiziksel adrese, tip 20'ye göre açıklayabilir misiniz?
slm

3 harfli bir devlet kurumunda çalışmadığınızı veya fon seviyelerine sahip olmadığınızı varsayacağım. Ve eğer oradaysanız, o zaman burada sormuyorsunuz. Modern bir PC / Sunucu / MAC için, fiziksel bellek aralıkları genellikle Sanal Aralıklarla eşleştirilir, daha sonra işletim sistemi tarafından yeniden eşleştirilebilir, anlamayabilirsiniz. O zaman bile, DOS günlerinin 640k + Genişletilmiş Belleği ile eşleyebilir. 32 bit işletim sistemi kullanmak, size 64 bit işletim sisteminden farklı bir yanıt verecektir. Son hedefin nedir?
MikeP

Yanıtlar:


1

Birden fazla DIMMS'niz olduğunda, BIOS bunları bir serpiştirme şeklinde yapılandırabilir. Yani bir 2G DIMM'in fiziksel 0G-> 4G, bayt 0-7, 8-15 atlama olabilir. (yani düşük 64 bit) Diğer 2G DIMM, fiziksel 0G-> 4G, bayt 8-15, 0-7 atlıyor. (yüksek 64 bit). Interleave aslında bundan daha büyük olduğunu unutmayın, çünkü QDR belleğiniz varsa, sistemin 1 adres, 8x 64 bit veri döngüleri yapabileceğini düşünüyorum, bu yüzden 64 baytlık birimler tarafından serpiştirmenin daha iyi olacağını düşünüyorum.

Gördüğünüz 0,7G ve 3,3G fiziksel düzenlemeler, PCI aygıtları, VGA arabellekleri, klasik <1M 8086 bok, vb. Yani 4G'ye kadar 0-> 640K, 1M-> 3.3G, BIOS, PCI vb. İçin 0.7G gibi bir haritanız var. Ve sonra koç için 4G-> 4.7G.


0

Brute Force çözümü

  1. geçerli yapılandırmanın bellek aralığını günlüğe kaydet
  2. kapatın, söz konusu DIMM'i ve üstündeki tüm DIMM'leri çıkarın
  3. yeniden başlatın, yeni yapılandırmayı gözden geçirin.

2
Bunun yardımcı olacağından emin değilim ... yani 6 2GB DIMM'niz varsa ve bir çifti kaldırırsanız, en yüksek menziliniz muhtemelen 4GB küçülecektir, ancak bu size önceki durumda nerede olduklarını söylemez, ancak test edeceğim bu ve güncelleme.
Alun

".. ve üstündeki tüm DIMM'ler", örneğin, söz konusu DIMM yuva 2'de ise, 3 ... n
K7AAY


-1

Bugünlerde her şey sanal.

Donanımda, işletim sistemi adreslerini gerçek fiziksel adreslere çeviren MMU adı verilen bir şey var . Yükü DIMM'ler arasında dağıtabilir ve donanımın diğer bölümlerini adres alanına eşleyebilir. İşletim sistemi düzeyinde fiziksel adres alanı denen şey zaten TLB üzerinden çevrilmiş bir görünümdür.

/programming/36639607/how-exactly-do-kernel-virtual-addresses-get-translated-to-physical-ram güzel bir açıklamadır.


1
Fiziksel adres aralığını istediğini söyledi .
dirkt

1
Intel, 80286'ya bir MMU ekledi ve i386'da tamamen işlevseldi ... 30+ yıl önceydi ... "günümüzde her şey sanal" için çok fazla :) bellek her zaman sanallaştırıldı.
Eric
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.