2015-10-09 8 views
0

Я хочу знать, есть ли программа с высоким числом (или самой высокой в ​​системе) ошибок страницы, скажем, в диспетчере задач или Process Explorer, что является признаком фрагментации памяти. Есть ли другой способ выявить эту проблему? (фрагментации памяти). Таким образом, программа с огромными ошибками страницы во время работы может быть из данных, которые не находятся в ОЗУ, но ОС часто прерывает загрузку с диска. Возможной причиной может быть фрагментация памяти? Я хочу знать, если это 2 вещи связаныБольшое количество ошибок страницы имеет какое-либо отношение к фрагментации памяти?

+0

Пожалуйста, добавьте больше деталей о вашей задаче/проблеме в вопрос. – Ilya

ответ

1

Из википедии:

Основные функции подкачки выполняются, когда программа пытается получить доступ к страницам, которые в настоящее время не отображенные в физической памяти (RAM). Эта ситуация известна как ошибка страницы. Затем операционная система должна взять под контроль и обработать ошибку страницы, таким образом, чтобы она была невидима для программы. Поэтому операционная система должна:

Определить местоположение данных во вторичном хранилище. Получитепустую страницу в ОЗУ для использования в качестве контейнера для данных. Загрузите запрошенные данные в доступную рамку страницы. Обновите таблицу страниц до . Обратитесь к новому кадру страницы. Управление возвратом к программе, прозрачно повторяет инструкцию, вызвавшую ошибку страницы.

Таким образом, я бы сказал, что фрагментация обычно не имеет ничего общего с ошибками страницы. Позже это указывает на то, что RAM-память заполнена, и эта конкретная программа потребляет гораздо больше памяти, чем другие, поэтому у него больше памяти в области подкачки, поэтому каждый раз, когда он пытается получить доступ к странице, которая была выгружена ОС, страница возникает ошибка, и ОС должна загрузить эту страницу в ОЗУ.

Это если вы экспериментируете с этой ошибкой с помощью одного процесса. Если вы наблюдаете одну и ту же проблему со всем процессом, это показатель Thrashing. В этом случае объем физической памяти недостаточен для удовлетворения всего текущего процесса, поэтому подсистема виртуальной памяти тратит гораздо больше времени на поисковый вызов. Таким образом, процессы не прогрессируют, потому что каждый раз, когда возникает ошибка страницы, процесс теряет процессор и должен ждать, пока страница не будет готова в ОЗУ.

Фрагментация обычно происходит, когда ваша карта памяти содержит несколько небольших кусков, которые не могут удовлетворить новые оговорки, поэтому процесс начинает запрашивать больше памяти для их размещения. Таким образом, симптом в этом случае - более высокое использование памяти или памяти, не выпущенных в ОС, даже после того, как программа завершила какую-то определенную задачу, которая должна была распределять динамическую память, делать некоторые вещи, а затем выпускать ее.

0

Большое количество ошибок страниц, как правило, вызвано высоким спросом на резидентную память. Фрагментация памяти может быть основной причиной высокого спроса на резидентную память, но это было бы не мое первое предположение.

Возможно, проблема просто нуждается в такой значительной резидентной памяти.

Возможно, проблема в том, что много виртуальной памяти, но алгоритм плохо разработан (плохой локальный доступ), поэтому потребность в резидентной памяти выше, чем она должна быть.

Возможно, программа плохо кодирована, поэтому она использует намного больше памяти, чем ей нужно.

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

Большинство ошибок страниц являются «мягкими» ошибками, что означает, что на самом деле не требуется активность диска. ОС удалила страницы из задачи, не удаляя эти страницы из физического барана, как средство проверки того, какие страницы нуждаются в этой задаче, с более долгосрочной целью не допустить роста «рабочего набора» этой задачи (при неправильном использовании Microsoft термин «рабочий набор»). Это все необходимое и правильное поведение для ОС.

Но когда задача требует, чтобы эти страницы быстро возвращались, вы получаете мягкую ошибку, в которой ОС возвращает эти страницы и убирает другие страницы, вместо того, чтобы понять, что задача требует более высокого общего резидентного бара, и имеется достаточный объемный барабан для его размещения. Я видел много случаев, когда одноядерное процессорное время ядра для обслуживания мягких ошибок составляет 90% или более от прошедшего времени длительной программы, в то время как большая часть барабана машины просто не используется.

+0

Не обвиняйте Microsoft, алгоритмы сбоев страниц отлично справляются. Они публикуют страницы, которые не использовались в последнее время. Вы не можете ожидать, что они будут психическими и предсказывают, какие страницы будут использоваться. Ваше ** собственное управление памятью намного важнее. Если вы смешиваете горячие и холодные данные на одной странице, Windows не может отображать только холодную часть страницы. – MSalters

+0

@ Msalters, я не глуп, и я не слепо обвиняю Microsoft. Я обвиняю Microsoft, потому что я изучил проблему, тщательно ища работу. Я обвиняю Microsoft в том, что тот же исходный код программы, перекомпилированный для Linux и работающий с одинаковым шаблоном доступа к памяти, не перегружается процессорным временем ядра для обслуживания мягких ошибок. (Не то, чтобы я тоже очень доволен управлением памятью Linux, но гораздо менее несчастным). – JSF

+2

Именно поэтому я сказал, что вы не можете ожидать психической ОС. Linux просто случайно ** угадал **, какие страницы будут использовать ваши конкретные программы. Но для каждого шаблона доступа к памяти, который лучше подходит для Linux, есть тот, который лучше в Windows. Кроме того, если вы хотите жестко заявить о себе, вызовите 'VirtualLock'. Или сделайте мягкое требование с помощью' SetProcessWorkingSetSize'. Опять же, алгоритмы не психические, поэтому вы можете помочь, предоставив им информацию о том, что произойдет. – MSalters