1

Я часто хотел создать действительно простую и оптимизированную установку Windows XP для использования с VMware, отключив все, что бесполезно для варианта использования.

Я использовал несколько дней с nLite, и у меня действительно скудная установка - не слишком агрессивная (мужик, есть некоторые предостережения по настройке и удалению вещей с помощью nLite!). ISO действительно потрясающий.

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

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

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

Заранее спасибо за любые идеи :)

Даниил

РЕДАКТИРОВАТЬ: Просто чтобы избежать "отключение кэширования записи плохо" (я действительно просто хотел бы получить ответы на мой вопрос :) Спасибо).

Тесты ATTO для кэширования без записи (слева) и кэширования записи (справа):

Тесты ATTO для кэширования без записи (слева) и кэширования записи (справа)

РЕДАКТИРОВАТЬ 2: По вдохновению @ techie007, я попытался определить преимущества памяти от отключения кеширования. Как вы можете видеть на этих скриншотах, ничего не получится, если отключить кеширование, по крайней мере, с точки зрения памяти. Любое изменение здесь будет полностью в пределах статистической неопределенности.

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

Первые два с включенным кэшированием записи (во время ATTO, затем после):

Следующие два являются тем же сценарием, но с отключенным кэшированием записи:

3 ответа3

1

Это невозможно. На самом деле в Windows нет дискового кеша, у него есть кеш страниц, и вся подсистема управления памятью построена на нем. Даже такие вещи, как отслеживание того, какая память активна, а какая неактивна, управляются через защиту страниц в кеше страниц.

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

Это все равно что строить машину каждый день, чтобы ездить на работу.

1

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

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

В общем, это хорошая новость, поскольку реализовать ее в моем сценарии оказалось очень сложно!

Спасибо всем, что подталкиваешь меня;)

0

Что ж, проведение этого бенчмаркинга на самом деле оказалось утомительным занятием :)

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

Вот команды в моем случае:

reg add "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\IDE\DiskVMware_Virtual_IDE_Hard_Drive___________00000001\3030303030303030303030303030303030303130\Device Parameters\Disk" /v UserWriteCacheSetting /t REG_DWORD /d 00000000 /f
reg add "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\IDE\DiskVMware_Virtual_IDE_Hard_Drive___________00000001\3130303030303030303030303030303030303130\Device Parameters\Disk" /v UserWriteCacheSetting /t REG_DWORD /d 00000000 /f

reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\IDE\DiskVMware_Virtual_IDE_Hard_Drive___________00000001\3030303030303030303030303030303030303130\Device Parameters\Disk" /v UserWriteCacheSetting /t REG_DWORD /d 00000000 /f
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\IDE\DiskVMware_Virtual_IDE_Hard_Drive___________00000001\3130303030303030303030303030303030303130\Device Parameters\Disk" /v UserWriteCacheSetting /t REG_DWORD /d 00000000 /f

Это для двух дисков виртуального адаптера ide0 - основного и подчиненного. По крайней мере, в Fusion 6.

Я бы предпочел выполнить поиск UserWriteCacheSetting, а затем отключить каждый из них, но ATM я не знаю, как бы я это сделал из командной строки. Если я узнаю, я обновлю :)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .