Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2005.07.11;
Скачать: [xml.tar.bz2];

Вниз

Странный регион   Найти похожие ветки 

 
alpet ©   (2005-05-08 11:34) [0]

Сталкиваюсь иногда в своем редакторе памяти при сканировании АП другого процесса с регионами памяти доступ к которым очень медленный (порядка 6 мб/сек). Причем как правило эти регионы бывают очень крупные (32мб и 128мб), и чаще всего встречаются в играх DirectX. Вот недавно заметил такой регион в VisualStudio.NET, в нем он приводит к страшным тормозам при сохранении (проц на 100% загружается при чтении из этого региона, записывать в него нельзя). Сегодня даже пришлось снять задачу с нее - начал сохранять файл (9кб) и не смог прекратить.

Может быть такое из-за сбойной памяти ? У моих знакомых такие регионы проявлялись из-за сбойных видеокарт ATI, но у меня сейчас NVDIA GeForce2 MX440 довольно нормальная. Проблема стала проявлятся вроде после установки VMWare, которую я сейчас снес. Буду ось реинсталлить...


 
alpet ©   (2005-05-08 11:59) [1]

Вот на чем застревает VisualStudio при загрузке:
MSVCR71.dll!memmove+0x1b4

Проект грузился почти минуту (обычно около 3 секунд).
Регион имеет аттрибуты [MEM_MAPPED, PAGE_READWRITE], размер 31.8 мб. С файлами на жестком диске вроде не связан (hdd молчит), как и сетевое соединение.


 
alpet ©   (2005-05-11 11:18) [2]

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


 
Deka ©   (2005-05-11 11:58) [3]

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


 
Sapersky   (2005-05-11 12:39) [4]

Как сейчас все устроено - точно не знаю...

Сейчас тоже есть нечто подобное - т.н. AGP-память, или нелокальная (non-local) видеопамять. Т.е. фрагмент системной памяти, который резервируется для обмена с видеокартой. В драйверах NVidia (для GF2MX, во всяком случае) устанавливается в размере 1/2 от объёма видеопамяти. DirectX на запрос кол-ва видеопамяти иногда выдаёт сумму настоящей и нелокальной - например, 96 (64 + 32).


 
alpet ©   (2005-05-11 16:04) [5]

Уходит примерно ~200 тактов на выполнение пересыки из этой. Сомнительно что видеопамять может быть такой тормозной (как угодно но не 6-15мб/сек). Потом этот регион не определен как PAGE_NOCACHE что должно быть с страницами видеопамяти, содержимое его довольно статично и изменению не поддается. У меня есть предположение что это проекция драйвера (типа "con") устройства, хотя не понятно зачем драйвер VStudio. Такое вообще может быть ?


 
Sapersky   (2005-05-11 18:52) [6]

Не знаю, что там в VS, но в играх наверняка AGP-память.
Тормоза, насколько я понимаю, получаются из-за того, что видеокарта работает с этой памятью через DMA - тут уж если процесс пошёл, то пошёл, и всякие посторонние хакеры сидят и ждут, пока он закончится. А едва он закончился, основная программа (игра) вцепляется в этот кусок мёртвой хваткой (в DX есть такое понятие - блокировка ресурсов) - посторонний хакер опять сидит и ждёт... :)
В любом случае, хранятся там текстуры и модели, а никак не кол-во здоровья-патронов. Так что если определить, что это именно AGP-память - можно смело пропускать.
В свойствах устройства (видеокарты) в Windows выдаётся какой-то диапазон памяти - возможно, именно этот?


 
alpet ©   (2005-05-11 19:51) [7]

Выдается но в 32 мб. Причем в DirectX играх на обоих компах этого региона нет.

Намечается просвет. Я установил что по размеру регион сей очень похож на то что в ProcessExlorer показывается как .NET CLR Memory.
Вот наблюдения:

Размер самого региона: 0x1FD0000 или 33357824 байт

.NET CLR Memory  (в Process Explorer)
# Total reserved Bytes 33546160 (0x1FFDFB0) байт

Разница в 0x2DFB0 ~= 184 KiB, а таких регионов в процессе 6 штук, что впрочем ни о чем не говорит.

В качестве подтверждения того что этот регион принадлежит драйверу .NET CLR, надо будет мне создать программку ее использующую. В итоге если получится что проецируется сам драйвер  , окажется что вместо DeviceIoControl, ReadFile, WriteFile  к его файлу можно использовать его проекцию... Впрочем скорее всего это лишь то что используется непосредственно управляемым кодом и большая загрузка процессора может обьяснятся множеством возникающих прерываний (правда они обычно возникают на страницах с аттрибутами PAGE_GUARD или PAGE_WRITECOPY).

Сейчас больше занимает вопрос - как получить имя файла проецируемого в память, по адресу проекции. Есть ли для это API фукнция, или нужен перехват функций  CreateFileMapping/OpenFileMapping ?



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2005.07.11;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.038 c
3-1117083371
Iova
2005-05-26 08:56
2005.07.11
Можно ли какнибудь избавться от связей?


3-1117278811
KorvinOE
2005-05-28 15:13
2005.07.11
Как открыть поле типа DataSet?


14-1118049595
I'm
2005-06-06 13:19
2005.07.11
Component s


14-1118403954
Суслик
2005-06-10 15:45
2005.07.11
Посоветуйте алгоритм репликации


14-1118129757
Nikolay M.
2005-06-07 11:35
2005.07.11
В продолжение темы о шашлыках под Черноголовкой





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский