Производительность диска и виртуальной машины

Применимо к: ✔️ Виртуальные машины Linux ✔️ Виртуальные машины Windows ✔️ Универсальные масштабируемые наборы

Эта статья призвана прояснить вопросы, касающиеся производительности дисков и принципов их работы при объединении виртуальных машин Azure и дисков Azure. Здесь также описывается, как диагностировать узкие места для дисковых операций ввода-вывода и вносить изменения для оптимизации производительности.

По какому принципу определяется производительность дисков?

На виртуальных машинах Azure ограничения производительности операций ввода-вывода в секунду (IOPS) и пропускной способности зависят от типа и размера виртуальной машины. К виртуальным машинам можно подключать диски с ОС и диски с данными. У дисков имеются собственные ограничения по операциям ввода-вывода и пропускной способности.

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

Ограничение операций ввода-вывода диском

Настройка:

  • Standard_D8s_v3
    • Операции ввода-вывода в секунду без кэширования: 12 800
  • Диск ОС E30
    • Операций ввода-вывода в секунду: 500
  • Два диска данных E30 × 2
    • Операций ввода-вывода в секунду: 500

Схема, демонстрирующая ограничение на уровне диска.

Приложение, работающее на виртуальной машине, выполняет для этой виртуальной машины запрос, которому необходимо 10 000 операций ввода-вывода в секунду. Все из этих операций разрешены виртуальной машиной, так как виртуальная машина Standard_D8s_v3 может выполнять до 12 800 операций ввода-вывода в секунду.

Запросы на 10 000 операций ввода-вывода в секунду распределяются на три разных запроса для разных дисков:

  • 1000 операций ввода-вывода в секунду запрашивается у диска с операционной системы.
  • 4500 операций ввода-вывода в секунду запрашивается у каждого диска с данными.

Все подключенные диски являются дисками E30 и могут обрабатывать только 500 операций ввода-вывода в секунду. Поэтому каждый из них отвечает о возможности обработать 500 операций ввода-вывода в секунду. Производительность приложения ограничивается подключенными дисками, при этом обработаться может только 1500 операций ввода-вывода в секунду. Приложение может работать с пиковой производительностью 10 000 операций ввода-вывода в секунду при использовании более производительных дисков, например SSD дисков P30 категории "Премиум".

Ограничение операций ввода-вывода виртуальной машиной

Настройка:

  • Standard_D8s_v3
    • Операции ввода-вывода в секунду без кэширования: 12 800
  • Диск ОС P30
    • Операции ввода-вывода в секунду: 5000
  • Два диска данных P30 × 2
    • Операции ввода-вывода в секунду: 5000

Схема, демонстрирующая ограничение на уровне виртуальной машины.

Приложение, работающее на виртуальной машине, выполняет запрос, для которого необходимо 15 000 операций ввода-вывода в секунду. К сожалению, виртуальная машина Standard_D8s_v3ная подготавливается только для обработки 12 800 операций ввода-вывода в секунду. Производительность приложения блокируется ограничениями виртуальной машины и должна соответствовать выделенным 12 800 операциям ввода-вывода в секунду.

Запрошенные 12 800 операций ввода-вывода в секунду распределяются на три разных запроса к разным дискам:

  • 4267 операций ввода-вывода в секунду запрашиваются у диска с операционной системой.
  • 4266 операций ввода-вывода в секунду запрашивается у каждого диска с данными.

Все подключенные диски — это диски P30, которые могут обрабатывать 5000 операций ввода-вывода в секунду. Поэтому они отвечают о возможности обработать запрошенные объемы операций.

Сравнение виртуальной машины без кеширования с машиной с ограничением кэширования

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

Диаграмма, на которой показаны спецификации для серий D*s_v3.

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

Кэширование узла переносит хранилище ближе к виртуальной машине для ускорения чтения и записи. Объем хранилища, который доступен виртуальной машине при кэшировании узла, приведен в документации. Например, вы можете увидеть, что для Standard_D8s_v3 размер хранилища кэша составляет 200 ГиБ.

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

Снимок экрана, на котором показано кэширование узла.

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

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

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

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

