4GBのRAMのうち1.4GBを消費するハードウェアデバイスは何でしたか。ハードウェアの変更がまったくなくても2.2GBを消費するようになりました。


17

これは多かれ少なかれの継続です

4GB RAMの1.4GBを消費するハードウェアデバイスは何ですか?

何らかの不思議な理由で、多かれ少なかれそこの解決策を受け入れましたが、BIOSのアップグレード後、グラフィックアダプターが突然(動的に予約するのではなく)1.4GBのメモリを予約しました。おそらく、いくつかのLinuxライブCD(USBキーからループバックブートされるものもあります)とUEFIからBIOS CSMへのブートオプションの変更を何度か試みることを除いて、何も特別なことはありません。

そして、明確にするために、これはWindowsの問題ではありません-memtestとLinuxの両方がそのメモリ量を確認しています。Lenovo Diagnosticsのみが4GBのメモリを完全に認識します(そして、それをテストし、エラーは見つかりませんでした)

グラフィックドライバー診断ツールおよびリソースモニターのスクリーンショットを次に示します。

新しい状況

(参考までに、1435MBがハードウェア用に予約され、最大グラフィックスメモリは1138 MBでした)。

私の記憶の半分が「ハードウェアによって予約されている」ので、これは明らかに問題をはるかに緊急にします。

の出力meminfo -rはあまり変化しませんでした(4番目のメモリ範囲は約800MB縮小しました):

MemInfo v2.10 - Show PFN database information
Copyright (C) 2007-2009 Alex Ionescu
www.alex-ionescu.com

Physical Memory Range: 0000000000001000 to 000000000009D000 (156 pages, 624 KB)
Physical Memory Range: 0000000000100000 to 0000000020000000 (130816 pages, 523264 KB)
Physical Memory Range: 0000000020200000 to 0000000040004000 (130564 pages, 522256 KB)
Physical Memory Range: 0000000040005000 to 0000000057D32000 (97581 pages, 390324 KB)
Physical Memory Range: 0000000100000000 to 000000011F600000 (128512 pages, 514048 KB)
MmHighestPhysicalPage: 1177088

サムスンとレノボとの以前の話の後、私はもうUEFIを信用していないので、私はEFIシェルに入り、さらにいくつかの情報をダンプしました。私はこれがすべてのことを本当に知りませんが、おそらくこれは誰かに役立ちます:

memmap

Type       Start            End               # Pages          Attributes
BS_code    0000000000000000-0000000000000FFF  0000000000000001 000000000000000F
available  0000000000001000-000000000005AFFF  000000000000005A 000000000000000F
BS_data    000000000005B000-000000000005BFFF  0000000000000001 000000000000000F
BS_code    000000000005C000-0000000000086FFF  000000000000002B 000000000000000F
BS_data    0000000000087000-0000000000087FFF  0000000000000001 000000000000000F
BS_code    0000000000088000-000000000008FFFF  0000000000000008 000000000000000F
reserved   0000000000090000-000000000009FFFF  0000000000000010 000000000000000F
BS_code    0000000000100000-000000000010FFFF  0000000000000010 000000000000000F
available  0000000000110000-000000001FFFFFFF  000000000001FEF0 000000000000000F
reserved   0000000020000000-00000000201FFFFF  0000000000000200 000000000000000F
available  0000000020200000-0000000040003FFF  000000000001FE04 000000000000000F
reserved   0000000040004000-0000000040004FFF  0000000000000001 000000000000000F
available  0000000040005000-0000000057D31FFF  0000000000017D2D 000000000000000F
BS_data    0000000057D32000-0000000057D51FFF  0000000000000020 000000000000000F
available  0000000057D52000-000000005A34AFFF  00000000000025F9 000000000000000F
BS_data    000000005A34B000-000000005A360FFF  0000000000000016 000000000000000F
reserved   000000005A361000-000000005A562FFF  0000000000000202 000000000000000F
BS_data    000000005A563000-000000005AD21FFF  00000000000007BF 000000000000000F
available  000000005AD22000-0000000096B02FFF  000000000003BDE1 000000000000000F
LoaderData 0000000096B03000-0000000096B04FFF  0000000000000002 000000000000000F
available  0000000096B05000-0000000096B06FFF  0000000000000002 000000000000000F
LoaderData 0000000096B07000-0000000096B14FFF  000000000000000E 000000000000000F
LoaderCode 0000000096B15000-0000000096BD1FFF  00000000000000BD 000000000000000F
LoaderData 0000000096BD2000-00000000C9468FFF  0000000000032897 000000000000000F
available  00000000C9469000-00000000C9474FFF  000000000000000C 000000000000000F
LoaderCode 00000000C9475000-00000000C9668FFF  00000000000001F4 000000000000000F
available  00000000C9669000-00000000CA828FFF  00000000000011C0 000000000000000F
BS_data    00000000CA829000-00000000CAE22FFF  00000000000005FA 000000000000000F
available  00000000CAE23000-00000000CAE31FFF  000000000000000F 000000000000000F
BS_data    00000000CAE32000-00000000CD668FFF  0000000000002837 000000000000000F
available  00000000CD669000-00000000CDCD5FFF  000000000000066D 000000000000000F
BS_code    00000000CDCD6000-00000000D6268FFF  0000000000008593 000000000000000F
RT_code    00000000D6269000-00000000D6344FFF  00000000000000DC 800000000000000F
RT_code    00000000D6345000-00000000D6468FFF  0000000000000124 800000000000000F
RT_data    00000000D6469000-00000000D6FEDFFF  0000000000000B85 800000000000000F
RT_data    00000000D6FEE000-00000000D9E9EFFF  0000000000002EB1 800000000000000F
reserved   00000000D9E9F000-00000000DAC13FFF  0000000000000D75 000000000000000F
reserved   00000000DAC14000-00000000DAE9EFFF  000000000000028B 000000000000000F
ACPI_NVS   00000000DAE9F000-00000000DAF04FFF  0000000000000066 000000000000000F
ACPI_NVS   00000000DAF05000-00000000DAF9EFFF  000000000000009A 000000000000000F
ACPI_recl  00000000DAF9F000-00000000DAFD9FFF  000000000000003B 000000000000000F
ACPI_recl  00000000DAFDA000-00000000DAFFEFFF  0000000000000025 000000000000000F
BS_data    00000000DAFFF000-00000000DAFFFFFF  0000000000000001 000000000000000F
available  0000000100000000-000000011F5FFFFF  000000000001F600 000000000000000F
reserved   00000000000A0000-00000000000BFFFF  0000000000000020 0000000000000000
reserved   00000000DB000000-00000000DF9FFFFF  0000000000004A00 0000000000000000
MemMapIO   00000000F80F8000-00000000F80F8FFF  0000000000000001 8000000000000001
MemMapIO   00000000FED1C000-00000000FED1FFFF  0000000000000004 8000000000000001

  reserved  :  24,115 Pages (98,775,040)
  LoaderCode:     689 Pages (2,822,144)
  LoaderData: 207,015 Pages (847,933,440)
  BS_code   :  34,263 Pages (140,341,248)
  BS_data   :  13,865 Pages (56,791,040)
  RT_code   :     512 Pages (2,097,152)
  RT_data   :  14,902 Pages (61,038,592)
  available : 748,703 Pages (3,066,687,488)
  ACPI_recl :      96 Pages (393,216)
  ACPI_NVS  :     256 Pages (1,048,576)
  MemMapIO  :       5 Pages (20,480)
Total Memory: 3,985 MB (4,179,152,896) Bytes

(UEFI noobとして、BS_dataはどういう意味ですか?)

dh -d

http://pastebin.com/KH1rFehj

(dh -vは無限ループに陥り、ダンプできません...)

dmpstore(Windows 8プロダクトキーを編集しました):

http://pastebin.com/iYPcbpEY

このメモリを再生するためのアイデアや他の方法(マシンを起動不能にせずにUEFI NVRAMを完全にリセットするための有効な方法があるかどうかは誰でも知っていますか?)

EDIT1

UEFIモードでLinuxを起動すると、ほとんどのメモリが使用可能になります。

/ proc / meminfo

/ proc / iomem

dmesg

ただし、互換性BIOSモード(CSM経由)で起動する場合は次のようにはなりません。

/ proc / iomem

dmesg

おそらくCSMのバグでしょうか?(しかし、それが突然現れるのはまだ驚くべきことです...)

私のプライマリOSはWindows(7)なので、8(.1)にアップグレードし、GPTパーティションで完全な再インストールを実行してUEFIを使用する必要があると思います。そして、UEFIが(まだ)定期的に引き起こしている問題を考えると、そのルートに行きたいかどうかはわかりません...

EDIT2

また、これについてはLenovoフォーラムにスレッドを投稿しましたが、これまでに回答がありません:http : //forums.lenovo.com/t5/R-and-L-Series-ThinkPad-Laptops/L530-2481-3SG-First-1 -4-GB-RAM-of-4-GB-reserved-by-hardware-and / td-p / 1539272

私は(この原因を除外するために)CMOSバッテリーも取り外しましたが、「下のドア」(ハードディスクとRAMが隠れている蓋)で見つけたいくつかの暗い指紋を除いて、賢くはなりませんでした。

EDIT3

あまりニュースはありませんが、レノボのある人がフォーラムの私の投稿をフォローアップし、エンジニアがそれを見ると言いました。のが最善の結果を期待してみましょう。

EDIT4

もう1つの21MBがほこりをかみました。今回は、UEFIセキュアブート経由でLinuxディストリビューションを起動しようとしています。詳細については、Lenovoフォーラムの上記のスレッドをご覧ください。

より多くのメモリが失われました


メモリに関連するオプションのBIOSはありますか?特にメモリの再マッピングオプションはありますか?
デビッドシュワルツ14

いいえ、メモリ保護(DEP)を無効にする以外には、そのようなオプションはありません。特に、1.4GBから2.2GBのブート優先度以外のBIOSオプションを変更しなかったことは100%確信しています。
mihi 14

とにかく、Win7がメモリの3.5GB以下しか使用できないことを考えると、この質問には少し困惑しています。この記事の提案を試しましたか?support.microsoft.com/kb/978610
デブラ14

2
@Debraそれは64ビットWin7であり、(確かに)3.5GB以上を使用できます(職場ではWin7を実行する12GBのマシンがあります)。はい、そうしました(4か月前に最後の質問を投稿したとき)
mihi 14

現在使用しているBIOSバージョンと以前のバージョンはどれですか?BIOSを既にデフォルト設定にリセットしようとしましたか?システムプロパティダイアログに表示されるインストール済み/使用可能メモリの量はどれくらいですか?
and31415 14年

回答:


19

解決済み:)

原因は、UEFI実装の奇妙な機能のようです。これは、オープンソースのTianoCore実装でも確認できます。

https://github.com/tianocore/edk2/blob/master/IntelFrameworkModulePkg/Library/GenericBdsLib/BdsMisc.c#L1425

最終的に、最後の21MBの「損失」の後のEFI変数ダンプを比較し、興味深い変数を見つけた後、それを見つけました。

最後の21MBのメモリを失う前に

Variable NV+RT+BS '4C19049F-4137-4DD3-9C10-8B97A83FFDFA:MemoryTypeInformationBackup' DataSize = 50
00000000: 09 00 00 00 60 00 00 00-0A 00 00 00 00 01 00 00 *....`...........*
00000010: 00 00 00 00 00 10 00 00-06 00 00 00 36 3A 00 00 *............6:..*
00000020: 05 00 00 00 00 02 00 00-03 00 00 00 00 8C 00 00 *................*
00000030: 04 00 00 00 00 40 00 00-01 00 00 00 00 02 00 00 *.....@..........*
00000040: 02 00 00 00 78 F2 03 00-0E 00 00 00 00 00 00 00 *....x...........*
Variable NV+RT+BS '4C19049F-4137-4DD3-9C10-8B97A83FFDFA:MemoryTypeInformation' DataSize = 50
00000000: 09 00 00 00 60 00 00 00-0A 00 00 00 00 01 00 00 *....`...........*
00000010: 00 00 00 00 00 10 00 00-06 00 00 00 36 3A 00 00 *............6:..*
00000020: 05 00 00 00 00 02 00 00-03 00 00 00 00 8C 00 00 *................*
00000030: 04 00 00 00 00 40 00 00-01 00 00 00 00 02 00 00 *.....@..........*
00000040: 02 00 00 00 38 E7 06 00-0E 00 00 00 00 00 00 00 *....8...........*

それらを失った後

Variable NV+RT+BS '4C19049F-4137-4DD3-9C10-8B97A83FFDFA:MemoryTypeInformationBackup' DataSize = 50
00000000: 09 00 00 00 60 00 00 00-0A 00 00 00 00 01 00 00 *....`...........*
00000010: 00 00 00 00 00 10 00 00-06 00 00 00 36 3A 00 00 *............6:..*
00000020: 05 00 00 00 00 02 00 00-03 00 00 00 00 8C 00 00 *................*
00000030: 04 00 00 00 00 40 00 00-01 00 00 00 00 02 00 00 *.....@..........*
00000040: 02 00 00 00 38 E7 06 00-0E 00 00 00 00 00 00 00 *....8...........*
Variable NV+RT+BS '4C19049F-4137-4DD3-9C10-8B97A83FFDFA:MemoryTypeInformation' DataSize = 50
00000000: 09 00 00 00 60 00 00 00-0A 00 00 00 00 01 00 00 *....`...........*
00000010: 00 00 00 00 00 10 00 00-06 00 00 00 36 3A 00 00 *............6:..*
00000020: 05 00 00 00 00 02 00 00-03 00 00 00 00 8C 00 00 *................*
00000030: 04 00 00 00 82 55 00 00-01 00 00 00 00 02 00 00 *.....U..........*
00000040: 02 00 00 00 38 E7 06 00-0E 00 00 00 00 00 00 00 *....8...........*

なぜこれが興味深いのか:ものをテストしたり、BIOSをアップグレードおよびダウングレードしたり、設定を変更したりするたびに、これらの変数は変更されません(インストールされたRAMなどのメーカー/モデルに関する情報を保存すると仮定しました)。

メモリが減少したため、MemoryTypeInformationの値はMemoryTypeInformationBackupとしてバックアップされ(古いバックアップを上書き)、値のDWORDが1つだけ変更されます-オフセット0x34で:古い値は0x4000で、新しい値は0x5582です。違いは0x1582または10進数で5506です。これは、前回メモリが縮小したページ数(4Kブロック)と正確に一致します。

さらに先へ進むと、MemoryTypeInformationとMemoryTypeInformationBackupの古い値も、1つの値が異なります(ただし、異なるオフセット0x44)。それらの値を再度比較すると、0x2F4C0または10進数で193728は、以前のメモリが縮小したページ数とまったく同じです(開始アドレスが871F2000から57D32000に変更されたとき)。

これを前述のTianoCoreコードと比較すると、これは突然完全に理にかなっています。

このコードは、システムがブートオプションを起動しようとするたびにトリガーされ、異なるUEFIメモリ領域に割り当てられているページがMemoryTypeInformationに格納されているページより少ないことを確認します。そうでない場合、メモリマップは正しくなく、変数は(現在割り当てられている値の125%で)更新され、再起動がトリガーされるため、メモリマップは最新のデータから再構築できます。実装により、メモリタイプのキャッシュサイズが減少することはないため、ここでの変更は永続的になります。

ここでの問題は、UEFIブートが失敗すると、ブート選択メニューに戻ることです(または、デフォルトのブート順序のデバイスであった場合、次のデバイスが試行されます)。ほとんどのUEFIブートローダーは、起動に失敗した場合に自動的にクリーンアップしないため、次のメニューが起動されるとすぐに、このコードはさらに多くのメモリが割り当てられたことを検出し、メモリマップを更新する必要があると判断します以下のOSは問題になりません。残念ながら、これはブートの失敗ごとに繰り返されるため、最終的には、ブートに失敗する頻度の「ハード制限」があります:-(

TianoCoreのコードには、変数が見つからないか、形式が正しくない場合のフォールバックオプションもあります(ただし、コードを正しく理解すれば、最大2回の再起動が必要になる場合があります)が、Lenovoがバックアップ変数( TianoCoreには存在しません)、このフォールバックを信頼しないことにし、私が持っていた最も古いバックアップ、LoaderDataタイプのマイナス800 MBに戻しました。これにより、効果的な667 MBハードウェア予約メモリが得られます(今のところ十分です)。そしてそれは動作します:)

解決されたメモリマップ

学んだ教訓

  • UEFIブートが失敗し、ブートメニューに戻った場合、他の何かをブートしようとしないで、システムをリセットしてください(コードがトリガーされないことを望みます。そうなった場合、投稿を更新します)

  • EFI Shellには、EFI変数を編集してこれらの問題を修正するための非常に使いやすい16進エディターがあります

  • あなたのベンダーがあなたを助けられない、またはあなたを助けたくない場合でも-頑固なままにしてください。最終的には解決策が見つかります(数か月後でも)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.