Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Работа с системным (дисковым) кэшем XP

Модерирует : KLASS, IFkO

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

koshius

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Несколько вопросов по работе с дисковым кэшем Windows XP. Он же системный, он же страничный.
1) Как его отчистить? Сразу скажу что это надо для тестирования производительности первого запуска определённой проги, а не для "высвобождения" памяти (насколько я понял XP итак использует для этих целей свободную память). Справляются ли с этим так называемые "оптимизаторы" и чистильщики памяти? Запускал парочку, они не работают с объёмом более 2 гиг. А мне надо чтоб 3 с хвостиком чистило. В идеале отчищаться должны только определённые закешированные файлы и папки.
2) Можно ли просмотреть какие кластеры/файлы(куски) находятся сейчас в системном кеше?
3) Есть ли утилитка для отслеживания попадания/промаха кеша при операциях доступа к определённым файлам. Вроде бы родной windows prefetch работает именно так, мониторя страничный обмен.
Собственно проблема выросла от проги Process Monitor от Sysinternals, которая перестаёт регистрировать многие события ReadFile для файлов при повторном запуске подопытной проги. Она тихонько тянет из кеша файлы спроецированные с помощью CreateFileMapping и для которых используется IRP_MJ_READ. Но вот что ещё странно, для некоторых файлов всегда генерится событие ReadFile, а именно - IRP_MJ_READ и FASTIO_READ. Означает ли это, что эти файлы (куски) не кешируются вовсе? А если кешируются, то как узнать, таки из кеша потянуло или с диска? И можно ли будет такие файлы предварительно закешировать просто прочитав их из другой проги перед запуском основной?

Всего записей: 19 | Зарегистр. 18-07-2010 | Отправлено: 02:09 15-12-2011
sergeu20

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
.

Всего записей: 9 | Зарегистр. 14-12-2011 | Отправлено: 02:25 15-12-2011
koshius

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Утилитка CacheSet от Sysinternals непонятно что чистит, по крайней мере не всё.
DiskMon (logs and displays all hard disk activity on a Windows system) вообще ничего не детектит. Кое как можно получать события о кеше из Perfmon.msc (или "журналы счетчиков" в панели управления компьютером), но максимальное разрешение - 1 секунда. Может кто знает программку для регистрации этих событий по мере их поступления? На подобии Process Monitor.

Всего записей: 19 | Зарегистр. 18-07-2010 | Отправлено: 02:09 24-12-2011
yxma

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как бы очень странный вопрос. ФСЕ, что в дисковом кэше умирает вместе с выключением компа. Как в физической ОЗУ. Разве что состояние мемори при отправке в спящий режим остается до следующей загрузки, после которой тут же и умирает.
В чем вы копаетесь - просто недоступно моему пониманию. Да, собственно, и пониманию самого МС. В страничном кеше инфа в таком виде, какой понятен только системе и только краткое время. Вообще говоря, если на компе 2гб рам, то кэш лучше вообще отключить для большей части работы. Только некоторые программы начинают тормозить, остальные резко прибавляют в скорости - организация дуси такова, что она старается освободить рам даже тогда когда он пуст  - и загнать все в дисковый кэш, работающий на порядки медленнее.
Если все же дк очень необходим и его нужно ускорить, а есть физический другой диск - нужно ставить кэш на него. Тогда работа ускорится за счет параллельности дисковых операций

Всего записей: 409 | Зарегистр. 05-08-2008 | Отправлено: 06:29 24-12-2011
koshius

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Возможно меня неправильно поняли. Судя по описанию, yxma имел ввиду pagefile.sys - виртуальную память. Я же говорю про тот кеш, который всегда в памяти и в котором хранится то что недавно прочитано с винта, так что повторное обращение к файлу не вызывает активности диска. Тот, который занимает (почти) всю свободную память и который чистится при первой же потребности программ в памяти. Отключить его, по моему, в принципе невозможно.

Цитата:
Если все же дк очень необходим и его нужно ускорить

Как раз таки его надо замедлить, а точнее - отключить/отчистить для целей тестирования. И второй вопрос - узнать тянет ли данная операция чтения данный с в кеша (RAM) или с диска.

Всего записей: 19 | Зарегистр. 18-07-2010 | Отправлено: 15:09 25-12-2011
doktorpilulkin

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
то что недавно прочитано с винта тоже пейджфайл.сис хранится. легко убедится повторным копированием одного файла. вообще скорее всего кеширование ты не отключишь, система развалится. возьми µTorrent 1.6.1 в нем галочка есть отключить кеширование виндовс, уж не знаю как его авторы задумывали, но после отключения кеша, половина системных файлов исчезает бесследно, пока система работать не откажется. это видимо как раз то что ты хочешь

Всего записей: 2341 | Зарегистр. 30-08-2010 | Отправлено: 15:13 25-12-2011
yxma

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
так тогда это не кеш вовсе. Это просто рабочая часть ОЗУ - то, что в раме находится. Все это (в известной мере) можно увидеть в манагере задач - там висят все процессы - работающие или отдыхающие. Дело в том, что в дусе кеш в раме не предусмотрен. Там висят рабочие и резидентные процессы. и  все. Остальное читается либо с винта, либо из пейджфайла сис. У каждого процесса своя часть памяти в раме.
Опять не пойму - куда и что вы копаете. И называете как-то неясно. Вы уж сказали бы какую прогу копаете, в чем проблема. А то получается полная экстрасенсорика
 
Добавлено:
Да, и самое крутое, что можно сделать с этой дурацкой осью - загнать пейджфайл в рам-диск. Тогда дуська не может следовать своей гадкой методике - выгрузить все что можно из рама на хард. Это сволочизм, или атавизм, пришедший с тех времен, когда рам считалась жутко дорогой.

Всего записей: 409 | Зарегистр. 05-08-2008 | Отправлено: 17:44 25-12-2011
yxma

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
забыл сказать только, что с последним советом мало чео хорошего получится - опять таки из-за специфики дуси. Действительно надежно рам-диск сделать нельзя - глючно.

Всего записей: 409 | Зарегистр. 05-08-2008 | Отправлено: 02:04 27-12-2011
koshius

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Мдя, я вижу народ совсем не понимает принципов работы винды. Ещё раз, под дисковым кешем я понимал не тот, что хранится на диске и куда сбрасываются неактивные страницы RAM (pagefile.sys, он же - СВОП, оно же - часть виртуальной памяти), а наоборот, тот что держится в памяти (ОЗУ) и в котором хранятся недавно считанные данные с диска. Да, да, именно в существовании этого кеша (а не пейджфайл.сис) можно "легко убедится повторным копированием одного файла". Время копирования значительно уменьшается. И именно этот факт мешает нормально потестить производительность той или иной конфигурации некой (любой) программы.

Цитата:
Дело в том, что в дусе кеш в раме не предусмотрен.  

Извините, но это абсурд. С диска на диск кешировать что ли?
 

Цитата:
µTorrent 1.6.1 в нем галочка есть отключить кеширование виндовс

Насколько я понимаю, это не глобальные настройки для винды, а опции работы для самого µTorrent.
 
Ну, и к слову. Один из распространённых мифов (а проще говоря - извращение) - это загнать пейджфайл в рам-диск. Исключение только если вы создаёте этот диск в unmanaged memory (от 3х с хвостиком гиг и выше). Своим рам диском вы как раз и отъедаете свободную память и дисковый кеш, а потом заставляете винду гонять страницы из памяти в память по некому замысловатому маршруту.

Всего записей: 19 | Зарегистр. 18-07-2010 | Отправлено: 16:20 28-12-2011
KLASS



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
С Диспетчером кэша и памяти лучше к Русиновичу, например, тута и  
тута
чтобы понимать друг-друга

Всего записей: 11719 | Зарегистр. 12-10-2001 | Отправлено: 19:50 28-12-2011
yxma

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Извините, но это абсурд. С диска на диск кешировать что ли?  

вообще-то я понял, что речь о раме. У современных хардов есть своя память, в нее и читается с упреждением, по-моему. И понимаю, о чем идет речь. Не понимаю, как вы это собираетесь контролировать, и вот подтверждение из ссылки, данной Классом:

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

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

Всего записей: 409 | Зарегистр. 05-08-2008 | Отправлено: 01:57 29-12-2011
cp58

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Утилитка CacheSet от Sysinternals непонятно что чистит, по крайней мере не всё.  

Какие конкретно неполадки были?
А так же посмотрите сюда
 

Цитата:
Собственно проблема выросла от проги Process Monitor от Sysinternals, которая перестаёт регистрировать многие события ReadFile для файлов при повторном запуске подопытной проги. Она тихонько тянет из кеша файлы спроецированные с помощью CreateFileMapping и для которых используется IRP_MJ_READ. Но вот что ещё странно, для некоторых файлов всегда генерится событие ReadFile, а именно - IRP_MJ_READ и FASTIO_READ.  

 
Посмотрите в сторону IOCTL_DISK_SET_CACHE_INFORMATION или на API функцию SetSystemFileCacheSize.
 

Цитата:
1) Как его отчистить? Сразу скажу что это надо для тестирования производительности первого запуска определённой проги, а не для "высвобождения" памяти (насколько я понял XP итак использует для этих целей свободную память). Справляются ли с этим так называемые "оптимизаторы" и чистильщики памяти? Запускал парочку, они не работают с объёмом более 2 гиг. А мне надо чтоб 3 с хвостиком чистило. В идеале отчищаться должны только определённые закешированные файлы и папки.
2) Можно ли просмотреть какие кластеры/файлы(куски) находятся сейчас в системном кеше?  

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

Цитата:
вообще-то я понял, что речь о раме. У современных хардов есть своя память, в нее и читается с упреждением, по-моему.  

Это называется кэш контроллера устройства.

Всего записей: 295 | Зарегистр. 06-12-2011 | Отправлено: 04:52 29-12-2011 | Исправлено: cp58, 04:53 29-12-2011
koshius

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KLASS, спасибо за ссылку. Хорошая книжица у Руссиновича. Подтвердились мои предположения относительно "двухголовости" виндового кеша. Кроме конкретного системного кеша, который отнимает определенный кусок памяти, есть эдакие транзитные страницы памяти, которые занимают ВСЮ (почти) свободную память.
общий объем файловых данных, кэшируемых в системе, складывается не только из размера системного рабочего набора, но и из размеров списков простаивающих и модифицированных страниц

Цитата:
Цитата:
Утилитка CacheSet от Sysinternals непонятно что чистит, по крайней мере не всё.  
 
Какие конкретно неполадки были?

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

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

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

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

драйвер не осилю. Парсер сторонней утилитки - это можно. Должны же существовать уже готовые решения. Process Monitor, например, регистрирует кучу событий, мог бы и какие нибудь PageFault отлавливать. Но вот что интересно, на форуме Sysinternals неоднократно поднимались темы насчёт попадания в кеш. А в ответ только тишина. Наверное этот вопрос слишком сложный, либо слишком простой.
Я надыбал интересную утилитку - Pfmon.exe: Page Fault Monitor из Windows Resource Kit. Но она выдаёт:
PFMON: Unable to debug 'Resource Kit\PFMON.EXE"'
'Не удается найти указанный файл.'
 

Всего записей: 19 | Зарегистр. 18-07-2010 | Отправлено: 02:56 10-01-2012
KLASS



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
System Cache снижается незначительно, а ведь он то отражает суммарный размер системного рабочего набора и списков простаивающих и модифицированных страниц

Не а... вот отсюда У системного кэша нет собственного рабочего набора

Всего записей: 11719 | Зарегистр. 12-10-2001 | Отправлено: 06:12 10-01-2012
koshius

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KLASS, это верно. У системного кэша нет собственного рабочего набора, но он является частью общего системного набора. Вот наверное размер этого общего набора, да плюс размер простаивающих страниц и отражается в диспетчере задач. Вот пример: Системный кэш показывает 1 063 812 КБ, а Cacheset - 159 612 КБ. При чистке кэша (с Cacheset) получаем 999 840 и 13 100 соответственно. Потом это вырастает до 1 009 000 и 20 000 и, в общем, пляшет дальше.

Всего записей: 19 | Зарегистр. 18-07-2010 | Отправлено: 02:38 11-01-2012
KLASS



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Вот наверное...

Ну да... сначала не понял предыдущее предложение.

Всего записей: 11719 | Зарегистр. 12-10-2001 | Отправлено: 03:33 11-01-2012
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Работа с системным (дисковым) кэшем XP


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2025

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru