Количество ошибок страниц

Сообщения: 10692 Благодарности: 2886

Содержание

  1. Ошибок страницы физической памяти в секунду windows 10 что это
  2. Ошибки распределения памяти могут быть вызваны медленным ростом файла страницы
  3. Симптомы
  4. Причина
  5. Обходной путь
  6. Статус
  7. Дополнительная информация
  8. Ошибок страницы физической памяти в секунду windows 10 что это
  9. Инструкция при указанной ошибке памяти Windows 10 [решено]
  10. Как исправить Инструкция при указанной ошибке памяти в Windows 10
  11. 1. Запустите SFC & DISM Scan
  12. 2. Сканирование на наличие вредоносных программ
  13. 4. Выделите виртуальную память
  14. 5. Запустите обновления Windows
  15. 6. Сбросить систему
  16. Ошибок страницы физической памяти в секунду windows 10 что это

Ошибок страницы физической памяти в секунду windows 10 что это

contributor

Сообщения: 10692
Благодарности: 2886

•Ошибок отсутствия страницы в памяти/сек – ошибка отсутствия в памяти. Как правило, она может быть критической (но не всегда). Также может указывать на нехватку оперативной памяти. Такая ошибка возникает в тех случаях, когда система использует файл подкачки, который находится на жестком диске. Жесткий диск работает медленнее оперативной памяти, и использование файла подкачки снижает быстродействие системы. Если подобные ошибки слишком часто возникают, лучше расширить оперативную память.

1. Откройте командную строку с Административными правами.
2. В командной строке введите следующую команду и нажмите клавишу ВВОД:

По окончании выложите C:windowsLogsCBS CBS.log в архиве.

Запустите AIDA64 Portable от имени Администратора > Сверху, в окне программы AIDA нажмите «Отчет» >
Далее > выберите «Аппаратные разделы» > Далее > Простой текст > Готово > Сохранить в файл.

Файл, в архиве, подкрепите к сообщению.

» width=»100%» style=»BORDER-RIGHT: #719bd9 1px solid; BORDER-LEFT: #719bd9 1px solid; BORDER-BOTTOM: #719bd9 1px solid» cellpadding=»6″ cellspacing=»0″ border=»0″>

Сообщения: 3
Благодарности:

Доброго времени суток господа.

AkjO87ul

oAIUvHAl
czWKCBCl
rGRolHNl
djrgSAbl
qcLyk7ql

VLZcZZRl
6TDQS6ml

так. что еще можно сказать то.

Пожалуй это и натолкнуло меня написать пост именно здесь, а не создавать тему, т.к. на первый взгляд кажется всё это тесно связано между собой.

По поводу раммапа, похоже там критических утечек нет, но на мой взгляд многовато всё же для 2-х гигов)

Источник

Ошибки распределения памяти могут быть вызваны медленным ростом файла страницы

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

Применяется к: Windows 10 — все выпуски
Исходный номер КБ: 4055223

Симптомы

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

Причина

Сбои в распределении памяти могут возникать из-за задержки, связанные с ростом размера файла страницы для поддержки дополнительных требований к памяти в системе. Возможной причиной этих сбоев является настройка размера файла страницы в качестве «автоматического». Автоматический размер файла страницы начинается с небольшого файла страницы и автоматически растет по мере необходимости.

Система IO состоит из многих компонентов, включая фильтры файловой системы, файловые системы, фильтры громкости, фильтры хранения и т. д. Определенные компоненты в данной системе могут привести к вариативности в росте файлов страниц.

Обходной путь

Чтобы решить эту проблему, необходимо вручную настроить размер файла страницы. Для этого выполните следующие действия:

Статус

Корпорация Майкрософт подтвердила, что это проблема в Windows 10.

Дополнительная информация

При использовании компиляторов Microsoft Visual C++ (cl.exe) могут возникнуть такие ошибки сборки, как следующие:

Дополнительные сведения об ошибках компиляторов Visual C++ и о том, как их обойти, см. в материале Precompiled Header (PCH) issues and recommendations.

Источник

Ошибок страницы физической памяти в секунду windows 10 что это

contributor

Сообщения: 10692
Благодарности: 2886

•Ошибок отсутствия страницы в памяти/сек – ошибка отсутствия в памяти. Как правило, она может быть критической (но не всегда). Также может указывать на нехватку оперативной памяти. Такая ошибка возникает в тех случаях, когда система использует файл подкачки, который находится на жестком диске. Жесткий диск работает медленнее оперативной памяти, и использование файла подкачки снижает быстродействие системы. Если подобные ошибки слишком часто возникают, лучше расширить оперативную память.

1. Откройте командную строку с Административными правами.
2. В командной строке введите следующую команду и нажмите клавишу ВВОД:

По окончании выложите C:windowsLogsCBS CBS.log в архиве.

Запустите AIDA64 Portable от имени Администратора > Сверху, в окне программы AIDA нажмите «Отчет» >
Далее > выберите «Аппаратные разделы» > Далее > Простой текст > Готово > Сохранить в файл.

Файл, в архиве, подкрепите к сообщению.

» width=»100%» style=»BORDER-RIGHT: #719bd9 1px solid; BORDER-LEFT: #719bd9 1px solid; BORDER-BOTTOM: #719bd9 1px solid» cellpadding=»6″ cellspacing=»0″ border=»0″>

Сообщения: 3
Благодарности:

Доброго времени суток господа.

AkjO87ul

oAIUvHAl
czWKCBCl
rGRolHNl
djrgSAbl
qcLyk7ql

VLZcZZRl
6TDQS6ml

так. что еще можно сказать то.

Пожалуй это и натолкнуло меня написать пост именно здесь, а не создавать тему, т.к. на первый взгляд кажется всё это тесно связано между собой.

По поводу раммапа, похоже там критических утечек нет, но на мой взгляд многовато всё же для 2-х гигов)

Источник

Инструкция при указанной ошибке памяти Windows 10 [решено]

Инструкция в 0x00 ### ссылается на память в 0x00 ###. Ошибка чтения памяти : ошибка, связанная с ОЗУ, связанная как с системными, так и с сторонними приложениями, работающими в Windows 10. Обычно это означает, что приложение не может прочитать назначенную физическую память.

Один пользователь поделился своими проблемами на форуме Microsoft.

Когда я закрываю/перезагружаю Windows зависает с этой ошибкой
explorer.exe – ошибка приложения
Инструкция по адресу 0x00007ffee39ecc60 ссылается на память
0x0000000000000000. Память не может быть прочитана.
Местоположение памяти команд меняется с каждым отключением, но 00007ff …………. постоянно …

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

Как исправить Инструкция при указанной ошибке памяти в Windows 10

1. Запустите SFC & DISM Scan

Кроме того, вы можете использовать проактивные инструменты, такие как CCleaner или другие инструменты для очистки ПК, чтобы восстановить поврежденные системные файлы в реестре Windows.

2. Сканирование на наличие вредоносных программ

4. Выделите виртуальную память

5. Запустите обновления Windows

6. Сбросить систему

В качестве альтернативы, вы должны сканировать вашу оперативную память на наличие ошибок и убедиться, что вы соответствуете системным требованиям для запуска уязвимого приложения или игры, которая вызывает ошибку. Система Windows 10 требует как минимум 1 ГБ ОЗУ, но в идеале вы бы выбрали как минимум 2 ГБ.

Источник

Ошибок страницы физической памяти в секунду windows 10 что это

Что это такое? Как понимать его показания? В справке не описано.
Это нормально, когда у программы он растет со скоростью 2-3 тыс единиц в секунду?

topdown
homm © ( 2007-05-01 14:42 ) [1]

> Что это такое? Как понимать его показания?

Да не паникуй ты так. Это количество страниц, к котрым онадобился доступ когда их не было в оперативной памяти. А если еще точнее, то количество страниц, к котрым онадобился доступ когда их не было в рабочем наборе приложения, что не значит что их не было в оперативе.


> Это нормально, когда у программы он растет со скоростью
> 2-3 тыс единиц в секунду?

Нет 🙂 Пора идти в магазин за оперативой 🙂

topdown
Eraser © ( 2007-05-01 14:42 ) [2]

> [0] DVM © (01.05.07 13:42)


> Что это такое?

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

> Это нормально, когда у программы он растет со скоростью
> 2-3 тыс единиц в секунду?

не очень (хотя тут нужно смотреть конкретную ситуацию), нужно побольше ОЗУ.

topdown
homm © ( 2007-05-01 15:05 ) [3]

> Это нормально, когда у программы он растет со скоростью
> 2-3 тыс единиц в секунду?

Я счас подергал окошко оперы за края, погонял апатчь, до 5 тышь в секунду доходило. Вот же уродский оптимайзер памяти у винды 🙁 Так что пара тысячь в секунду — вполне нормально.

procedure FastDIB2Bitmap(Src:TFastDIB;Dst:TBitmap);
begin
if Src.Handle<>0 then
begin
Dst.Handle:=Src.Handle;
// bitmaps can be selected for only one device context at a time
if(Src.hDC<>0)and Src.FreeDC then DeleteDC(Src.hDC);
if(Src.hPen<>0)then DeleteObject(Src.hPen);
if(Src.hFont<>0)then DeleteObject(Src.hFont);
if(Src.hBrush<>0)then DeleteObject(Src.hBrush);
Src.hDC:=0;
Src.FreeDC:=False;
Src.FreeBits:=False;
Src.FreeHandle:=False;
end;
end;

Вот такие преобразования моя программа делает до 200 в секунду.
Если я комментирую преобразование, то счетчик не растет практически.

Памяти 100% достаточно. Ее количество не влияет на этот счетчик. 2Гб ее.

topdown
antonn © ( 2007-05-01 16:43 ) [6]


> ну если это не дает лишней нагрузки на CPU

Не нагрузки не дает абсолютно. Память не растет, никакие ресурсы не уменьшаются.

topdown
Eraser © ( 2007-05-01 17:28 ) [8]

> [6] antonn © (01.05.07 16:43)

в Делфи идентификатор объекта является указателем на объект )

topdown
antonn © ( 2007-05-01 18:09 ) [9]


> в Делфи идентификатор объекта является указателем на объект
> )

По логике, нужно сначала всё освободить, потом присваивать Handle. Возможно, и освобождать необязательно, во всяком случае в примере Bumpmap сделано так:

procedure TBumpForm.SetThumbnail(Image:TImage; Bmp:TFastDIB);
var
Tmp: TFastDIB;
begin
Tmp:=TFastDIB.Create;
Tmp.SetSize(105,105,Bmp.Bpp);
if Tmp.Bpp=8 then
begin
Tmp.Colors^:=Bmp.Colors^;
Tmp.UpdateColors;
end;

Bilinear(Bmp,Tmp);
Tmp.FreeHandle:=False;
Image.Picture.Bitmap.Handle:=Tmp.Handle;
Tmp.Free;
Image.Refresh;
end;

А вообще, откуда надобность выполнять подобное преобразование 200 раз/c? Может лучше выкинуть TBitmap и выполнять все операции с TFastDIB? А то мне сейчас лень смотреть, но подозреваю, что в TBitmap.SetHandle куда больше действий, чем просто присвоение переменной.


> А вообще, откуда надобность выполнять подобное преобразование
> 200 раз/c?

Да есть вот задачи. Видеонаблюдение.


> Может лучше выкинуть TBitmap и выполнять все операции с
> TFastDIB?

Так и планирую сделать, но есть свои грабли и очень много вносить изменений. В принципе FastDIB тут прикручен из-за фантастически быстрой SetSize.


> TBitmap.SetHandle куда больше действий, чем просто присвоение
> переменной.

Да, там намного больше действий.


> Sapersky

Не подскажите, как правильно скопировать один TFastDIB в другой. Не Assign(), а именно копирование? У меня вот какая штука:

Во вторичном потоке происходит декодирование JPEG в TFastDIB. Далее этот FastDIB с сообщением высылается в основной поток и там преобразуется в TBitmap, который и отрисовывается при необходимости в основном потоке по WM_PAINT. Так сделано сейчас. Так вот получается, что и основной поток и вторичный на деле же работают с одним и тем же хэндлом одного и того же битмапа по сути. Ведь FastDIB2Bitmap просто присваивает хэндл. И пока первичный поток отрисовывает его на окне вторичный ведь может и поменять его содержимое. Или я неправ? Так можно делать или надо полностью копироваить битмап в основной поток и там работать с ним?

topdown
homm © ( 2007-05-01 22:06 ) [12]

Хм, а я кажеться понял почему так много ошибок доступа в этом месте. Потому что по Dst.Handle:=Src.Handle; Dst фактически заново создаеться, под новый битмап выделяеться память. А менеджер памяти в виндовсе имеет такое замечательное свойство, не выделять память физически, а лишь помечать страницы как зарезервированые. А вот когда уже на новый хэндл уже копируеться изображение со старого, идет непосредственное обращение к страницам, и они выделяются физически (в ОП), а счетчик ошибок доступа мотает. Так что эта строчка имхо — большая дыра в производительности. Попробуй как минимум создавать TBitmap как DIB, как максимум, здесь вобще нужно логику программы переделывать.

topdown
homm © ( 2007-05-01 22:11 ) [13]

> Так вот получается, что и основной поток и вторичный на
> деле же работают с одним и тем же хэндлом одного и того
> же битмапа по сути.

Скорее всего нет. Как я понимаю невозможно преобразовать DDB в DIB не выделив под него второй хэндл.


> Потому что по Dst.Handle:=Src.Handle; Dst фактически заново
> создаеться, под новый битмап выделяеться память

Да, получается, что так.


> Так что эта строчка имхо — большая дыра в производительности.

Может быть, но это далеко не самая тяжелая операция. Декодирование из JPEG во вторичных потоках занимает в тысячи раз больше времени.

topdown
Sapersky ( 2007-05-02 00:38 ) [16]

Не подскажите, как правильно скопировать один TFastDIB в другой. Не Assign(), а именно копирование?

Dst.MakeCopy(Src, True); // делается SetSize и Move
Или можно (при UseGDI = True) установить размер Dst = Src, потом
Src.Draw(Dst.hDC, 0, 0); // фактически BitBlt
удобно тем, что конвертирует битмапы разных форматов, хотя, как правило, не очень качественно. Впрочем, для этого есть FConvert.pas.

И пока первичный поток отрисовывает его на окне вторичный ведь может и поменять его содержимое. Так можно делать или надо полностью копироваить битмап в основной поток и там работать с ним?

topdown
Игорь Шевченко © ( 2007-05-02 10:29 ) [17]


> Вот же уродский оптимайзер памяти у винды

Слону, сам понимаешь, пофиг.


> Sapersky (02.05.07 00:38) [16]

Большое спасибо. Метод TFastDib.MakeCopy() действительно то что нужно.

Счетчики ошибок страницы не растут. Утечек тоже нет. Как обстоят дела с производительностью такого решения выясняю.

Источник

Adblock
detector

С развитием компьютерных систем объем памяти и объем информации внутри ПК также постепенно увеличивались. Обработка этой информации памяти является нормальной частью серьезных сбоев. Жесткие ошибки не связаны с качеством или маркой памяти, а являются исключением, обычно возникающим при нормальной или нерегулярной обработке. В этом руководстве мы узнаем гораздо больше о серьезных ошибках памяти в секунду, о том, почему возникает чрезмерное количество серьезных ошибок, а также о некоторых методах, которые помогут решить проблему с жесткими ошибками памяти. Если вы ищете решения для серьезных сбоев, связанных с проблемой свободной памяти, присоединяйтесь и ознакомьтесь с некоторыми из эффективных исправлений, которые устранят серьезные сбои монитора ресурсов Windows.

Что такое Жесткие ошибки в секунду? Как это исправить

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

Что вызывает серьезные сбои со свободной памятью?

Несмотря на то, что вы уже знакомы с основной причиной серьезных сбоев, которая заключается в нехватке оперативной памяти в ПК, при проверке системы. Многие пользователи сообщают о наличии свободной памяти, сталкиваясь с десятками серьезных сбоев. В этом случае не вводите в заблуждение доступную или свободную память, отображаемую в диспетчере задач вашего ПК. Большая часть этой памяти не свободна и уже используется, что приводит к большому противоречию.

Помимо проблем с памятью, число выше обычного (20 или меньше, учитывая объем вашей оперативной памяти) является проблемой для вас. Это может быть вызвано различными причинами, перечисленными ниже:

  • Жесткие ошибки в секунду возникают, когда адресная память конкретной программы была переключена на основной файл подкачки, а не на слот основной памяти. Это приводит к замедлению работы ПК и повышению активности жесткого диска из-за попыток найти недостающую память.
  • Кроме того, проблема высоких аппаратных сбоев может возникнуть во время перегрузки жесткого диска. В этом случае жесткий диск продолжает работать на полной скорости, пока на вашем компьютере происходит перегрузка диска или когда программа перестает отвечать на запросы.
  • Кроме того, серьезные сбои могут возникнуть при одновременном запуске слишком большого количества программ на ПК.

Что такое серьезные сбои монитора ресурсов Windows?

Монитор ресурсов является важным инструментом для ПК, который передает информацию о потоках данных в режиме реального времени о важных системах, работающих на вашем компьютере. Утилита чрезвычайно полезна для мониторинга состояния вашей системы и устранения проблем, связанных с ее производительностью. Вы можете проверить наличие и распределение нескольких ресурсов в вашей системе с помощью монитора ресурсов. Вы также можете проверить информацию об использовании оборудования, включая память, ЦП, диск и сеть, а также программное обеспечение, включая дескрипторы файлов и модули. В разделе «Память» вы, скорее всего, проверите количество серьезных сбоев в секунду, представляющее процент используемой физической памяти. В общем, Resource Monitor — удивительно важная утилита во всех версиях Windows.

Как исправить серьезные ошибки памяти в секунду

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

Способ 1: добавить больше оперативной памяти

Как мы уже обсуждали, основной причиной большего количества серьезных сбоев в секунду является нехватка оперативной памяти. Следовательно, чтобы решить проблему серьезных сбоев, вам нужно больше оперативной памяти. Чем больше у вас их, тем меньше серьезных ошибок в секунду вы будете сталкиваться. Для этого вы можете начать с проверки конфигурации вашей системы, чтобы узнать, достаточно ли у вас оперативной памяти в текущей версии Windows. Если вы не соответствуете требованиям (для 64-битной версии требуется в два раза больше памяти, чем для 32-битной версии), вам необходимо купить дополнительную оперативную память или добавить больше на свой компьютер. Вы можете ознакомиться с нашим руководством о том, как увеличить объем оперативной памяти в Windows 7 и 10.

Кроме того, чтобы увеличить видеопамять (VRAM), вы можете ознакомиться с нашим руководством по 3 способам увеличения выделенной видеопамяти в Windows 10.

Способ 2: повторно включить Pagefile.sys

В случае, если у вас возникли серьезные проблемы со свободной памятью, этот метод поможет вам решить проблему довольно эффективно. Это включает в себя отключение и повторное включение Pagefile.sys. Ваш ПК с Windows предназначен для использования файла подкачки.

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

Вот как вы можете сначала отключить, а затем снова включить Pagefile.sys:

Примечание. Если файл подкачки отключен, некоторые программы не будут работать должным образом, поскольку они предназначены исключительно для его использования.

1. Откройте проводник, одновременно нажав клавиши Windows + E.

2. Теперь щелкните правой кнопкой мыши «Этот компьютер» и выберите «Свойства» в меню.

3. Нажмите Дополнительные параметры системы на боковой панели.

4. На вкладке «Дополнительно» нажмите «Настройки…» в разделе «Производительность».

5. Теперь на вкладке «Дополнительно» нажмите кнопку «Изменить…».

6. Затем снимите флажок Автоматически управлять размером файла подкачки для всех дисков.

7. Теперь выберите диск, для которого вы хотите отключить Pagefile.sys, и выберите «Нет файла подкачки».

8. Затем нажмите Set > OK, чтобы сохранить изменения.

9. После этого перезагрузите компьютер, чтобы изменения вступили в силу.

10. Наконец, вы можете снова включить Pagefile.sys с помощью шагов, описанных выше.

Способ 3: определить сборщик ресурсов и завершить дерево процессов

Если вы все еще боретесь с серьезными сбоями монитора ресурсов Windows, вы должны попытаться определить программу, которая увеличивает число серьезных сбоев в секунду. Этот процесс несет ответственность за слишком много памяти на вашем ПК и, следовательно, является виновником. С помощью Resource Monitor вы можете легко найти основной процесс, ответственный за эту ситуацию. Итак, следуйте инструкциям ниже, чтобы найти пожиратель ресурсов в вашей системе:

1. Нажмите одновременно клавиши Ctrl + Shift + Esc, чтобы запустить диспетчер задач.

2. Перейдите на вкладку «Производительность» и нажмите «Открыть монитор ресурсов».

3. На вкладке «Память» окна «Монитор ресурсов» щелкните столбец «Серьезные сбои».

4. Теперь проверьте процесс, замедляющий работу вашего ПК, и щелкните его правой кнопкой мыши.

5. Выберите в меню Завершить дерево процессов, чтобы завершить задачу.

Примечание. Если программа не важна, ее можно удалить.

Часто задаваемые вопросы (FAQ)

Q1. Сколько серьезных ошибок в секунду является нормальным?

Ответ В среднем 20 или менее серьезных ошибок в секунду являются нормальными, в зависимости от оперативной памяти вашей системы.

Q2. Часто ли возникают серьезные сбои памяти?

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

Q3. Как я могу отслеживать отказы жестких страниц?

Ответ Сбои жесткой страницы можно отслеживать с помощью консоли Performance Monitor (Perfmon). Он представляет собой кумулятивное количество ошибок страниц в системе.

Q4. Что приводит к зависанию диска?

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

Q5. В чем причина высокого использования памяти?

Ответ Высокое использование памяти в системе является результатом перегрузки многих внутренних процессов.

***

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

Анализ использования памяти с помощью Монитора ресурсов Windows 7

Прежде чем приступать к анализу, коротко расскажу о том, как Microsoft Windows 7 управляет памятью. После этого вам будет проще понять, какая информация представлена в Мониторе ресурсов Windows 7.

Диспетчер памяти Windows 7 создает виртуальную систему памяти, которая состоит из доступной физической RAM и файла подкачки на жестком диске. Это позволяет операционной системе выделять блоки памяти фиксированной длины (страницы) с последовательными адресами в физической и виртуальной памяти.

Запуск Монитора ресурсов Windows 7

Чтобы запустить Монитор ресурсов Windows 7, откройте меню «Пуск» (Start), введите в строке поиска «Resmon.exe» и нажмите [Enter]. В открывшемся окне выберите вкладку «Память» (Memory, рис. A).

Анализ использования памяти с помощью Монитора ресурсов Windows 7
Рисунок A. На вкладке «Память» в Мониторе ресурсов Windows 7 приводятся подробные сведения о распределении памяти.

Таблица «Процессы»

На вкладке «Память» есть таблица «Процессы» (Processes, рис. B), в которой перечислены все запущенные процессы, а сведения об используемой памяти разбиты на несколько категорий.

Анализ использования памяти с помощью Монитора ресурсов Windows 7
Рисунок B. Сведения об используемой памяти для каждого процесса разбиты на несколько категорий.

Графа «Образ»

В колонке «Образ» (Image) указывается имя исполняемого файла процесса. Процессы, запущенные приложениями, узнать очень легко — например, процесс «notepad.exe» со всей очевидностью принадлежит Блокноту (Notepad). Процессы с именем «svchost.exe» представляют различные службы операционной системы. Название службы указывается в скобках рядом с именем процесса.

Графа «ИД процесса»

В колонке «ИД процесса» (PID) указывается номер процесса — уникальное сочетание цифр, позволяющее идентифицировать запущенный процесс.

Графа «Завершено»

В столбце «Завершено» (Commit) указывается объем виртуальной памяти в килобайтах, зарезервированный системой для данного процесса. Сюда входит и используемая физическая память, и сохраненные в файле подкачки страницы.

Графа «Рабочий набор»

В графе «Рабочий набор» (Working Set) указывается объем физической памяти в килобайтах, используемой процессом в данный момент времени. Рабочий набор складывается из общей и частной памяти.

Графа «Общий»

В колонке «Общий» (Shareable) указан объем физической памяти в килобайтах, которую данный процесс использует совместно с другими. Использование одного сегмента памяти или страницы подкачки для родственных процессов позволяет сэкономить место в памяти. При этом физически сохраняется только одна копия страницы, которая затем сопоставляется с виртуальным адресным пространством других процессов, которые к ней обращаются. Например, все процессы, инициированные системными библиотеками DLL — Ntdll, Kernel32, Gdi32 и User32 — используют общую память.

Графа «Частный»

В столбце «Частный» (Private) указывается объем физической памяти в килобайтах, используемой исключительно данным процессом. Именно это значение позволяет определить, сколько памяти нужно тому или иному приложению для работы.

Графа «Ошибок отсутствия страницы в памяти/сек.»

В графе «Ошибок отсутствия страницы в памяти/сек.» (Hard Faults/sec) указано среднее за последнюю минуту количество ошибок отсутствия страницы в памяти в секунду. Если процесс пытается использовать больше физической памяти, чем доступно в данный момент времени, система записывает часть данных из памяти на диск — в файл подкачки. Последующее обращение к данным, сохраненным на диск, и называется ошибкой отсутствия страницы в памяти.

О чем говорят ошибки отсутствия страницы в памяти

Теперь, когда вы представляете, какие сведения собраны в таблице «Процессы», давайте посмотрим, как с их помощью следить за распределением памяти. При запуске приложений и работе с файлами диспетчер памяти отслеживает объем рабочего набора для каждого процесса и фиксирует запросы на дополнительные ресурсы памяти. По мере увеличения рабочего набора процесса, диспетчер соотносит эти запросы с потребностями ядра и других процессов. Если доступного адресного пространства недостаточно, диспетчер уменьшает объем рабочего набора, сохраняя данные из памяти на диск.

В дальнейшем при чтении этих данных с диска возникает ошибка отсутствия страницы в памяти. Это вполне нормально, но если ошибки происходят одновременно для разных процессов, системе требуется дополнительное время для чтения данных с диска. Слишком частые ошибки отсутствия страницы в памяти, соответственно, снижают быстродействие системы. Вам наверняка доводилось наблюдать неожиданное замедление работы всех приложений, которое затем также неожиданно прекращалось. Почти наверняка это замедление было связано с активным перераспределением данных между физической памятью и подкачкой.

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

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

Стоит учитывать, что распределение памяти зависит от целого ряда других факторов, и мониторинг ошибок отсутствия страницы в памяти — не лучший и не единственный способ выявления проблем. Тем не менее, он может послужить неплохой отправной точкой для наблюдения.

Таблица «Физическая память»

В таблице «Процессы» приводятся детальные сведения о распределении памяти между отдельными процессами, а таблица «Физическая память» (Physical Memory) дает общую картину использования RAM. Ее ключевой компонент — уникальная гистограмма, показанная на рис. C.

Анализ использования памяти с помощью Монитора ресурсов Windows 7
Рисунок C. Гистограмма в таблице «Физическая память» позволяет составить общее представление о распределении памяти в Windows 7.

Каждая секция гистограммы обозначена собственным цветом и представляет определенную группу страниц памяти. По мере использования системы, диспетчер памяти в фоновом режиме перемещает данные между этими группами, поддерживая тонкий баланс между физической и виртуальной памятью для обеспечения эффективной работы всех приложений. Давайте рассмотрим гистограмму поподробнее.

