DIMMの物理アドレス範囲を見つけることは可能ですか?


17

ここではSMBios Type 20が役立ちますが、バージョン2.5(2006-09-05)の25、L796、および131ページではオプションであることに注意してください一方、タイプ16、17、および19は必須ですが、助けて。

物理メモリアレイ(タイプ16)

システム全体にこれらの構造の1つがあり、このボードで可能なことを説明しています。

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

メモリーデバイス(タイプ17)

Dimmごとに1つのレコードがあり、ボードにインストールされている物理的なDimmを示します。

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

メモリアレイマッピングアドレス(タイプ19)

これらのレコードは複数存在でき、各レコードには物理アドレスの範囲がリストされます。

2つの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

そして、これは4本の棒の出力です。2 * 2GBおよび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

上記の最初のサンプル出力では、2GB DIMMが2つありましたが、3.3GBと0.7GBの2つの範囲がありました。4 Dimmsを使用すると、システムはメモリアレイマップアドレス領域を2つのチャンクに結合します。これは、e820マップと同じ、つまり有効なメモリ物理アドレス範囲を表すだけです。

1〜多数のタイプ20レコードは、1つのタイプ17メモリデバイスに関連付けられています。つまり、物理的な範囲全体を知ることができます。

$ 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のアドレスからDIMMに移動することは可能だと思われます-エラーの検出と訂正の目的ですが、DIMMから全範囲に移動することはできません。

mcelogのソースコードを見ると、デコードにもタイプ20が使用されています。


Qについてさらに説明してください。私は本当にあなたが求めていることには従いません。詳細や例はさらにプラスになります。私はある/ wを開始すると2つのツールdmidecodelshw、私はあなたがより多くのこれらが提供するものよりも探していると思いますか?
slm

@slm:コードベースとしてlshw使用しdmidecodedmidecode -t 20必要な情報を提供します。ただし、前述のように、SMBIOSのバージョン2.5では、この情報を保持する構造「メモリデバイスマッピングアドレス」別名タイプ20またはバンクロケーションはオプションです。したがって、同じ情報を取得する別の方法がある場合はQです。– type 17ロケーター値と物理アドレス範囲(オプションで提供されるType 20)間のリンク。
ルニウム14年

@Sukminder-ありがとう。この情報はおそらくQに組み込む必要があります。あなたはそれについてハンドルを持っているので、気になりますか?
slm

@Sukminder-サンプルdmidecode -t 20出力を追加しましたが、タイプ17のロケーター値と物理アドレス、タイプ20を説明できますか?
slm

3文字の政府機関で働いていないか、資金のレベルがないと仮定します。そして、あなたがそこにいれば、あなたはここで尋ねていません。最新のPC /サーバー/ MACの場合、物理メモリ範囲は仮想範囲にマッピングされることが多く、OSによって再マッピングされる場合があり、それを把握できない場合があります。それでも、それはDOS時代の640k + Extended Memoryにマップするかもしれません。32ビットOSを使用すると、64ビットOSとは異なる答えが得られる可能性があります。最終目標は何ですか?
MikeP

回答:


1

複数のDIMMがある場合、BIOSはそれらを何らかのインターリーブに設定する場合があります。したがって、物理0G-> 4G、バイト0-7、8-15をスキップする2G DIMMが1つあるかもしれません。(つまり、下位64ビット)他の2G DIMMは物理0G-> 4G、バイト8-15、0-7をスキップします。(高64ビット)。インターリーブは実際にはそれよりも大きいと思うことに注意してください.QDRメモリがある場合、システムは1アドレス、8x 64ビットデータサイクルを実行できるので、64バイト単位でインターリーブする方が良いと思います。

表示される0.7Gおよび3.3Gの物理的な配置は、PCIデバイス、VGAバッファー、従来の<1M 8086クラップスなどの下位4Gの一部を開いたままにする必要があるためです。これはノースブリッジによって行われます。したがって、0-> 640K、1M-> 3.3G、0.7G、BIOS、PCIなど、4Gまでのマップがあります。そして、RAMの場合は4G-> 4.7G。


0

ブルートフォースのソリューションは

  1. 現在の構成のメモリ範囲を記録します
  2. 電源を切り、問題のDIMMとその上のすべてのDIMMを取り外します
  3. 再起動して、新しい構成を確認します。

2
それが役立つかどうかわかりません...つまり、2GB DIMMが6つあり、ペアを削除した場合、トップレンジは4GBだけ縮小する可能性がありますが、前のケースの場所はわかりませんが、テストしますこれと更新。
アルン14年

「..そして、それ以上のすべてのDIMM」、問題のDIMMがスロット2にある場合、例えば、また、スロット3にDIMMを取り外し...のn
K7AAY


-1

今日ではすべてが仮想化されています。

ハードウェアにはMMUと呼ばれるものがあり、OSのアドレスを実際の物理アドレスに既に変換しています。また、DIMM間で負荷を分散し、ハードウェアの他の部分をアドレス空間にマップする場合もあります。OSレベルで物理アドレス空間と呼ばれるものは、すでにTLB変換ビューを介しています。

/programming/36639607/how-exactly-do-kernel-virtual-addresses-get-translated-to-physical-ramは良い説明です。


1
彼は物理的なアドレス範囲が欲しいと言った。
Dirkt

1
IntelはMMUを80286に追加し、i386で完全に機能しました... 30年以上前でした...「今日はすべてが仮想である」ために:)メモリはほとんど常に仮想化されています。
エリック
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.