Настройка:

  • Standard_D8s_v3
    • Кэшированные операции ввода-вывода в секунду: 16 000
    • Операции ввода-вывода в секунду без кэширования: 12 800
  • Диск данных P30
    • Операции ввода-вывода в секунду: 5000
    • Кэширование узла: Только чтение

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

Диаграмма, на которой показано попадание в кэш при чтении с кэшированием узла.

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

Диаграмма, на которой показан промах кэша при чтении с кэшированием узла.

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

Диаграмма, на которой показано попадание в кэш при записи с кэшированием узла.

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

Настройка:

  • Standard_D8s_v3
    • Кэшированные операции ввода-вывода в секунду: 16 000
    • Операции ввода-вывода в секунду без кэширования: 12 800
  • Диск данных P30
    • Операции ввода-вывода в секунду: 5000
    • Кэширование узла: Чтение и запись

Операции чтения обрабатываются таким же образом, как и в режиме "Только чтение". Операции записи в режиме "Чтение и запись" обрабатываются иначе. При выполнении записи в режиме кэширования узла Чтение и запись данные должны быть записаны только в кэш узла, чтобы операция считалась завершенной. Затем запись записывается на диск, когда кэш периодически очищается. Клиенты также могут принудительно выполнить очистку, выполнив команду f/sync или fua. Это означает, что операция записи учитывается в рамках ограничений для кэшированных операций ввода-вывода, когда данные записываются в кэш. Когда данные записываются на диск в отложенном режиме, эта операция записи учитывается в рамках ограничений для операций ввода-вывода без кэширования.

Схема, на которой показана операция записи в режиме кэширования узла

Рассмотрим другой пример для нашей виртуальной машины Standard_D8s_v3. На этот раз мы включим кэширование узла на дисках. Это делает ограничение операций ввода-вывода в секунду виртуальной машины на 16 000 операций ввода-вывода в секунду. К виртуальной машине подключены три базовых диска P30, каждый из которых поддерживает 5000 операций ввода-вывода в секунду.

Настройка:

  • Standard_D8s_v3
    • Кэшированные операции ввода-вывода в секунду: 16 000
    • Операции ввода-вывода в секунду без кэширования: 12 800
  • Диск ОС P30
    • Операции ввода-вывода в секунду: 5000
    • Кэширование узла: Чтение и запись
  • Два диска данных P30 × 2
    • Операции ввода-вывода в секунду: 5000
    • Кэширование узла: Чтение и запись

Схема, на которой показан пример кэширования узла.

Приложение использует виртуальную машину Standard_D8s_v3 с включенным кэшированием. Он выполняет запрос на 16 000 операций ввода-вывода в секунду. Запросы завершаются, как только они считываются или записываются в кэш. Затем записи записываются на подключенные диски.

Объединение ограничений для операций ввода-вывода с кэшированием и без кэширования

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

Давайте рассмотрим пример, который поможет понять, как эти ограничения работают вместе. Мы продолжим работу с виртуальной машиной Standard_D8s_v3, к которой подключены диски категории "Премиум".

Настройка:

  • Standard_D8s_v3
    • Кэшированные операции ввода-вывода в секунду: 16 000
    • Операции ввода-вывода в секунду без кэширования: 12 800
  • Диск ОС P30
    • Операции ввода-вывода в секунду: 5000
    • Кэширование узла: Чтение и запись
  • Два диска данных P30 × 2
    • Операции ввода-вывода в секунду: 5000
    • Кэширование узла: Чтение и запись
  • Два диска данных P30 × 2
    • Операции ввода-вывода в секунду: 5000
    • Кэширование узла: Отключено

Схема, на которой показан пример кэширования узла с удаленным хранилищем.

В данном случае приложение, работающее на виртуальной машине Standard_D8s_v3, выполняет запрос на 25 000 операций ввода-вывода в секунду. Этот запрос разбивается на 5000 операций ввода-вывода в секунду для каждого подключенного диска. На трех дисках используется кэширование узла, и на двух — не используется.

  • Так как три диска, использующие кэширование узла, находятся в пределах ограничения для операций с кэшированием (16 000), эти запросы завершаются успешно. Ограничения производительности хранилища не происходит.
  • Так как два диска, не использующие кэширование узла, находятся в пределах ограничения для операций без кэширования (12 800), эти запросы также завершаются успешно. Ограничения производительности не происходит.