Секция «Зарезервированное оборудование»

Слева расположена секция «Зарезервированное оборудование» (Hardware Reserved), обозначенная серым цветом: это память, выделенная на нужды подключенного оборудования, которую оно использует для взаимодействия с операционной системой. Зарезервированная для оборудования память заблокирована и недоступна диспетчеру памяти.

Обычно объем памяти, выделенной оборудованию, составляет от 10 до 70 Мбайт, однако этот показатель зависит от конкретной конфигурации системы и в некоторых случаях может достигать нескольких сотен мегабайт. К компонентам, влияющим на объем зарезервированной памяти, относятся:

• BIOS;
• компоненты материнской платы — например, усовершенствованный программируемый контроллер прерываний ввода/вывода (APIC);
• звуковые карты и другие устройства, осуществляющие ввод/вывод с отображением на память;
• шина PCI Express (PCIe);
• видеокарты;
• различные наборы микросхем;
• флеш-накопители.

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

Секция «Используется»

Секция «Используется» (In Use, рис C), обозначенная зеленым цветом, представляет количество памяти, используемой системой, драйверами и запущенными процессами. Количество используемой памяти рассчитывается, как значение «Всего» (Total) за вычетом суммы показателей «Изменено» (Modified), «Ожидание» (Standby) и «Свободно» (Free). В свою очередь, значение «Всего» — это показатель «Установлено» (Installed RAM) за вычетом показателя «Зарезервированное оборудование».

Секция «Изменено»

Оранжевым цветом выделена секция «Изменено» (Modified), в которой представлена измененная, но не задействованная память. Фактически она не используется, но может быть в любой момент задействована, если снова понадобится. Если память не используется достаточно давно, данные переносятся в файл подкачки, а память переходит в категорию «Ожидание».

Секция «Ожидание»

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

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

Секция «Свободно»

В категории «Свободно», обозначенной голубым цветом, представлены страницы памяти, еще не выделенные ни одному процессу или освободившиеся после завершения процесса. В этой секции отображается как еще не задействованная, так и уже освобожденная память, но на самом деле, еще не задействованная память относится к другой категории — «Нулевые страницы» (Zero Page), которая так называется, потому что эти страницы инициализированы нулевым значением и готовы для использования.

О проблеме свободной памяти

Теперь, когда вы в общих чертах представляете, как работает диспетчер памяти, ненадолго остановимся на распространенном заблуждении, связанном с системой управления памятью в Windows 7. Как видно из рис. C, секция свободной памяти — одна из самых маленьких в гистограмме. Тем не менее, ошибочно на этом основании полагать, будто Windows 7 потребляет чересчур много памяти и что система не может нормально работать, если свободной памяти так мало.

На самом деле, все совсем наоборот. В контексте принятого в Windows 7 подхода к управлению памятью, свободная память бесполезна. Чем больше памяти задействовано, тем лучше. Заполняя память до максимума и постоянно перемещая страницы из одной категории в другую с использованием системы приоритетов, Windows 7 повышает эффективность работы и предотвращает попадание данных в файл подкачки, не давая ошибкам отсутствия страницы в памяти замедлить быстродействие.

Мониторинг памяти

Хотите понаблюдать систему управления памятью Windows 7 в действии? Перезагрузите компьютер и сразу же после запуска откройте Монитор ресурсов Windows 7. Перейдите на вкладку «Память» и обратите внимание на соотношение секций в гистограмме физической памяти.

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

Проделав этот экстремальный эксперимент, вы поймете, как Windows 7 управляет памятью на вашем конкретном компьютере, и сможете использовать Монитор ресурсов Windows 7 для наблюдения за распределением памяти в нормальных условиях повседневной работы.

А что думаете вы?

Нравится ли вам идея использовать Монитор ресурсов Windows 7 для наблюдения за распределением памяти? Поделитесь своим мнением в комментариях!

Автор: Greg Shultz
Перевод SVET

Оцените статью: Голосов

Монитор ресурсов Windows как средство диагностики.

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

Запуск Монитора ресурсов

Для быстрого вызова Монитора зажимаем сочетание Win + R для вызова строки поиска и вводим быструю команду:

Эта же команда доступна и для командной строки cmd от имени администратора:

монитор ресурсов из командной строки cmd

Монитор ресурсов представляет собой программу, состоящую из нескольких вкладок, которые дублируют строки главного окна-вкладки приложения Обзор:

монитор ресурсов

Все свёрнутые в строку данные разворачиваются с подробным описанием каждого из процесса и служб Windows. По вашему выбору графическое отображение диаграмм в правом квадранте окна программы также можно изменить.

За чем следит Монитор ресурсов?

В режиме реального времени вы можете просматривать информацию о работе и загрузке процессора, RAM, скорости обмена данными с жёстким диском и данными по сетевому соединению. Причём выбираемый галочкой процесс во вкладке Обзор автоматически применяет фильтр на остальные строчки того же окна, помещая сам процесс в верхнюю часть окна. Вот как, например, выглядит скачивание и установка обновлений в Windows 7:

процесс в мониторе ресурсов

  1. TrustedInstaller — доверенное приложение отображается как …
  2. Установщик модулей Windows, забирая четверть мощности центрального процессора,…
  3. начиная запись с отображаемыми во вкладке Диск…
  4. файлами на жёстком диске компьютера, показывая полную информацию о потребляемых при этом ресурсах; для каждого файла показан полный путь к месту его хранения.
  5. При этом в правой части окна подсвечивается та же информация (участие выбранного процесса), но в виде диаграммы.

Конкретика или что во вкладках Монитора?

От обзорной вкладки перейдём к конкретным показателям. Окна Монитора доступны к изменениям и визуальным настройкам:

монитор ресурсов в полный экран

Каждое из окон показывает список программ, которые в данный момент потребляют хоть какие-то ресурсы компьютера. К вашему сведению предлагаются все модули, файлы библиотек, ключи реестра, события и пути к местам хранения файлов, связанных с выбранным процессом:

процесс в мониторе ресурсов

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

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

оперативная память на процесс

Обратите внимание на столбец с наименованием Ошибок отсутствия страниц в памяти в секунду. Нормальный показатель здесь — 0, но и другая цифра не должна вас смущать. Цифры в столбце не означают ошибки памяти, это лишь показатель того, что системе в какой-то момент «немного не хватило» физических объёмов RAM, и та отправилась за дополнительными объёмами оперативки к swap-файлу на жёстком диске. Повторюсь, эта ситуация при небольших показателях в столбце абсолютно нормальна.

  • Диск — показана информация по степени загруженности жёсткого диска выбранным процессом. Их уже не так много, так как нет смысла перечислять все процессы, висящие в памяти Windows. Отсюда хорошо видно, куда сейчас записываются данные или из которых осуществляется чтение.

запись и чтение данных с жёсткого диска процессом

Разверните строку Запоминающие устройства: увидите активность установленных логических томов по отношению к выбранному процессу. Эта вкладка, кстати, прекрасный инструмент для первоначального анализа «непонятных» процессов: слишком активная деятельность несистемных и неизвестных вам процессов должна вас насторожить. Плюсом к тому, показатель Длины очереди диска не должен забегать за единицы и, тем более, десятки единиц, если сейчас не происходит интенсивная запись чего-либо. В противном случае, присмотритесь к происходящим процессам.

  • Сеть — показана сетевая активность процессов. Здесь всё просто — если процесс отображён, значит его сейчас используют чьи-то сторонние сервера. И именно эти процессы сейчас грузят ваше сетевое соединение. Разверните все строчки основного окна вкладки:

сетевая активность приложений в мониторе ресурсов

Монитор ресурсов во вкладке подробно показывает ваши (локальные) и внешние IP адреса, порты и протоколы, по которым сейчас ведут общение выбранные процессы. Если вы имеете представления об этих понятиях, дальнейшие объяснения излишни. Смотрите и проверяйте.

Что Монитор ресурсов может починить?

Ничего. Монитор ресурсов не является ремонтной утилитой системы, однако является прекрасным инструментом предоставления отчётности. При этом является развёрнутым вариантом или своеобразным «аналогом» Диспетчера задач с некоторыми похожими функциями. Так, Монитор ресурсов способен не только приостанавливать выбранные процессы, но и выдавать отчёт по тем, что зависли во время выполнения. Более того, по каждому процессу из списка можно будет получить справку: нажмите правой мышкой по любому процессу, выберите Поиск в интернете, и браузер по умолчанию ответит поисковой выдачей по этому процессу.

поиск в интернете из монитора ресурсов

Если вы хотите получить отчёт в общем виде о состоянии системы, возможно вас заинтересует готовый вариант по общим данным состояния Windows, который можно получить из строки cmd от Системного монитора:

Проблемы: Монитор ресурсов не отвечает

Разберём тот случай, когда Монитор не появляется после вызова на экран. В этом случае вам следует вспомнить, что сама утилита под именем resmon.exe прежде всего располагается в директории Windows с остальными системными приложениями по адресу:

C:WindowsSystem32

Попробуйте запустить утилиту прямо оттуда. Если вы испытываете проблемы с Монитором в Windows 7, то попробуйте для начала переключиться на любую тему Аэро. Если прокатило, то для включения Монитора ресурсов вам придётся постоянно менять тему на какую-то из состава пакета Aero:

темы Aero в windows 7

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

Панель управленияВсе элементы панели управленияЭкран

удобство чтения с экрана

Следующим шагом по решению проблем является чистая загрузка Windows. Так, вам необходимо отключить все дополнительные программы, службы и драйвера, воспользовавшись любым удобным инструментом. Это может утилита msconfig или раздел Автозагрузка программы CCleaner.

Наконец, финальный этап исправления любых ошибок, связанных с системными утилитами Windows. Это проверка состояния системных файлов. Для запуска откройте консоль команд cmd от имени администратора и наберите :

Ошибок отсутствия страницы в памяти что это

Сообщения: 10692
Благодарности: 2891

Конфигурация компьютера
Процессор: IntelCorei3-2100 CPU @ 3.10GHz, 3100 МГц, ядер: 2, логических процессоров: 4
Материнская плата: MSI H61M-P21 (MS-7680) (B3.0)
Память: Kingston 99U5471-052.A00LF 8Gb DDR3-1333 DDR3 SDRAM; Samsung M378B5773DH0-CH9 2Gb DDR3-1333 DDR3 SDRAM
HDD: WDC Caviar Green WD10EARS-22Y5B1 ATA Device 1Т (1000 Gb), WDC Caviar Blue WD10EZEX-08M2NA0 ATA Device 1Т (1000 Gb)
Видеокарта: Sapphire Radeon HD 6570 650Mhz PCI-E 2.1 2048Mb 1600Mhz 128 bit DVI HDMI HDCP
Звук: VIA VT1708S VIA High Definition Audio
Блок питания: OCZ ZS Series Power Supply 550W 2014 г.
CD/DVD: ATAPI iHAS122 ATA Device
Монитор: LG FLATRON E2050 1600×900
ОС: Microsoft Windows 7 Home Basic x86, Microsoft Windows 10 Home x64 .
Индекс производительности Windows: 5.9
Прочее: Multi Flash Reader USB Device, Logitech HD Webcam C310

По этому файлу ПКМ > Анализ цепочки ожидания. Что там ?

1. Откройте командную строку с Административными правами.
2. В командной строке введите следующую команду и нажмите клавишу ВВОД:

По окончании выложите C:windowsLogsCBS CBS.log в архиве.

Запустите AIDA64 Portable от имени Администратора > Сверху, в окне программы AIDA нажмите «Отчет» >
Далее > выберите «Аппаратные разделы» > Далее > Простой текст > Готово > Сохранить в файл.

Файл, в архиве, подкрепите к сообщению.

——-
Будь джентльменом, если есть удача. А нет удачи, джентльменов нет . Нажми .

Сообщения: 23
Благодарности: 1

Сообщения: 3
Благодарности: 0

Доброго времени суток господа.

Из железа имеем:

В общем суть проблемы такова — при первом запуске или же после долговременного перерыва (как я себе это вижу, до того момента как файлы браузера выгрузятся из памяти) просто невообразимо долго грутится (причем абсолютно любой) браузер, к примеру одна единственная начальная страниц хрома в лучшем случае открывается секунд 30, в худшем и по 2-3 минуты ждать приходится. Всё это безобразие сопровождается Ошибками отсутствия страниц, значения скачут, но иной раз даже до 500 с копейками прыгает, та же ерунда происходит после долговременного простоя ноута (минут 20-30) или просмотра продолжительного видеоряда.
Пытаясь оптимизировать, нашел лишь огромное множество разочарований, автозагрузка — только минимально необходимый набор программ. Антивирус систему не грузит (MSE же) ну вообщем в целом всё работает шустро, только вот пожалуй в этих двух случаях проблемы (но так вот повелось, что это и есть основные режимы работы сего аппарата).
Изначально грешил на хард, но проверив его, убедился в том, что он еще живой и затем отключил спящий режим для жесткого диска в настройках электропитания, хотя из него он и нормально выходил.








так. что еще можно сказать то.

После выхода ноута из режима гибернации/сна/выключения экрана — минут 10 невозможно его терпеть, вообщем ужасные тормоза (и как я недавно заметил, специфическим поднятием ошибок отсутствия страниц)

Пожалуй это и натолкнуло меня написать пост именно здесь, а не создавать тему, т.к. на первый взгляд кажется всё это тесно связано между собой.

P.S. Конечно — 2 Гб RAM довольно таки мало, но ПК с примерно таким-же железом (отличие в более слабой GPU и и немного более мощный CPU) работает в разы быстрее и уж точно без минутных «залипаний» на то, что бы открыть аимп. я конечно не ванга, но так быть не должно

По поводу раммапа, похоже там критических утечек нет, но на мой взгляд многовато всё же для 2-х гигов)

Сейчас вот после перезагрузки проведу тест RAM на ошибки, но не думаю что он что-то покажет, за всё время жизни ноутбука — ни одного синего экрана не было.

Еще одно (на мой взгляд важное) замечание — Первое включение ноутбука, довольно длительное (если учитывать то, что автозагрузка практически пуста), но если сразу после включения перезагрузить ОС, то он заметно (сильно заметно) быстрее включается и в последствии немного быстрее реагирует на команды.

From Wikipedia, the free encyclopedia

In computing, a page fault (sometimes called PF or hard fault)[a] is an exception that the memory management unit (MMU) raises when a process accesses a memory page without proper preparations. Accessing the page requires a mapping to be added to the process’s virtual address space. Besides, the actual page contents may need to be loaded from a backing store, such as a disk. The MMU detects the page fault, but the operating system’s kernel handles the exception by making the required page accessible in the physical memory or denying an illegal memory access.

Valid page faults are common and necessary to increase the amount of memory available to programs in any operating system that uses virtual memory, such as Windows, macOS, and the Linux kernel.[1]

Types[edit]

Minor[edit]

If the page is loaded in memory at the time the fault is generated, but is not marked in the memory management unit as being loaded in memory, then it is called a minor or soft page fault. The page fault handler in the operating system merely needs to make the entry for that page in the memory management unit point to the page in memory and indicate that the page is loaded in memory; it does not need to read the page into memory. This could happen if the memory is shared by different programs and the page is already brought into memory for other programs.

The page could also have been removed from the working set of a process, but not yet written to disk or erased, such as in operating systems that use Secondary Page Caching. For example, HP OpenVMS may remove a page that does not need to be written to disk (if it has remained unchanged since it was last read from disk, for example) and place it on a Free Page List if the working set is deemed too large. However, the page contents are not overwritten until the page is assigned elsewhere, meaning it is still available if it is referenced by the original process before being allocated. Since these faults do not involve disk latency, they are faster and less expensive than major page faults.

Major[edit]

This is the mechanism used by an operating system to increase the amount of program memory available on demand. The operating system delays loading parts of the program from disk until the program attempts to use it and the page fault is generated. If the page is not loaded in memory at the time of the fault, then it is called a major or hard page fault. The page fault handler in the OS needs to find a free location: either a free page in memory, or a non-free page in memory. This latter might be used by another process, in which case the OS needs to write out the data in that page (if it has not been written out since it was last modified) and mark that page as not being loaded in memory in its process page table. Once the space has been made available, the OS can read the data for the new page into memory, add an entry to its location in the memory management unit, and indicate that the page is loaded. Thus major faults are more expensive than minor faults and add storage access latency to the interrupted program’s execution.

Invalid[edit]

If a page fault occurs for a reference to an address that is not part of the virtual address space, meaning there cannot be a page in memory corresponding to it, then it is called an invalid page fault. The page fault handler in the operating system will then generally pass a segmentation fault to the offending process, indicating that the access was invalid; this usually results in abnormal termination of the code that made the invalid reference. A null pointer is usually represented as a pointer to address 0 in the address space; many operating systems set up the MMU to indicate that the page that contains that address is not in memory, and do not include that page in the virtual address space, so that attempts to read or write the memory referenced by a null pointer get an invalid page fault.

Invalid conditions[edit]

Illegal accesses and invalid page faults can result in a segmentation fault or bus error, resulting in an app or OS crash. Software bugs are often the causes of these problems, but hardware memory errors, such as those caused by overclocking, may corrupt pointers and cause healthy codes to fail.

Operating systems provide differing mechanisms for reporting page fault errors. Microsoft Windows uses structured exception handling to report invalid page faults as access violation exceptions. UNIX-like systems typically use signals, such as SIGSEGV, to report these error conditions to programs. If the program receiving the error does not handle it, the operating system performs a default action, typically involving the termination of the running process that caused the error condition, and notifying the user that the program has malfunctioned. Windows often reports such crashes without going to any details. An experienced user can retrieve detailed information using WinDbg and the minidump that Windows creates during the crash. UNIX-like operating systems report these conditions with such error messages as «segmentation violation» or «bus error», and may produce a core dump.

Performance impact[edit]

Page faults degrade system performance and can cause thrashing. Major page faults on conventional computers using hard disk drives can have a significant impact on their performance, as an average hard disk drive has an average rotational latency of 3 ms, a seek time of 5 ms, and a transfer time of 0.05 ms/page. Therefore, the total time for paging is near 8 ms (= 8,000 μs). If the memory access time is 0.2 μs, then the page fault would make the operation about 40,000 times slower.

Performance optimization of programs or operating systems often involves reducing the number of page faults. Two primary focuses of the optimization are reducing overall memory usage and improving memory locality. To reduce the page faults, developers must use an appropriate page replacement algorithm that maximizes the page hits. Many have been proposed, such as implementing heuristic algorithms to reduce the incidence of page faults.

A larger physical memory also reduces page faults.

See also[edit]

  • Bélády’s anomaly

Notes[edit]

  1. ^ Microsoft uses the term «hard fault» in some versions of its Resource Monitor, e.g., in Windows Vista (as used in the Resource View Help in Microsoft operating systems).

References[edit]

  1. ^ Bovet, Daniel; Cesati, Marco (November 2005). Understanding the Linux Kernel (PDF) (3rd ed.). O’Reilly Media. ISBN 0-596-00565-2. Retrieved 9 October 2021.
  • John L. Hennessy, David A. Patterson, Computer Architecture, A Quantitative Approach (ISBN 1-55860-724-2)
  • Tanenbaum, Andrew S. Operating Systems: Design and Implementation (Second Edition). New Jersey: Prentice-Hall 1997.
  • Intel Architecture Software Developer’s Manual–Volume 3: System Programming

External links[edit]

  • «So What Is A Page Fault?(subscription required)» from OSR Online (a Windows-specific explanation)
  • «Virtual Memory Details» from the Red Hat website.
  • «UnhandledExceptionFilter (Windows)» from MSDN Online.
  • «Page fault overhead» for information about how page faults can crucially affect processing time.

From Wikipedia, the free encyclopedia

In computing, a page fault (sometimes called PF or hard fault)[a] is an exception that the memory management unit (MMU) raises when a process accesses a memory page without proper preparations. Accessing the page requires a mapping to be added to the process’s virtual address space. Besides, the actual page contents may need to be loaded from a backing store, such as a disk. The MMU detects the page fault, but the operating system’s kernel handles the exception by making the required page accessible in the physical memory or denying an illegal memory access.

Valid page faults are common and necessary to increase the amount of memory available to programs in any operating system that uses virtual memory, such as Windows, macOS, and the Linux kernel.[1]

Types[edit]

Minor[edit]

If the page is loaded in memory at the time the fault is generated, but is not marked in the memory management unit as being loaded in memory, then it is called a minor or soft page fault. The page fault handler in the operating system merely needs to make the entry for that page in the memory management unit point to the page in memory and indicate that the page is loaded in memory; it does not need to read the page into memory. This could happen if the memory is shared by different programs and the page is already brought into memory for other programs.

The page could also have been removed from the working set of a process, but not yet written to disk or erased, such as in operating systems that use Secondary Page Caching. For example, HP OpenVMS may remove a page that does not need to be written to disk (if it has remained unchanged since it was last read from disk, for example) and place it on a Free Page List if the working set is deemed too large. However, the page contents are not overwritten until the page is assigned elsewhere, meaning it is still available if it is referenced by the original process before being allocated. Since these faults do not involve disk latency, they are faster and less expensive than major page faults.

Major[edit]

This is the mechanism used by an operating system to increase the amount of program memory available on demand. The operating system delays loading parts of the program from disk until the program attempts to use it and the page fault is generated. If the page is not loaded in memory at the time of the fault, then it is called a major or hard page fault. The page fault handler in the OS needs to find a free location: either a free page in memory, or a non-free page in memory. This latter might be used by another process, in which case the OS needs to write out the data in that page (if it has not been written out since it was last modified) and mark that page as not being loaded in memory in its process page table. Once the space has been made available, the OS can read the data for the new page into memory, add an entry to its location in the memory management unit, and indicate that the page is loaded. Thus major faults are more expensive than minor faults and add storage access latency to the interrupted program’s execution.

Invalid[edit]

If a page fault occurs for a reference to an address that is not part of the virtual address space, meaning there cannot be a page in memory corresponding to it, then it is called an invalid page fault. The page fault handler in the operating system will then generally pass a segmentation fault to the offending process, indicating that the access was invalid; this usually results in abnormal termination of the code that made the invalid reference. A null pointer is usually represented as a pointer to address 0 in the address space; many operating systems set up the MMU to indicate that the page that contains that address is not in memory, and do not include that page in the virtual address space, so that attempts to read or write the memory referenced by a null pointer get an invalid page fault.

Invalid conditions[edit]

Illegal accesses and invalid page faults can result in a segmentation fault or bus error, resulting in an app or OS crash. Software bugs are often the causes of these problems, but hardware memory errors, such as those caused by overclocking, may corrupt pointers and cause healthy codes to fail.

Operating systems provide differing mechanisms for reporting page fault errors. Microsoft Windows uses structured exception handling to report invalid page faults as access violation exceptions. UNIX-like systems typically use signals, such as SIGSEGV, to report these error conditions to programs. If the program receiving the error does not handle it, the operating system performs a default action, typically involving the termination of the running process that caused the error condition, and notifying the user that the program has malfunctioned. Windows often reports such crashes without going to any details. An experienced user can retrieve detailed information using WinDbg and the minidump that Windows creates during the crash. UNIX-like operating systems report these conditions with such error messages as «segmentation violation» or «bus error», and may produce a core dump.

Performance impact[edit]

Page faults degrade system performance and can cause thrashing. Major page faults on conventional computers using hard disk drives can have a significant impact on their performance, as an average hard disk drive has an average rotational latency of 3 ms, a seek time of 5 ms, and a transfer time of 0.05 ms/page. Therefore, the total time for paging is near 8 ms (= 8,000 μs). If the memory access time is 0.2 μs, then the page fault would make the operation about 40,000 times slower.

Performance optimization of programs or operating systems often involves reducing the number of page faults. Two primary focuses of the optimization are reducing overall memory usage and improving memory locality. To reduce the page faults, developers must use an appropriate page replacement algorithm that maximizes the page hits. Many have been proposed, such as implementing heuristic algorithms to reduce the incidence of page faults.

A larger physical memory also reduces page faults.

See also[edit]

  • Bélády’s anomaly

Notes[edit]

  1. ^ Microsoft uses the term «hard fault» in some versions of its Resource Monitor, e.g., in Windows Vista (as used in the Resource View Help in Microsoft operating systems).

References[edit]

  1. ^ Bovet, Daniel; Cesati, Marco (November 2005). Understanding the Linux Kernel (PDF) (3rd ed.). O’Reilly Media. ISBN 0-596-00565-2. Retrieved 9 October 2021.
  • John L. Hennessy, David A. Patterson, Computer Architecture, A Quantitative Approach (ISBN 1-55860-724-2)
  • Tanenbaum, Andrew S. Operating Systems: Design and Implementation (Second Edition). New Jersey: Prentice-Hall 1997.
  • Intel Architecture Software Developer’s Manual–Volume 3: System Programming

External links[edit]

  • «So What Is A Page Fault?(subscription required)» from OSR Online (a Windows-specific explanation)
  • «Virtual Memory Details» from the Red Hat website.
  • «UnhandledExceptionFilter (Windows)» from MSDN Online.
  • «Page fault overhead» for information about how page faults can crucially affect processing time.
В своей прошлой статье «Как использовать Монитор ресурсов Windows 7 для эффективной диагностики» я рассказал о возможностях Монитора ресурсов Windows 7 (Resource Monitor), объяснил, как с его помощью наблюдать за распределением системных ресурсов между процессами и службами, а также упомянул, что его можно использовать для решения конкретных задач — например, для анализа расходования памяти. Именно об этом и пойдет речь в данной статье.Немного о памяти

Прежде чем приступать к анализу, коротко расскажу о том, как Microsoft Windows 7 управляет памятью. После этого вам будет проще понять, какая информация представлена в Мониторе ресурсов Windows 7.

Диспетчер памяти Windows 7 создает виртуальную систему памяти, которая состоит из доступной физической RAM и файла подкачки на жестком диске. Это позволяет операционной системе выделять блоки памяти фиксированной длины (страницы) с последовательными адресами в физической и виртуальной памяти.

Запуск Монитора ресурсов Windows 7

Чтобы запустить Монитор ресурсов Windows 7, откройте меню «Пуск» (Start), введите в строке поиска «Resmon.exe» и нажмите [Enter]. В открывшемся окне выберите вкладку «Память» (Memory, рис. A).

Анализ использования памяти с помощью Монитора ресурсов Windows 7

Рисунок A. На вкладке «Память» в Мониторе ресурсов Windows 7 приводятся подробные сведения о распределении памяти.

Таблица «Процессы»

На вкладке «Память» есть таблица «Процессы» (Processes, рис. B), в которой перечислены все запущенные процессы, а сведения об используемой памяти разбиты на несколько категорий.

Анализ использования памяти с помощью Монитора ресурсов Windows 7

Рисунок B. Сведения об используемой памяти для каждого процесса разбиты на несколько категорий.

Графа «Образ»

В колонке «Образ» (Image) указывается имя исполняемого файла процесса. Процессы, запущенные приложениями, узнать очень легко — например, процесс «notepad.exe» со всей очевидностью принадлежит Блокноту (Notepad). Процессы с именем «svchost.exe» представляют различные службы операционной системы. Название службы указывается в скобках рядом с именем процесса.

Графа «ИД процесса»

В колонке «ИД процесса» (PID) указывается номер процесса — уникальное сочетание цифр, позволяющее идентифицировать запущенный процесс.

Графа «Завершено»

