Советы по оптимизации Hyper-V (часть 1)

Опубликовано: 18 Апреля, 2023

  • Советы по оптимизации Hyper-V (часть 3): глубина очереди хранилища
  • Советы по оптимизации Hyper-V (часть 5)

Введение

Кэширование записи на диск — это функция повышения производительности, представленная в Windows Server 2003 и Windows XP, которая позволяет операционной системе и приложениям работать быстрее, позволяя им не ждать, пока запросы на запись данных будут зафиксированы на диске. Но хотя эти «отложенные записи» могут помочь Windows работать быстрее, они также связаны с риском. Это связано с тем, что внезапный аппаратный сбой, сбой программного обеспечения или отключение питания могут привести к потере кэшированных данных. Результатом может быть то, что Windows думает, что определенные данные были записаны на диск, тогда как на самом деле записи не были зафиксированы на диске. Кроме того, может произойти повреждение файловой системы и/или потеря данных. Наличие резервного источника питания, такого как ИБП, может помочь снизить такие риски.

Для сценариев, в которых целостность данных важнее производительности, важно отключить кэширование диска. Одним из примеров такого сценария являются контроллеры домена Active Directory, где кэширование записи на диск всегда должно быть отключено, чтобы предотвратить повреждение базы данных каталога и/или потерю важной информации о безопасности для домена. Фактически, когда вы повышаете роль системы Windows Server до роли контроллера домена, Windows автоматически отключает функцию кэширования записи. Брайен Поузи подробно исследует этот вопрос в своей статье «Решения для виртуализации контроллеров домена (часть 5)» на сайте VirtualizationAdmin.com. С другой стороны, в некоторых приложениях всегда необходимо включать кэширование записи на диск. Примером этого является Microsoft Exchange Server, который использует функцию кэширования записи Windows для собственной функции регистрации транзакций. Это одна из причин, по которой обычно не рекомендуется развертывать Exchange Server на контроллере домена, как описано здесь.

Понимание кэширования записи на диск

Кэширование записи на диск можно включить или отключить для каждого тома в операционной системе Windows, настроив параметры, которые можно найти, открыв «Управление компьютером», выбрав «Управление дисками», щелкнув правой кнопкой мыши диск и выбрав вкладку «Политики» на странице свойств, как показано. на рисунке 1 ниже:

Рисунок 1: Параметры настройки кэширования записи на диск

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

Второй параметр конфигурации «Отключить сброс буфера кэша записи Windows на устройстве» относится к запросам на запись, которые были помечены операционной системой как «сквозная запись» путем пометки флагом ForceUnitAccess. Когда запрос на запись помечен как сквозная запись, аппаратное обеспечение хранилища должно гарантировать, что данные были записаны в энергонезависимое (дисковое) хранилище и не были временно сохранены в каком-либо промежуточном кэше на аппаратном обеспечении хранилища. Аппаратное обеспечение корпоративного хранилища может выполнить это несколькими способами, один из наиболее распространенных подходов заключается в том, что промежуточный кэш на аппаратном обеспечении хранилища работает от батареи, что позволяет выполнять грязные (кэшированные) записи (сбрасывать на диск в правильном последовательном порядке), даже когда сама серверная система испытывает сбой питания или сбой операционной системы. Однако если вы включите параметр «Отключить сброс буфера кэша записи Windows на устройстве», флаг ForceUnitAccess будет удален из любых запросов на запись, помеченных этим флагом. Это приводит к большему использованию кэш-памяти и, следовательно, к повышению производительности записи, но этот параметр следует включать только в том случае, если присутствует ИБП, который резервирует питание для оборудования на всем пути ввода-вывода (или если машина представляет собой ноутбук с рабочий аккумулятор в нем). Из-за возможного дополнительного риска потери данных этот второй параметр кэширования записи не включен по умолчанию в системах Windows Server. Дополнительные сведения и рекомендации по использованию этих двух параметров кэширования записи на диск см. в Руководстве по настройке производительности для Windows Server 2012 R2 на сайте MSDN.

Сценарии изменения параметров кэша записи по умолчанию

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

А для интересной истории, касающейся второй настройки, обязательно ознакомьтесь с сообщением под названием «Опасная настройка опасна: вот почему вам не следует отключать очистку буфера кеша записи» в блоге Рэймонда Чена The Old New Thing. Обязательно прочитайте комментарии к этому сообщению, так как они дают дополнительную полезную информацию — например, комментарий, в котором говорится: «Многие жесткие диски обманывают и кэшируют запись внутри — даже если протокол этого не позволяет», что очень мило. страшно. Основная мысль Рэймонда в его посте, по-видимому, заключается в том, что второй параметр никогда не следует выбирать, а вместо этого его следует исключить из пользовательского интерфейса Windows. Однако, как отмечает Эммануэль Бержерат в своем посте на MSDN под названием «Флажок, который экономит ваши часы», на самом деле есть несколько реальных сценариев, когда установка второго флажка имеет смысл. Наконец, обратите внимание, что некоторые серверные системы имеют параметры прошивки (BIOS или UEFI), которые вы можете использовать для настройки промежуточного кэширования для подсистемы хранения, поэтому вам нужно знать не только параметры Windows — для настройки кэширования записи вы должны это сделать. как в операционной системе, так и на контроллере хранилища.

Кэширование записи на диск на виртуальных машинах

Вопрос, на котором мы хотим сосредоточиться в оставшейся части этой статьи, — это влияние использования этих параметров на виртуальные машины, работающие на узлах Hyper-V. На рис. 2 показана виртуальная машина с именем SERVER03 под управлением Windows Server 2012 R2, открытая в Virtual Machine Connection на узле Hyper-V с именем HOST40, на котором также работает Windows Server 2012 R2. Когда мы пытаемся очистить «Включить кэширование записи на устройстве», чтобы отключить кэширование записи на виртуальном жестком диске (VHD) для этой виртуальной машины, появляется показанное диалоговое окно с сообщением об ошибке, информирующее нас о том, что это действие не разрешено:

Рисунок 2: Попытка отключить кэширование записи для виртуального жесткого диска.

Если вы нажмете OK в приведенном выше диалоговом окне, настройки кэширования записи по умолчанию будут восстановлены, и отобразится предупреждающее сообщение:

Рисунок 3: Вы не можете отключить кэширование записи на виртуальном жестком диске.

Давайте подумаем об этом более внимательно. Во-первых, вполне логично, что Hyper-V не позволяет изменять параметры кэша записи для виртуальных жестких дисков, подключенных к виртуальным машинам. В конце концов, виртуальный жесткий диск — это вообще не устройство хранения, это просто файл (.vhd или.vhdx), хранящийся в файловой системе устройства хранения, используемого хостом. Поскольку это всего лишь файл, виртуальный жесткий диск не имеет связанного с ним дискового кеша. Итак, что действительно важно в этом сценарии, так это то, нужно ли вам включать или отключать кэширование записи на диск в базовом физическом хранилище, в котором хранится VHD или VHDX виртуальной машины. Тип кэширования записи, используемого физическим хранилищем хоста, очевидно, зависит от типа устройства хранения, используемого хостом, которое может быть внутренним или напрямую подключенным жестким диском или твердотельным накопителем, аппаратным RAID, HBA для Fibre Channel SAN и так далее.

Но если вы не можете отключить кэширование записи для этого виртуального жесткого диска, то почему в более ранних версиях Hyper-V можно было отключить кэширование записи в виртуальной машине с помощью приведенного выше листа свойств политик? Ответ (как мне сказал эксперт по Hyper-V в Microsoft) заключается просто в том, что в атапорте Windows и стеке хранилища Hyper-V в более ранних версиях Hyper-V была ошибка, которая позволяла вам изменить запись на диск. настройка кэширования системного диска виртуальной машины, если этот системный диск был зарезервирован виртуальным жестким диском, использующим виртуальную среду IDE (vIDE). Эта ошибка создавала у пользователей впечатление, что они могут отключить кэширование записи, чтобы улучшить целостность данных для операций записи на виртуальный жесткий диск, но на самом деле все, что она действительно делала, — это создавала потенциальную возможность потери данных и повреждения виртуального жесткого диска, если базовый Hyper У хоста -V произошло отключение питания или незапланированный запуск (подробности см. в статье KB2853952). Microsoft выпустила исправление для этой проблемы, как описано в этой статье базы знаний, но дело в том, что кэширование записи не настраивается для виртуальных жестких дисков на виртуальных машинах — и не должно быть.

Но хотя Hyper-V не позволит вам отключить кэширование записи на виртуальном жестком диске, сняв параметр «Включить кэширование записи на устройстве» в гостевой операционной системе виртуальной машины, Hyper-V позволяет вам выбрать второй параметр «Отключить сброс буфера кэша записи Windows на устройстве», как показано на следующем снимке экрана:

Рисунок 4: Однако вы можете отключить буферизацию кэша записи на этом виртуальном диске.

Почему так и какой смысл это делать? Во-первых, помните, что это первый параметр, который определяет, включено ли кэширование записи на диске или нет. И поскольку виртуальный жесткий диск на самом деле вовсе не диск, этот параметр не имеет значения, когда речь идет о виртуальных дисках. Но второй параметр отличается и имеет значение, поскольку он управляет настройками включения/выключения сброса кеша для диска. Когда вы выбираете второй параметр, очистка кеша по существу будет претендовать на успех — по крайней мере, на уровне программного стека. Эти сбросы могут быть дорогостоящими для определенных типов физических устройств хранения, таких как жесткие диски и твердотельные накопители SATA, поскольку очередь команд опустошается при сбросе грязных данных в кэше. Сбросы также обычно имеют свою собственную встроенную стоимость, связанную с тем, как их обрабатывает контроллер хранилища. Поэтому, когда вы выбираете этот параметр в гостевой ОС для виртуального жесткого диска на виртуальной машине, вы можете увидеть некоторое улучшение производительности для приложений, работающих на виртуальной машине. Но всегда помните, что именно настройки дискового кэша хоста являются важными с точки зрения целостности данных.

Дополнительные ресурсы

Дополнительные сведения о том, как работает кэширование в стеке виртуального хранилища Hyper-V, см. в статье KB2801713 Хранилище Hyper-V: уровни кэширования и влияние на согласованность данных. Помните также, что кэширование диска — это лишь одна из многих проблем, связанных с хранилищем на хостах Hyper-V. Если вы относительно новичок в Hyper-V, лучше всего начать с моей предыдущей серии статей под названием «Планирование хранения для хостов Hyper-V» здесь, на WindowsNetworking.com.

Есть вопросы о Hyper-V?

Если у вас есть какие-либо вопросы о платформе виртуализации Microsoft Hyper-V, лучше всего задать их на форуме Hyper-V в Microsoft TechNet. Если вы не получите оттуда необходимую вам помощь, вы можете попробовать отправить свой вопрос нам по адресу [email protected], чтобы мы могли опубликовать его в разделе «Спросите наших читателей » нашего еженедельного информационного бюллетеня WServerNews, и мы посмотрим, будет ли какой-либо из почти 100 000 ИТ-специалистов, подписавшихся на нашу рассылку, могут предложить вам какие-либо предложения.

  • Советы по оптимизации Hyper-V (часть 3): глубина очереди хранилища
  • Советы по оптимизации Hyper-V (часть 5)