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