В столбце «Завершено» (Commit) указывается объем виртуальной памяти в килобайтах, зарезервированный системой для данного процесса. Сюда входит и используемая физическая память, и сохраненные в файле подкачки страницы.

Графа «Рабочий набор»

В графе «Рабочий набор» (Working Set) указывается объем физической памяти в килобайтах, используемой процессом в данный момент времени. Рабочий набор складывается из общей и частной памяти.

Графа «Общий»

В колонке «Общий» (Shareable) указан объем физической памяти в килобайтах, которую данный процесс использует совместно с другими. Использование одного сегмента памяти или страницы подкачки для родственных процессов позволяет сэкономить место в памяти. При этом физически сохраняется только одна копия страницы, которая затем сопоставляется с виртуальным адресным пространством других процессов, которые к ней обращаются. Например, все процессы, инициированные системными библиотеками DLL — Ntdll, Kernel32, Gdi32 и User32 — используют общую память.

Графа «Частный»

В столбце «Частный» (Private) указывается объем физической памяти в килобайтах, используемой исключительно данным процессом. Именно это значение позволяет определить, сколько памяти нужно тому или иному приложению для работы.

Графа «Ошибок отсутствия страницы в памяти/сек.»

В графе «Ошибок отсутствия страницы в памяти/сек.» (Hard Faults/sec) указано среднее за последнюю минуту количество ошибок отсутствия страницы в памяти в секунду. Если процесс пытается использовать больше физической памяти, чем доступно в данный момент времени, система записывает часть данных из памяти на диск — в файл подкачки. Последующее обращение к данным, сохраненным на диск, и называется ошибкой отсутствия страницы в памяти.

О чем говорят ошибки отсутствия страницы в памяти

Теперь, когда вы представляете, какие сведения собраны в таблице «Процессы», давайте посмотрим, как с их помощью следить за распределением памяти. При запуске приложений и работе с файлами диспетчер памяти отслеживает объем рабочего набора для каждого процесса и фиксирует запросы на дополнительные ресурсы памяти. По мере увеличения рабочего набора процесса, диспетчер соотносит эти запросы с потребностями ядра и других процессов. Если доступного адресного пространства недостаточно, диспетчер уменьшает объем рабочего набора, сохраняя данные из памяти на диск.

В дальнейшем при чтении этих данных с диска возникает ошибка отсутствия страницы в памяти. Это вполне нормально, но если ошибки происходят одновременно для разных процессов, системе требуется дополнительное время для чтения данных с диска. Слишком частые ошибки отсутствия страницы в памяти, соответственно, снижают быстродействие системы. Вам наверняка доводилось наблюдать неожиданное замедление работы всех приложений, которое затем также неожиданно прекращалось. Почти наверняка это замедление было связано с активным перераспределением данных между физической памятью и подкачкой.

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

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

Стоит учитывать, что распределение памяти зависит от целого ряда других факторов, и мониторинг ошибок отсутствия страницы в памяти — не лучший и не единственный способ выявления проблем. Тем не менее, он может послужить неплохой отправной точкой для наблюдения.

Таблица «Физическая память»

В таблице «Процессы» приводятся детальные сведения о распределении памяти между отдельными процессами, а таблица «Физическая память» (Physical Memory) дает общую картину использования RAM. Ее ключевой компонент — уникальная гистограмма, показанная на рис. C.

Анализ использования памяти с помощью Монитора ресурсов Windows 7

Рисунок C. Гистограмма в таблице «Физическая память» позволяет составить общее представление о распределении памяти в Windows 7.

Каждая секция гистограммы обозначена собственным цветом и представляет определенную группу страниц памяти. По мере использования системы, диспетчер памяти в фоновом режиме перемещает данные между этими группами, поддерживая тонкий баланс между физической и виртуальной памятью для обеспечения эффективной работы всех приложений. Давайте рассмотрим гистограмму поподробнее.

Секция «Зарезервированное оборудование»

Слева расположена секция «Зарезервированное оборудование» (Hardware Reserved), обозначенная серым цветом: это память, выделенная на нужды подключенного оборудования, которую оно использует для взаимодействия с операционной системой. Зарезервированная для оборудования память заблокирована и недоступна диспетчеру памяти.

Обычно объем памяти, выделенной оборудованию, составляет от 10 до 70 Мбайт, однако этот показатель зависит от конкретной конфигурации системы и в некоторых случаях может достигать нескольких сотен мегабайт. К компонентам, влияющим на объем зарезервированной памяти, относятся:

• BIOS;
• компоненты материнской платы — например, усовершенствованный программируемый контроллер прерываний ввода/вывода (APIC);
• звуковые карты и другие устройства, осуществляющие ввод/вывод с отображением на память;
• шина PCI Express (PCIe);
• видеокарты;
• различные наборы микросхем;
• флеш-накопители.

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

Секция «Используется»

Секция «Используется» (In Use, рис C), обозначенная зеленым цветом, представляет количество памяти, используемой системой, драйверами и запущенными процессами. Количество используемой памяти рассчитывается, как значение «Всего» (Total) за вычетом суммы показателей «Изменено» (Modified), «Ожидание» (Standby) и «Свободно» (Free). В свою очередь, значение «Всего» — это показатель «Установлено» (Installed RAM) за вычетом показателя «Зарезервированное оборудование».

Секция «Изменено»

Оранжевым цветом выделена секция «Изменено» (Modified), в которой представлена измененная, но не задействованная память. Фактически она не используется, но может быть в любой момент задействована, если снова понадобится. Если память не используется достаточно давно, данные переносятся в файл подкачки, а память переходит в категорию «Ожидание».

Секция «Ожидание»

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

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

Секция «Свободно»

В категории «Свободно», обозначенной голубым цветом, представлены страницы памяти, еще не выделенные ни одному процессу или освободившиеся после завершения процесса. В этой секции отображается как еще не задействованная, так и уже освобожденная память, но на самом деле, еще не задействованная память относится к другой категории — «Нулевые страницы» (Zero Page), которая так называется, потому что эти страницы инициализированы нулевым значением и готовы для использования.

О проблеме свободной памяти

Теперь, когда вы в общих чертах представляете, как работает диспетчер памяти, ненадолго остановимся на распространенном заблуждении, связанном с системой управления памятью в Windows 7. Как видно из рис. C, секция свободной памяти — одна из самых маленьких в гистограмме. Тем не менее, ошибочно на этом основании полагать, будто Windows 7 потребляет чересчур много памяти и что система не может нормально работать, если свободной памяти так мало.

На самом деле, все совсем наоборот. В контексте принятого в Windows 7 подхода к управлению памятью, свободная память бесполезна. Чем больше памяти задействовано, тем лучше. Заполняя память до максимума и постоянно перемещая страницы из одной категории в другую с использованием системы приоритетов, Windows 7 повышает эффективность работы и предотвращает попадание данных в файл подкачки, не давая ошибкам отсутствия страницы в памяти замедлить быстродействие.

Мониторинг памяти

Хотите понаблюдать систему управления памятью Windows 7 в действии? Перезагрузите компьютер и сразу же после запуска откройте Монитор ресурсов Windows 7. Перейдите на вкладку «Память» и обратите внимание на соотношение секций в гистограмме физической памяти.

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

Проделав этот экстремальный эксперимент, вы поймете, как Windows 7 управляет памятью на вашем конкретном компьютере, и сможете использовать Монитор ресурсов Windows 7 для наблюдения за распределением памяти в нормальных условиях повседневной работы.

А что думаете вы?

Нравится ли вам идея использовать Монитор ресурсов Windows 7 для наблюдения за распределением памяти? Поделитесь своим мнением в комментариях!

Автор: Greg Shultz
Перевод

SVET

Оцените статью: Голосов

 
DVM ©
 
(2007-05-01 13:42)
[0]

Что это такое? Как понимать его показания? В справке не описано.
Это нормально, когда у программы он растет со скоростью 2-3 тыс единиц в секунду?


 
homm ©
 
(2007-05-01 14:42)
[1]

> Что это такое? Как понимать его показания?

Да не паникуй ты так. Это количество страниц, к котрым онадобился доступ когда их не было в оперативной памяти. А если еще точнее, то количество страниц, к котрым онадобился доступ когда их не было в рабочем наборе приложения, что не значит что их не было в оперативе.


> Это нормально, когда у программы он растет со скоростью
> 2-3 тыс единиц в секунду?

Нет :) Пора идти в магазин за оперативой :)


 
Eraser ©
 
(2007-05-01 14:42)
[2]

> [0] DVM ©   (01.05.07 13:42)


> Что это такое?

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

> Это нормально, когда у программы он растет со скоростью
> 2-3 тыс единиц в секунду?

не очень (хотя тут нужно смотреть конкретную ситуацию), нужно побольше ОЗУ.


 
homm ©
 
(2007-05-01 15:05)
[3]

> Это нормально, когда у программы он растет со скоростью
> 2-3 тыс единиц в секунду?

Я счас подергал окошко оперы за края, погонял апатчь, до 5 тышь в секунду доходило. Вот же уродский оптимайзер памяти у винды :( Так что пара тысячь в секунду — вполне нормально.


 
DVM ©
 
(2007-05-01 15:35)
[4]

Я вот попытался локализовать в своей программе место, которое более всего увеличивает счетчик — оказалось это место в FastDIB. А именно:


procedure FastDIB2Bitmap(Src:TFastDIB;Dst:TBitmap);
begin
 if Src.Handle<>0 then
 begin
   Dst.Handle:=Src.Handle;
   // bitmaps can be selected for only one device context at a time
   if(Src.hDC<>0)and Src.FreeDC then DeleteDC(Src.hDC);
   if(Src.hPen<>0)then DeleteObject(Src.hPen);
   if(Src.hFont<>0)then DeleteObject(Src.hFont);
   if(Src.hBrush<>0)then DeleteObject(Src.hBrush);
   Src.hDC:=0;
   Src.FreeDC:=False;
   Src.FreeBits:=False;
   Src.FreeHandle:=False;
 end;
end;

Вот такие преобразования моя программа делает до 200 в секунду.
Если я комментирую преобразование, то счетчик не растет практически.

Памяти 100% достаточно. Ее количество не влияет на этот счетчик. 2Гб ее.


 
Eraser ©
 
(2007-05-01 16:40)
[5]

ну если это не дает лишней нагрузки на CPU — можно смело забить, если нагрузку дает — исключить вызов FastDIB2Bitmap.


 
antonn ©
 
(2007-05-01 16:43)
[6]

щас может тупой вопрос задам:)
А так — procedure FastDIB2Bitmap(Src:TFastDIB; var Dst:TBitmap);
?


 
DVM ©
 
(2007-05-01 17:13)
[7]


> ну если это не дает лишней нагрузки на CPU

Не нагрузки не дает абсолютно. Память не растет, никакие ресурсы не уменьшаются.


> щас может тупой вопрос задам:)
> А так — procedure FastDIB2Bitmap(Src:TFastDIB; var Dst:TBitmap);
>
> ?

Все то же самое.


 
Eraser ©
 
(2007-05-01 17:28)
[8]

> [6] antonn ©   (01.05.07 16:43)

в Делфи идентификатор объекта является указателем на объект )


 
antonn ©
 
(2007-05-01 18:09)
[9]


> в Делфи идентификатор объекта является указателем на объект
> )


 
Sapersky
 
(2007-05-01 20:51)
[10]

Я вот попытался локализовать в своей программе место, которое более всего увеличивает счетчик — оказалось это место в FastDIB.

По логике, нужно сначала всё освободить, потом присваивать Handle. Возможно, и освобождать необязательно, во всяком случае в примере Bumpmap сделано так:

procedure TBumpForm.SetThumbnail(Image:TImage; Bmp:TFastDIB);
var
 Tmp: TFastDIB;
begin
 Tmp:=TFastDIB.Create;
 Tmp.SetSize(105,105,Bmp.Bpp);
 if Tmp.Bpp=8 then
 begin
   Tmp.Colors^:=Bmp.Colors^;
   Tmp.UpdateColors;
 end;

 Bilinear(Bmp,Tmp);
 Tmp.FreeHandle:=False;
 Image.Picture.Bitmap.Handle:=Tmp.Handle;
 Tmp.Free;
 Image.Refresh;
end;

А вообще, откуда надобность выполнять подобное преобразование 200 раз/c? Может лучше выкинуть TBitmap и выполнять все операции с TFastDIB? А то мне сейчас лень смотреть, но подозреваю, что в TBitmap.SetHandle куда больше действий, чем просто присвоение переменной.

Ещё, имейте в виду, что FastGate — это не оригинальный FastLIB. Автор этого модуля уже допускал ляпы при «улучшении» библиотеки, так что аккуратнее с ним (хотя, строго говоря, и «оригинал» не безгрешен).


 
DVM ©
 
(2007-05-01 22:03)
[11]


> А вообще, откуда надобность выполнять подобное преобразование
> 200 раз/c?

Да есть вот задачи. Видеонаблюдение.


> Может лучше выкинуть TBitmap и выполнять все операции с
> TFastDIB?

Так и планирую сделать, но есть свои грабли и очень много вносить изменений. В принципе FastDIB тут прикручен из-за фантастически быстрой SetSize.


> TBitmap.SetHandle куда больше действий, чем просто присвоение
> переменной.

Да, там намного больше действий.


> Sapersky

Не подскажите, как правильно скопировать один TFastDIB в другой. Не Assign(), а именно копирование? У меня вот какая штука:

Во вторичном потоке происходит декодирование JPEG в TFastDIB. Далее этот FastDIB с сообщением высылается в основной поток и там преобразуется в TBitmap, который и отрисовывается при необходимости в основном потоке по WM_PAINT. Так сделано сейчас. Так вот получается, что и основной поток и вторичный на деле же работают с одним и тем же хэндлом одного и того же битмапа по сути. Ведь FastDIB2Bitmap просто присваивает хэндл. И пока первичный поток отрисовывает его на окне вторичный ведь может и поменять его содержимое. Или я неправ? Так можно делать или надо полностью копироваить битмап в основной поток и там работать с ним?


 
homm ©
 
(2007-05-01 22:06)
[12]

Хм, а я кажеться понял почему так много ошибок доступа в этом месте. Потому что по Dst.Handle:=Src.Handle; Dst фактически заново создаеться, под новый битмап выделяеться память. А менеджер памяти в виндовсе имеет такое замечательное свойство, не выделять память физически, а лишь помечать страницы как зарезервированые. А вот когда уже на новый хэндл уже копируеться изображение со старого, идет непосредственное обращение к страницам, и они выделяются физически (в ОП), а счетчик ошибок доступа мотает. Так что эта строчка имхо — большая дыра в производительности. Попробуй как минимум создавать TBitmap как DIB, как максимум, здесь вобще нужно логику программы переделывать.


 
homm ©
 
(2007-05-01 22:11)
[13]

> Так вот получается, что и основной поток и вторичный на
> деле же работают с одним и тем же хэндлом одного и того
> же битмапа по сути.

Скорее всего нет. Как я понимаю невозможно преобразовать DDB в DIB не выделив под него второй хэндл.


 
DVM ©
 
(2007-05-01 22:21)
[14]


> Потому что по Dst.Handle:=Src.Handle; Dst фактически заново
> создаеться, под новый битмап выделяеться память

Да, получается, что так.


> Так что эта строчка имхо — большая дыра в производительности.

Может быть, но это далеко не самая тяжелая операция. Декодирование из JPEG во вторичных потоках занимает в тысячи раз больше времени.


> как максимум, здесь вобще нужно логику программы переделывать.

Я вот попробовал переделать на TFastDIB в основном потоке — проблема с ошибками страницы исчезла.


 
DVM ©
 
(2007-05-01 22:25)
[15]

Возникла другая проблема — как мне правильно передать с сообщением переменную типа TFastDIB из вторичного потока в первичный с сообщением и присвоить полченное в основном потоке значение переменной в первичном потоке. Просто присваиванием очевидно нельзя — возникают сразу утечки GDI ресурсов (вот здесь отличие от TBITMAP).


 
Sapersky
 
(2007-05-02 00:38)
[16]

Не подскажите, как правильно скопировать один TFastDIB в другой. Не Assign(), а именно копирование?

Dst.MakeCopy(Src, True); // делается SetSize и Move
Или можно (при UseGDI = True) установить размер Dst = Src, потом
Src.Draw(Dst.hDC, 0, 0); // фактически BitBlt
удобно тем, что конвертирует битмапы разных форматов, хотя, как правило, не очень качественно. Впрочем, для этого есть FConvert.pas.

И пока первичный поток отрисовывает его на окне вторичный ведь может и поменять его содержимое. Так можно делать или надо полностью копироваить битмап в основной поток и там работать с ним?

Если вторичный поток не изменяет размер битмапа, т.е. не портит указатель/Handle, то, наверное, можно его спокойно рисовать, в крайнем случае нарисуется половина старого, половина нового. Хотя сам не пробовал, не знаю, как функции GDI отнесутся к тому, что кто-то будет писать в используемую ими область памяти. Можно на всякий случай прицепить к битмапу крит. секцию.
Если изменяет — тогда однозначно нужна или синхронизация, или копирование, или и то, и другое.

Просто присваиванием очевидно нельзя — возникают сразу утечки GDI ресурсов (вот здесь отличие от TBITMAP).
Что такое «присваивание»?
Если Assign — возможно, «аффтар» FastGate с ним напортачил в новой версии, пытаясь добиться того же поведения, что и у TBitmap. В оригинале это поведение довольно специфическое — битмап-источник уничтожается.
В общем, лучше «присваивание» делать как Dst := Src с соответствующей синхронизацией или MakeCopy.


 
Игорь Шевченко ©
 
(2007-05-02 10:29)
[17]


> Вот же уродский оптимайзер памяти у винды

Слону, сам понимаешь, пофиг.


 
DVM ©
 
(2007-05-02 13:00)
[18]


> Sapersky   (02.05.07 00:38) [16]

Большое спасибо. Метод TFastDib.MakeCopy() действительно то что нужно.

Счетчики ошибок страницы не растут. Утечек тоже нет. Как обстоят дела с производительностью такого решения выясняю.


Понравилась статья? Поделить с друзьями:

Читайте также:

  • Количество ошибок на количество строк кода
  • Количество несвязных фрагментов scad как исправить
  • Колесо яйцом на машине как исправить
  • Колесо техника выполнения ошибки
  • Колесо основные ошибки

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии