Хранилище Hyper-V: кэширование слоев и влияние на согласованность данных

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

Применяется к: Windows Server 2012 R2
Исходный номер базы знаний: 2801713

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

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

  • Кэш файловой системы. По умолчанию Windows кэширует данные файлов, которые считываются с дисков и записываются на диски. Это означает, что операции чтения считывают файловые данные из области системной памяти, которая называется кэшем системных файлов, а не с физического диска. Соответственно, операции записи записывают файловые данные в системный файловый кэш, а не на диск, и такой кэш называется кэшем обратной записи. Приложения могут использовать небуферированную семантику файловой системы, чтобы убедиться, что операции записи не кэшируются в системном кэше.
  • Кэш дисков. Диски реализуют кэширование на уровне встроенного ПО, чтобы повысить производительность дисков. Хотя кэширование на уровне встроенного ПО может повысить производительность, данные на диске могут быть потеряны перед записью на диск в случае сбоя питания. Параметры для управления этим поведением кэширования являются частью стандартных интерфейсов дисков, таких как SCSI, SATA и ATA. Эти типы параметров указаны ниже.
    1. Используйте механизм управления для каждого ввода-вывода, который называется принудительным доступом к единицам (FUA). Этот флаг указывает, что диск должен записывать данные в стабильное хранилище мультимедиа перед завершением передачи сигналов. Приложения, которые должны сделать это, должны убедиться, что данные стабильны на диске, проблема с FUA, чтобы убедиться, что данные не будут потеряны в случае сбоя питания.

      Диски серверного класса (SCSI и Fibre Channel) обычно поддерживают флаг FUA. На товарных дисках (ATA, SATA и USB) FUA может не учитываться. Это потенциально может оставить данные в несогласованном состоянии, если кэш записи диска не отключен. Убедитесь, что подсистема диска правильно обрабатывает FUA, если вы зависите от этого механизма.

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

    3. Отключите кэширование диска. Кэширование записи на диске можно отключить, выпустив на диск код управления IOCTL_DISK_SET_CACHE_INFORMATION. Состояние кэша записи (включено или выключено) будет сохраняться при перезапусках системы. Выдача этого кода управления будет иметь очень значительные последствия для производительности всех механизмов ввода-вывода, которые выдаются на этот диск. Эти последствия, скорее всего, включают заметное снижение производительности. Перед развертыванием следует тщательно рассмотреть возможность использования этого кода элемента управления.

      Примечание.

      Если вы не можете отключить кэширование диска, следует рассмотреть варианты 1 и 2.

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

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

  • Кэш гостевого виртуального диска. Виртуализированная интегрированная среда разработки (эмулированная или искусственная) или устройство SCSI будет сообщать о состоянии кэша записи, возвращаемом нижним стеком. Виртуальные диски будут сообщать о том, что их кэш записи включен, и они откажутся разрешить гостевой отключать кэш записи. Отключение кэша завершится ошибкой и всегда будет отвечать, что кэш включен. Это необходимо по следующим причинам:

    • Hyper-V не может предположить, что все виртуальные машины, работающие на одном диске, должны иметь одинаковые параметры кэша дисков.

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

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

  • Кэш файловой системы узла. Стек хранилища Hyper-V также использует небуферизованные записи, чтобы записи из гостевого узла обходили базовый стек файловой системы узла.

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

    • Система использует диски серверного класса (SCSI, Fibre Channel).
    • Система гарантирует, что диски подключены к адаптеру кэширования хост-шины (HBA) с поддержкой батареи.
    • Система использует контроллер хранилища (например, RAID-систему) в качестве запоминаемого устройства.
    • Система гарантирует, что питание к диску защищено с помощью источника бесперебойного питания (ИП).
    • Система гарантирует, что функция кэширования записи на диске отключена.