Производительность диска и виртуальной машины
Применимо к: ✔️ Виртуальные машины 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.
Данные диска без кэширования в удаленном хранилище являются максимальными ограничениями хранилища по умолчанию, которые может обрабатывать виртуальная машина.
Данные диска "Кэшированные" на вкладке "Локальное хранилище" являются отдельными ограничениями при включении кэширования узла.
Кэширование узла переносит хранилище ближе к виртуальной машине для ускорения чтения и записи. Объем хранилища, который доступен виртуальной машине при кэшировании узла, приведен в документации. Например, вы можете увидеть, что для 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 виртуальных машин и дисков класса Premium.
Настройка:
- 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), эти запросы также завершаются успешно. Ограничения производительности не происходит.