Рекомендации по производительности сетевой файловой системы (NFS) 3.0 в хранилище BLOB-объектов Azure

Хранилище BLOB-объектов Azure теперь поддерживает протокол NFS 3.0. В этой статье содержатся рекомендации, помогающие оптимизировать производительность запросов на хранение. Дополнительные сведения о поддержке NFS 3.0 для хранилища BLOB-объектов см. в статье о поддержке протокола NFS 3.0 для хранилища BLOB-объектов Azure.

Добавление клиентов для повышения пропускной способности

Хранилище объектов BLOB масштабируется линейно до достижения максимальных границ на исходящий и входящий трафик в учетной записи хранения. Таким образом, приложения могут достичь более высокой пропускной способности с помощью большего числа клиентов. Сведения о том, как просмотреть исходящие данные учетной записи хранения и ограничения входящего трафика, см. в разделе "Целевые показатели масштабируемости и производительности" для стандартных учетных записей хранения.

На следующей диаграмме показано, как увеличивается пропускная способность при добавлении дополнительных клиентов. На этой диаграмме клиент представляет собой виртуальную машину (VM) со стандартной учетной записью хранилища общего назначения v2.

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

На следующей диаграмме показан тот же эффект при применении к учетной записи хранения BLOB-объектов класса Premium.

Схема, которая показывает гистограмму производительности Premium.

Использование учетных записей хранения BLOB-объектов класса Premium для небольших приложений

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

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

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

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

Параметр read_ahead_kb ядра представляет объем дополнительных данных, которые следует считывать после выполнения заданного запроса на чтение. Этот параметр можно увеличить до 16 МиБ, чтобы повысить пропускную способность чтения больших файлов.

export AZMNT=/your/container/mountpoint

echo 16384 > /sys/class/bdi/0:$(stat -c "%d" $AZMNT)/read_ahead_kb

Избегайте частых перезаписей данных

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

Развертывание Azure HPC Cache для чувствительных к задержке приложений.

Для некоторых приложений может потребоваться низкая задержка в дополнение к высокой пропускной способности. Вы можете развернуть Azure HPC Cache, чтобы значительно уменьшить задержку. Дополнительные сведения о задержке в хранилище BLOB-объектов.

Увеличение числа TCP-подключений

Вы можете использовать параметр монтирования nconnect, чтобы получить более высокую производительность чтения и записи с одной виртуальной машины, но только в том случае, если ваше ядро Linux имеет поддержку Azure nconnect.

Опция nconnect — это клиентская опция монтирования Linux, которую можно использовать для нескольких подключений Протокола управления передачей (TCP) между клиентом и конечной точкой службы BLOB. Вы можете использовать nconnect параметр в команде подключения, чтобы указать количество tcp-подключений, которые требуется создать (например: mount -t aznfs -o nconnect=16,sec=sys,vers=3,nolock,proto=tcp <storage-account-name>.blob.core.windows.net:/<storage-account-name>/<container-name> /nfsdatain).

Это важно

Хотя последние дистрибутивы Linux полностью поддерживаются nconnect, используйте этот параметр только в том случае, если в вашем ядре есть поддержка Azure nconnect . Использование параметра nconnect без поддержки Azure nconnect уменьшает пропускную способность, вызывает многочисленные тайм-ауты и приводит к некорректной работе команд, таких как READDIR и READIRPLUS.

Поддержка Azure nconnect доступна с большинством последних ядер Ubuntu, которые можно использовать с виртуальными машинами Azure. Чтобы узнать, доступна ли поддержка Azure nconnect для ядра, выполните следующую команду:

[ -e /sys/module/sunrpc/parameters/enable_azure_nconnect ] && echo "Yes" || echo "No"

Если поддержка Azure nconnect доступна для вашего ядра, Yes выводится в консоль. No В противном случае выводится в консоль.

Если поддержка Azure nconnect доступна, выполните следующую команду, чтобы включить ее:

echo Y > /sys/module/sunrpc/parameters/enable_azure_nconnect

Другие рекомендации

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