Який апаратний пристрій раніше їв 1,4 ГБ моєї 4 Гб оперативної пам’яті, а тепер раптом після жодних змін обладнання не з’їдає 2,2 ГБ?


17

Це більш-менш продовження

Який апаратний пристрій з’їдає 1,4 ГБ моєї 4 Гб оперативної пам’яті?

Хоча я більш-менш прийняв рішення, що з якихось загадкових причин після оновлення BIOS мій графічний адаптер раптово зарезервував 1,4 ГБ пам’яті (замість того, щоб динамічно резервувати), тепер (через 2 тижні після закінчення гарантії мого ноутбука минула), після цього нічого особливого, крім, можливо, випробування декількох живих компакт-дисків Linux (деякі з них завантажуються із USB-ключа) та кілька разів змінюючи параметри завантаження з UEFI на BIOS CSM і назад, раптом зарезервовано ще 800 Мб.

А щоб зрозуміти, це не проблема Windows - і memtest, і Linux також бачать таку кількість пам'яті. Тільки Lenovo Diagnostics все ще бачить повний об'єм пам'яті 4 Гб (і він протестував його і не виявив помилок)

Ось скріншоти з інструмента діагностики графічних драйверів та з монітора ресурсів:

Нова ситуація

(Для довідки, раніше 1435 МБ було зарезервовано для обладнання, а максимум графічної пам'яті - 1138 МБ).

Що, очевидно, робить проблему набагато актуальнішою, оскільки зараз половина моєї пам’яті «зарезервована апаратом».

Вихід meminfo -rне змінився сильно (четвертий діапазон пам'яті скоротився майже на 800 МБ):

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 після попередніх історій із Samsung та Lenovo, я потрапив у оболонку EFI - і викинув ще трохи інформації. Я насправді не знаю, про що це, але, можливо, це комусь допомагає:

пам'ятка

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

(як noob UEFI, що означає BS_data?)

dh -d

http://pastebin.com/KH1rFehj

(dh -v стикається з нескінченним циклом і його не можна скинути ...)

dmpstore (я відредагував свій ключ продукту Windows 8):

http://pastebin.com/iYPcbpEY

Будь-які вдячності будь-які ідеї чи будь-які інші способи відновити цю пам'ять (чи хтось знає, чи існує робочий спосіб повністю скинути UEFI NVRAM, не роблячи роботу машини для завантаження?) ...

EDIT1

Під час завантаження Linux в режимі UEFI більша частина пам'яті є корисною.

/ proc / meminfo

/ proc / iomem

dmesg

Але при завантаженні його в режимі сумісного BIOS (через CSM) це не так:

/ proc / iomem

dmesg

Так, напевно, помилка в CSM? (Але все ж дивно, що це раптом з'являється ...)

Оскільки моєю основною ОС є 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-ГБ-ОЗУ-4 ГБ-зарезервовано-апаратно-та / td-p / 1539272

Я також (лише щоб виключити цю причину) видалив акумулятор CMOS, але, за винятком деяких темних відбитків пальців, які я знайшов на "нижній двері" (кришка, за якою схований жорсткий диск і оперативна пам'ять), це не зробило мене мудрішим.

EDIT3

Не багато новин, якийсь хлопець з Lenovo підписався на мій пост на форумі і сказав, що інженер буде дивитись на це. Будемо сподіватися на краще.

EDIT4

Ще 21 Мб розкусили пил, цього разу для спроби завантажувати дистрибутив Linux через UEFI Secure Boot ... Детальніше у вищезгаданій темі на форумах Lenovo.

втрачено більше пам’яті


Чи є у вас додаткові BIOS, що стосуються пам'яті? Особливо будь-які варіанти перезавантаження пам’яті?
Девід Шварц

Ні, крім відключення захисту пам’яті (DEP) таких варіантів немає. І особливо я на 100% впевнений, що я не змінив жодних параметрів BIOS, крім пріоритету завантаження між 1,4 ГБ та 2,2 ГБ, з'їденим.
mihi

Мене трохи бентежить питання, враховуючи, що Win7 в будь-якому випадку може використовувати лише 3,5 ГБ або менше вашої пам'яті. Ви спробували пропозиції в цій статті? support.microsoft.com/kb/978610
Дебра

2
@Debra Це 64-бітний Win7, який (напевно) може використовувати> 3,5 Гб (на роботі у мене є машина з 12 ГБ під управлінням Win7). І так, я (4 місяці тому, коли я опублікував своє останнє запитання)
mihi

Яку версію BIOS ви зараз використовуєте та яка була попередня? Ви вже намагалися відновити BIOS до його стандартних налаштувань? Який об'єм встановленої / корисної пам'яті відображається в діалоговому вікні властивостей системи?
і31415

Відповіді:


19

Вирішено :)

Ця причина виглядає дивною особливістю впровадження UEFI, що також можна побачити у впровадженні TianoCore з відкритим кодом:

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

Я в кінцевому підсумку виявив це після розмежування моїх змінних відвалів EFI після останньої "втрати" в 21 МБ та пошуку цікавих змінних:

Перш ніж втратити останні 21 МБ пам'яті

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, міняв налаштування тощо, ці змінні ніколи не змінювалися (і я припускав, що вони зберігають деяку інформацію про марку / модель моєї встановленої оперативної пам’яті тощо).

Тепер, коли моя пам’ять зменшилась, значення MemoryTypeInformation було резервоване як MemoryTypeInformationBackup (перезапис старої резервної копії) і рівно один DWORD у зміні значення - при зміщенні 0x34: Старе значення було 0x4000, нове значення 0x5582. Різниця становить 0x1582 або 5506 у десятковій кількості, що точно відповідає кількості сторінок (4К блоків), коли моя пам'ять скоротилася минулого разу.

Зробіть крок далі: старе значення MemoryTypeInformation та MemoryTypeInformationBackup також відрізняється рівно на одне значення (при різному зміщенні, хоча 0x44). Якщо знову порівнювати їх значення, 0x2F4C0 або 193728 у десятковій мірі, то саме знову кількість сторінок моєї пам'яті скоротилася за час до цього (коли стартова адреса змінилася з 871F2000 на 57D32000).

Порівнюючи це з вищезгаданим кодом TianoCore, це раптом має ідеальний сенс:

Цей код запускається щоразу, коли система збирається завантажувати параметр завантаження, і він перевіряє, що в різних областях пам'яті UEFI менше виділених сторінок, ніж збережено в MemoryTypeInformation. Якщо ні, карта пам'яті невірна, і змінна оновлюється (зі 125% того, що зараз виділено), і запускається перезавантаження, щоб карту пам'яті можна було відновити з останніх даних. Зауважте, що реалізація ніколи не зменшить розмір кешу для будь-якого типу пам'яті, тому будь-які зміни тут будуть постійними.

Проблема тут полягає в тому, що якщо завантажувач UEFI завершився невдачею, він поверне вас у меню вибору завантаження (або у випадку, якщо це був пристрій за замовчуванням, завантажується наступний пристрій). Оскільки більшість завантажувачів UEFI не очищають себе в разі відмови завантаження, як тільки завантажується наступне меню, цей код виявить, що виділено ще деяку кількість пам'яті, і тому вирішить, що він повинен оновити карту пам'яті, щоб наступна ОС не потрапить у проблеми. На жаль, це повторюється для кожної помилки завантаження, так що врешті-решт існує "жорсткий ліміт" того, як часто ви можете не працювати з завантаженням :-(

Код у TianoCore також має варіанти резервного копіювання, якщо змінна відсутня або неправильно сформована (що, якщо я правильно зрозумів, може коштувати вам до двох додаткових перезавантажень), але враховуючи той факт, що Lenovo навіть включив змінну Backup (яка не існує в TianoCore), я вирішив не довіряти цій резервній копії і повернувся до найдавнішої резервної копії, мінус 800 Мб для типу LoaderData, що дає мені ефективну 667 Мб апаратну пам'ять, зарезервовану (на сьогодні достатньо хороша). І це працює :)

вирішена карта пам'яті

Навчені уроки

  • Коли завантажувач UEFI завершився невдачею, і ви повернетесь до меню завантаження, ніколи не намагайтеся завантажувати що-небудь інше, краще скиньте систему (сподіваюся, що код не запустить тоді; якщо так, я оновлю пост)

  • EFI Shell має досить корисний шестигранний редактор для редагування змінних EFI та виправлення цих проблем

  • Навіть якщо ваш продавець не може чи не хоче вам допомогти - будьте вперті; врешті-решт ви знайдете рішення (навіть якщо через кілька місяців)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.