Чому таблиця моєї сторінки займає стільки пам’яті?


10

Мій 64-розрядний ПК з Windows 7 дуже млявий. У диспетчері завдань я помітив, що використання моєї пам’яті становить майже 100%, проте сповіщення про використання кожного процесу не доходить до загальних 6 Гб (Firefox показує близько 500 МБ, решта набагато менше). Я завантажив RAMMap і виявив, що Page Page Table займає значну кількість пам'яті (2,5 Гб).

Скріншот RAMMap

Я погуглив це і нікуди не потрапив - мабуть, таблиця сторінок може роздроблено. Очевидно, я перезавантажую машину і бачу, чи це допомагає. Але чи є кращий спосіб виправити це?

EDIT: перезавантажено, а таблиця сторінок зменшилась до 30 Мб.

EDIT 2: Через кілька днів часу використання таблиці сторінок знову повзає. Я дотримувався інструкцій @ magicandre1981 у цій відповіді, щоб знайти джерело використання таблиці сторінок. На жаль, я намалював порожнє - таблицю сторінок використовує "Невідомо"!

Скріншот WPA

У когось були якісь яскраві ідеї?


Ви повинні визначити, що використовує ваш файл сторінки, щоб зрозуміти, чому ваш файл сторінки (тобто ваша віртуальна пам'ять) високий.
Рамхаунд

1
Ні, я думаю, це фізична пам'ять у використанні, а не віртуальна. Я думав, що таблиця сторінок є якоюсь посиланням для менеджера пам'яті?
benshepherd

2
Як я вже говорив у запитанні, немає жодних процесів, які використовують пам'ять. У мене було враження, що таблиця сторінок - це інша річ до файлу сторінки .
benshepherd


1
Таблиця сторінок - це зовсім інша річ від файлу сторінки. Дивіться мою відповідь нижче. Крім того, хоча файл сторінки може бути фрагментованим, таблиці сторінок ... ну, вони завжди фрагментовані (як у розпорошеній по всій оперативній пам’яті), і це не має ніякого значення.
Джеймі Ханрахан

Відповіді:


5

Мені потрібно прокоментувати коментарі до цього питання, зокрема плутанину між "таблицею сторінки" та "файлом сторінки". Це не відповідь, але вона не впишеться у вільний простір для коментарів.

"Таблиця сторінок" - це справді зовсім інша річ від файлу сторінки. Якщо n МБ оперативної пам’яті використовується для табличних сторінок, це не означає, що ви використовуєте n МБ простору файлів сторінок . І хоча деякі записи табличних сторінок (PTE, з яких складаються таблиці сторінок) стосуються вмісту файлу сторінок, але не всі.

Таблиці сторінок - це структури пам'яті, які використовуються MMU ЦП для здійснення перекладу адрес з віртуальних адрес (знову ж таки, не файл сторінки) на фізичні адреси, а ОС - для відстеження віртуального адресного простору та допомоги у вирішенні помилок сторінки. Таблиці сторінок складаються з записів таблиці сторінок (PTE). Кожна PTE займає 8 байт і визначає 4 К байт віртуального адресного простору - тобто однієї віртуальної сторінки. Приблизно є одна PTE для кожної не вільної сторінки віртуального адресного простору.

До речі, хоча файл сторінки може відчувати як зовнішню, так і внутрішню фрагментацію (перший зазвичай не представляє особливих проблем; другий можна вдосконалити, зробивши його приблизно в чотири рази більшим, ніж потрібно), таблиці сторінок не можуть. Вони начебто завжди фрагментовані, і це не має значення ні в чому.

Кожен PTE має "дійсний" біт. Для "дійсних", також "резидентних" сторінок, PTE містить номер фізичної сторінки, який відповідає номеру віртуальної сторінки, який пов'язаний з PTE; цим використовується безпосередньо ММУ.

Для "недійсних" сторінок MMU викликає помилку на сторінці, і PTE має багато можливих форматів та інтерпретацій.

Примітка. Все вищезазначене стосується будь-якої операційної системи, яка дозволяє перейти на сторінку x86 / x64. Далі багато в чому характерно для Windows, але багато концепцій стосуються інших ОС, з різницею деталей реалізації.

Для сторінки в кеш-сторінках PTE все ще містить номер фізичної сторінки. Для сторінок, які були втрачені з оперативної пам’яті та записані у файл сторінки, PTE містить номер файлу сторінки та зсув у файлі сторінки, де був записаний вміст сторінки. Інший можливий вміст PTE - це посилання на дескриптори віртуальної адреси , посилання на "прототип PTE", посилання на нульові сторінки тощо, в які я не збираюся потрапляти. Досить сказати, що лише деякі PTE стосуються місць у файлах сторінок.

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

Таблиці сторінок організовані в структуру дерева. Для кожного процесу існує таке дерево, або колекція таблиць сторінок, - це те, що дозволяє кожному процесу визначати власний екземпляр віртуального адресного простору. Таблиця сторінок у корені дерева повинна постійно знаходитися в оперативній пам’яті. Інші користуються сторінкою; вони навіть не існують там, де вони відповідали б великим (мінімум 2 Мб) регіонам невизначеного або вільного віртуального адресного простору.

Записи таблиці сторінок у таблицях на «листках» дерева відповідають сторінкам віртуального адресного простору. PTE-таблиці в таблицях вищого рівня - ті, що ближче до кореня (і самого кореня) - повідомляють, де розташовані наступні таблиці нижчого рівня (якщо вони взагалі існують).

Кількість, показана RAMmap, - це фізична пам'ять (RAM), зайнята всіма резидентними таблицями (в оперативній пам'яті) для всіх процесів плюс ОС.

Тут важливо те, що система в OQ мала 2,5 ГБ оперативної пам’яті, пов’язаної із таблицями сторінок. Це означає, що як мінімум визначено 2,5 ГБ таблиць сторінок. Оскільки таблиці сторінок самі є сторінковими, то віртуальний розмір може бути набагато більшим, ніж фізичний розмір, що все, що нам може показати RAMmap. Але припустимо, що це "лише" 2,5 Гб. В восьми байт на PTE, що становить близько 320 мільйонів PTE. Оскільки кожна PTE визначає одну сторінку - 4 К байт - віртуального адресного простору, це означає, що більше 1,2 терабайт віртуального адресного простору визначається таблицями сторінок в пам'яті .

Це не неможливо, але це досить багато.

Для довідки, у моїй системній атм є близько 125 Мб оперативної пам’яті у табличних сторінках. Це означатиме лише близько 65 ГБ віртуального адресного простору. Моє фактичне віртуальне використання набагато вище (125 ТБ лише для процесів), але це тому, що більшість таблиць сторінок не мають оперативної пам’яті. "Великі сторінки", інша річ, яку я не повинен тут вникати, також може допомогти врахувати різні співвідношення між розмірами таблиць сторінок та розміром віртуального адресного простору, що використовується.

Отже: Щоб знайти винуватця, я спершу заглянув у Монітор продуктивності під категорію «Процес» для процесів з високим лічильником «Віртуальних байт».


4

Виновником для мене був Lenovo "RapidBoot Shield" .

Через тиждень без перезавантаження моя "Сторінка сторінки" використовувала 4 ГБ +. Виявилося, що кожен закінчений процес застряг, використовуючи 20K оперативної пам’яті (приватна 4K приватна таблиця, 16K сторінок), як показано на вкладці «Процеси» RamMap, і їх було ~ 200 000!

Перезавантаження скоротила список, але він знову почав зростати. Його можна було відтворити, відкриваючи блокнот, вбиваючи його та спостерігаючи, що він залишається у списку процесів RamMap.

На підставі пропозицій щодо цієї теми теми я видалив "RapidBoot Sheild", перезавантажив машину, а потім процеси більше не затримувалися, коли їх убили. Проблема вирішена!


3

У моєму випадку це були драйвери фільтрів Aksdf.sys та Hardlock.sys із драйверів Aladdin Knowledge Systems Aladdin . Мені вдалося знайти цю відповідь і за допомогою RAMMap. Він відображав пам'ять, споживану під час припиненого процесу. Процеси були вилучені зі списку процесів Windows, але вони зберігаються в карті пам'яті. Здається, драйвери перешкоджають повному припиненню процесів.


1

Я запитав про це свого відділу ІТ, і вони були аналогічно бамбукові. Я закінчив використовувати DriverEasy для оновлення своїх драйверів. Ті, що, здавалося, мали значення, як не дивно, були драйверами моніторів. Раніше у мене були стандартні драйвери Windows "Generic PnP Monitor". Але коли я оновив їх до правильної моделі та моделі моніторів, проблема, здавалося, відпала.


1

Відкрийте вкладку «Процеси» в RamMap і відсортуйте за назвою. Шукайте підозріло високу кількість того самого процесу. На моїй машині винуватцем (SynTPEnh.exe) був винуватець (частина драйвера тачпада). Після тижня часу роботи він нагромадив десятки тисяч записів у таблиці сторінок розміром 32 кбіт.

Розмір таблиці моєї сторінки склав 1 Гб, після перезавантаження - лише 50 Мб.

введіть тут опис зображення

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