Оптимизация виртуальной машины Linux в Azure

Вы можете легко создать виртуальную машину (VM) Linux с помощью портала или командной строки. В этом руководстве показано, как при помощи настроек оптимизировать производительность VM на платформе Microsoft Azure. В этой статье описывается виртуальная машина Ubuntu Server, но вы можете также создавать виртуальные машины Linux, используя собственные образы в качестве шаблонов.

Предварительные требования

В этой статье предполагается, что у вас уже есть действующая подписка Azure (бесплатная пробная подписка), в которой подготовлена виртуальная машина. Прежде чем создавать виртуальную машину, установите последнюю версию Azure CLI и войдите в учетную запись Azure, выполнив команду az login.

Диск ОС в Azure

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

Добавление дисков для увеличения размера и производительности

В зависимости от размера виртуальной машины можно подключить до 16 дополнительных дисков к машинам серии A, до 32 дисков — серии D и до 64 дисков — серии G (размер каждого диска — до 32 ТБ). Дополнительные диски добавляются по мере необходимости в зависимости от требований к пространству и количеству операций ввода-вывода. Каждый диск имеет следующие целевые показатели производительности: 500 операций ввода-вывода на диск для хранилища класса "Стандартный" и до 20 000 операций ввода-вывода на диск для хранилища класса Premium.

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

  • Если вы используете систему reiserFS, отключите барьеры, используя параметр подключения barrier=none (для включения барьеров используйте параметр barrier=flush).
  • Если вы используете систему ext3/ext4, отключите барьеры, используя параметр подключения barrier=0 (для их включения используйте параметр barrier=1).
  • Если вы используете систему XFS, отключите барьеры, используя параметр подключения nobarrier (для их включения используйте параметр barrier).

Рекомендации по неуправляемой учетной записи хранения

По умолчанию виртуальная машина, созданная с помощью Azure CLI, использует Управляемые диски Azure. Эти диски полностью контролируются платформой Azure и не требуют никакой подготовки или хранилища. Для неуправляемых дисков, требующих учетную запись хранения, имеются некоторые дополнительные рекомендации по производительности. Дополнительные сведения об управляемых дисках Azure см. в этой статье. В следующем разделе описываются рекомендации по производительности при использовании неуправляемых дисков. По умолчанию в качестве решения хранилища мы рекомендуем использовать управляемые диски.

При создании виртуальной машины на базе неуправляемых дисков необходимо подключить диски из учетных записей хранения, находящихся в одном регионе с вашей виртуальной машиной, чтобы обеспечить максимальную близость расположения и свести к минимуму задержки в сети. Для каждой учетной записи хранилища класса "Стандартный" предусмотрено максимум 20 тысяч операций ввода-вывода и размер до 500 ТБ. Это ограничение действует примерно 40 часто используемых дисков, включая диск ОС и все созданные диски данных. Для учетных записей хранилища класса Premium нет ограничения на количество операций ввода-вывода, но существует ограничение на размер — 32 ТБ.

Если вы работаете с большим количеством операций ввода-вывода и выбрали для дисков хранилище уровня "Стандартный", то вам, возможно, потребуется разбить диски на несколько учетных записей хранения, чтобы не достичь ограничения в 20 000 операций ввода-вывода для учетных записей хранения уровня "Стандартный". Виртуальная машина может содержать диски из разных учетных записей хранения различных типов, что позволяет достичь оптимальной конфигурации.

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

По умолчанию при создании виртуальной машины в Azure предоставляется диск операционной системы ( /dev/sda) и временный диск ( /dev/sdb). При добавлении дополнительных дисков они отображаются как /dev/sdc, /dev/sdd, /dev/sde и т. д. Все данные на временном диске ( /dev/sdb) недолговечны и могут быть утеряны, если виртуальная машина будет перезапущена из-за определенных событий, таких как изменение размера, повторное развертывание или обслуживание виртуальной машины. Размер и тип временного диска зависят от размера виртуальной машины, выбранного во время развертывания. С любой из виртуальных машин уровня "Премиум" (серии DS, G и DS_V2) для временного диска предусмотрен резервный локальный твердотельный накопитель, обеспечивающий дополнительную производительность — до 48 тысяч операций ввода-вывода в секунду.

Раздел подкачки Linux

Если виртуальная машина Azure создана из образа Ubuntu или CoreOS, то с помощью CustomData вы можете отправить файл cloud-config в пакет cloud-init. Если вы передали пользовательский образ Linux, использующий cloud-init, разделы подкачки также нужно настраивать с помощью cloud-init.

Вы не можете использовать файл /etc/waagent.conf для управления переключением для всех образов, которые подготовлены и поддерживаются Cloud-init. Полный список образов см. в разделе Использование Cloud-init.

Самый простой способ управления перестановкой этих образов — выполнить следующие действия:

  1. В папке /Вар/либ/Клауд/скриптс/пер-Бут создайте файл с именем create_swapfile. sh:

    $ sudo Touch/Вар/либ/Клауд/скриптс/пер-Бут/create_swapfile. sh

  2. Добавьте в файл следующие строки:

    $ sudo VI/Вар/либ/Клауд/скриптс/пер-Бут/create_swapfile. sh

    #!/bin/sh
    if [ ! -f '/mnt/swapfile' ]; then
    fallocate --length 2GiB /mnt/swapfile
    chmod 600 /mnt/swapfile
    mkswap /mnt/swapfile
    swapon /mnt/swapfile
    swapon -a ; fi
    

    Примечание

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

  3. Сделайте файл исполняемым:

    $ sudo chmod + x/Вар/либ/Клауд/скриптс/пер-Бут/create_swapfile. sh

  4. Чтобы создать файл подкачки, выполните сценарий сразу после последнего шага:

    $ sudo/Вар/либ/Клауд/скриптс/пер-бут/./create_swapfile. sh

Образы виртуальных машин, которые развернуты из каталога Azure Marketplace и в которых cloud-init не поддерживается, содержат интегрированный в ОС агент виртуальных машин Linux. Этот агент позволяет виртуальной машине взаимодействовать с различными службами Azure. Предположим, что вы развернули стандартный образ из Azure Marketplace. Теперь вам необходимо выполнить указанные ниже действия, чтобы правильно настроить параметры файла подкачки Linux.

Найдите и измените две записи в файле /etc/waagent.conf . От них зависит наличие и размер специального файла подкачки. Параметры, которые необходимо проверить, — это ResourceDisk.EnableSwap и ResourceDisk.SwapSizeMB.

Чтобы правильно включить диск и подключенный файл подкачки, убедитесь, что параметры установлены следующим образом.

  • ResourceDisk.EnableSwap=Y
  • ResourceDisk.SwapSizeMB={требуемый размер в МБ}

После внесения изменений необходимо перезапустить waagent или виртуальную машину Linux для отображения этих изменений. Вы можете убедиться в том, что изменения внесены, а файл подкачки создан, при помощи команды free для просмотра свободного пространства. В следующем примере файл подкачки размером 512 МБ создан в результате изменения файла waagent.conf.

azuseruser@myVM:~$ free
            total       used       free     shared    buffers     cached
Mem:       3525156     804168    2720988        408       8428     633192
-/+ buffers/cache:     162548    3362608
Swap:       524284          0     524284

Алгоритм планирования операций ввода-вывода для хранилища класса Premium

С появлением ядра Linux 2.6.18 стандартный алгоритм планирования операций ввода-вывода был изменен с Deadline на CFQ (алгоритм организации полностью равноправных очередей). Если речь идет о моделях операций ввода-вывода с произвольным доступом, между алгоритмами CFQ и Deadline существуют минимальные различия в производительности. В случае с дисками на основе SSD, в которых модель операций ввода-вывода является преимущественно последовательной, переход обратно на алгоритм NOOP или Deadline позволяет добиться повышения производительности операций ввода-вывода.

Просмотр текущего планировщика операций ввода-вывода

Используйте следующую команду:

cat /sys/block/sda/queue/scheduler

Вы увидите следующий результат, который указывает тип текущего планировщика.

noop [deadline] cfq

Изменение текущего устройства (/dev/sda) алгоритма планирования операций ввода-вывода

Используйте следующие команды:

azureuser@myVM:~$ sudo su -
root@myVM:~# echo "noop" >/sys/block/sda/queue/scheduler
root@myVM:~# sed -i 's/GRUB_CMDLINE_LINUX=""/GRUB_CMDLINE_LINUX_DEFAULT="quiet splash elevator=noop"/g' /etc/default/grub
root@myVM:~# update-grub

Примечание

Применять алгоритм только для устройства /dev/sda бесполезно. Задайте его для всех дисков данных, где в модели операций ввода-вывода преобладают последовательные операции.

Вы увидите следующий результат, означающий, что файл grub.cfg успешно перестроен и планировщик по умолчанию обновлен до алгоритма NOOP.

Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.13.0-34-generic
Found initrd image: /boot/initrd.img-3.13.0-34-generic
Found linux image: /boot/vmlinuz-3.13.0-32-generic
Found initrd image: /boot/initrd.img-3.13.0-32-generic
Found memtest86+ image: /memtest86+.elf
Found memtest86+ image: /memtest86+.bin
done

Для семейства дистрибутивов Red Hat необходимо выполнить только приведенную ниже команду.

echo 'echo noop >/sys/block/sda/queue/scheduler' >> /etc/rc.local

Ubuntu 18.04 с ядром, настроенным для Azure, использует планировщики ввода-вывода с несколькими очередями. В этом сценарии стоит выбрать none вместо noop. Дополнительные сведения см. в разделе Планировщики ввода-вывода Ubuntu.

Использование программной конфигурации RAID для увеличения количества операций ввода-вывода

Если для рабочих нагрузок требуется больше операций ввода-вывода, чем может обеспечить один диск, то необходимо использовать программную конфигурацию RAID для нескольких дисков. Поскольку Azure уже выполняет функцию устойчивости диска на уровне локальной структуры, вы можете достичь максимальной производительности, используя конфигурацию с чередованием дисков RAID-0. Подготовьте и создайте диски в среде Azure, а также подключите их к виртуальной машине Linux до секционирования, форматирования и подключения дисков. Дополнительные сведения о настройке программного RAID-массива в виртуальной машине Linux в Azure см. в статье Настройка программного RAID-массива в Linux .

В качестве альтернативы традиционной конфигурации RAID можно также установить Диспетчер логических томов (LVM), чтобы настроить ряд физических дисков в один чередующийся логический том хранилища. В этой конфигурации операции чтения и записи распределяются между несколькими дисками в группе томов (аналогично чередованию RAID 0). Для повышения производительности вам потребуется чередовать логические тома. Это позволит выполнять операции чтения и записи на всех подключенных дисках с данными. Дополнительные сведения о настройке чередующегося логического тома в виртуальной машине Linux в Azure см. в документе Настройка Диспетчера логических томов (LVM) на виртуальной машине Linux в Azure .

Next Steps

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

Полезные ссылки на дополнительные ресурсы: