Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Виртуальные машины Azure имеют параметры сети по умолчанию, которые можно оптимизировать для пропускной способности сети. В этой статье описывается оптимизация пропускной способности сети для виртуальных машин Windows и Linux, включая основные дистрибутивы, такие как Ubuntu и Red Hat.
Виртуальные машины Windows
Если виртуальная машина Windows поддерживает ускорение сети, включите эту функцию для оптимальной пропускной способности. Дополнительные сведения см. в статье "Создание виртуальной машины Windows с ускорением сети".
Для всех остальных виртуальных машин Windows использование масштабирования на стороне получения (RSS) может достичь более высокой максимальной пропускной способности, чем виртуальная машина без RSS. RSS может быть отключен по умолчанию на виртуальной машине Windows. Чтобы проверить, включен ли RSS и включить его, выполните следующие действия.
Узнайте, включен ли RSS для сетевого адаптера с помощью команды Get-NetAdapterRss PowerShell. В следующем примере выходные данные, возвращаемые из
Get-NetAdapterRss
RSS, не активированы.Name : Ethernet InterfaceDescription : Microsoft Hyper-V Network Adapter Enabled : False
Чтобы включить RSS, введите следующую команду:
Get-NetAdapter | % {Enable-NetAdapterRss -Name $_.Name}
Эта команда не имеет выходных данных. Команда изменяет параметры сетевой карты (сетевого адаптера). Это приводит к временной потере подключения около одной минуты. Во время потери подключения появится диалоговое окно повторного подключения . Подключение обычно восстанавливается после третьей попытки.
Убедитесь, что RSS включена на виртуальной
Get-NetAdapterRss
машине, снова введя команду. При успешном выполнении возвращается следующий пример выходных данных:Name : Ethernet InterfaceDescription : Microsoft Hyper-V Network Adapter Enabled : True
Виртуальные машины Linux
RSS всегда включен по умолчанию в виртуальной машине Linux в Azure. Ядра Linux, выпущенные с октября 2017 года, включают новые параметры оптимизации сети, позволяющие виртуальной машине Linux достичь более высокой пропускной способности сети.
Включение ускоренной сети Azure для оптимальной пропускной способности
Azure обеспечивает ускоренное сетевое соединение, которое может действительно повысить производительность сети, снизить задержку и уменьшить jitter. В настоящее время существуют два разных технологии, которые используются в зависимости от размера виртуальной машины, Mellanox , которая доступна и MANA , разработанная корпорацией Майкрософт.
Настроенные ядра Azure
Некоторые дистрибутивы, такие как Ubuntu (Canonical) и SUSE, имеют оптимизированные ядра Azure.
Используйте следующую команду, чтобы убедиться, что вы используете ядро Azure, которая обычно имеет строку azure
в названии.
uname -r
#sample output on Azure kernel on a Ubuntu Linux VM
6.8.0-1017-azure
Другие дистрибутивы Linux
Большинство современных дистрибутивов имеют значительные улучшения с более новыми ядрами. Проверьте текущую версию ядра, чтобы убедиться, что вы используете ядро, новее версии 4.19, в котором реализованы значительные улучшения в области сетевых технологий, например, поддержка BBR Congestion-Based Управление перегрузкой.
Обеспечение согласованной скорости передачи на виртуальных машинах Linux в Azure
Виртуальные машины Linux часто сталкиваются с проблемами производительности сети, особенно при передаче больших файлов (1 ГБ на 50 ГБ) между регионами, такими как Западная Европа и Западная часть США. Эти проблемы вызваны старыми версиями ядра, а также конфигурациями ядра по умолчанию, параметрами сетевого буфера по умолчанию и алгоритмами управления перегрузками по умолчанию, что приводит к задержке пакетов, ограниченной пропускной способности и неэффективному использованию ресурсов.
Чтобы обеспечить согласованную производительность сети, рекомендуется реализовать следующие оптимизации, которые доказали свою эффективность во многих ситуациях в Azure:
-
Параметры сетевого буфера: настройте параметры ядра, чтобы максимально увеличить объем буферов памяти чтения и записи. Добавьте следующие конфигурации в
/etc/sysctl.d/99-azure-network-buffers.conf
:
net.ipv4.tcp_mem = 4096 87380 67108864
net.ipv4.udp_mem = 4096 87380 33554432
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 65536 67108864
net.core.rmem_default = 33554432
net.core.wmem_default = 33554432
net.ipv4.udp_wmem_min = 16384
net.ipv4.udp_rmem_min = 16384
net.core.wmem_max = 134217728
net.core.rmem_max = 134217728
net.core.busy_poll = 50
net.core.busy_read = 50
-
Congestion-Based управление перегрузкой для ядер версии 4.19 и выше: Включение управления перегрузкой пропускной способности и времени распространения по круговому маршруту (BBR) может часто улучшать пропускную способность. Добавьте эту конфигурацию в
/etc/sysctl.d/99-azure-congestion-control.conf
:
net.ipv4.tcp_congestion_control = bbr
-
Дополнительные параметры TCP, которые обычно помогают повысить согласованность, пропускную способность: добавьте следующие конфигурации в
/etc/sysctl.d/99-azure-network-extras.conf
:
# For deployments where the Linux VM is BEHIND an Azure Load Balancer, timestamps MUST be set to 0
net.ipv4.tcp_timestamps = 1
# Reuse does require tcp_timestamps to be enabled. If tcp_timestamps are disabled because of load balancers, you should set reuse to 2.
net.ipv4.tcp_tw_reuse = 1
# Allowed local port range. This will increase the number of locally available ports (source ports)
net.ipv4.ip_local_port_range = 1024 65535
# Maximum number of packets taken from all interfaces in one polling cycle (NAPI poll). In one polling cycle interfaces which are # registered to polling are probed in a round-robin manner.
net.core.netdev_budget = 1000
# For high-performance environments, it's recommended to increase from the default 20KB to 65KB, in some extreme cases, for environments that support 100G+ networking, you can
# increase it to 1048576
net.core.optmem_max = 65535
# F-RTO is not recommended on wired networks.
net.ipv4.tcp_frto = 0
# Increase the number of incoming connections / number of connections backlog
net.core.somaxconn = 32768
net.core.netdev_max_backlog = 32768
net.core.dev_weight = 64
-
Дисциплина очереди (qdisc): обработка пакетов в Azure улучшена, установив для параметра qdisc
fq
по умолчанию значение . Добавьте эту конфигурацию в/etc/sysctl.d/99-azure-qdisc.conf
:
net.core.default_qdisc = fq
-
Оптимизируйте кольцевые буферы сетевого адаптера для TX/RX: создайте правило udev в
/etc/udev/rules.d/99-azure-ring-buffer.rules
, чтобы они применялись к сетевым интерфейсам:
# Setup Accelerated Interface ring buffers (Mellanox / Mana)
SUBSYSTEM=="net", DRIVERS=="hv_pci", ACTION=="add", RUN+="/usr/sbin/ethtool -G $env{INTERFACE} rx 1024 tx 1024"
# Setup Synthetic interface ring buffers (hv_netvsc)
SUBSYSTEM=="net", DRIVERS=="hv_netvsc*", ACTION=="add", RUN+="/usr/sbin/ethtool -G $env{INTERFACE} rx 1024 tx 1024"
- Создайте правило udev в
/etc/udev/rules.d/99-azure-qdisc.rules
, чтобы гарантировать, что qdisc применяется к сетевым интерфейсам:
ACTION=="add|change", SUBSYSTEM=="net", KERNEL=="enP*", PROGRAM="/sbin/tc qdisc replace dev \$env{INTERFACE} root noqueue"
ACTION=="add|change", SUBSYSTEM=="net", KERNEL=="eth*", PROGRAM="/sbin/tc qdisc replace dev \$env{INTERFACE} root fq“
-
Планирование запроса прерываний (IRQ): в зависимости от вашей рабочей нагрузки вы можете захотеть ограничить работу сервиса irqbalance, чтобы он не планировал запросы прерываний на определённых узлах. При использовании IRQBalance можно обновить
/etc/default/irqbalance
, чтобы указать, какие ЦП не должны быть запланированы IRQs, необходимо определить маску , которая исключит ЦП, необходимые для исключения.
Дополнительные сведения о том, как вычислить маску, доступны здесь.
В приведенном ниже примере предполагается, что вы хотите исключить ЦП 8-15
IRQBALANCE_BANNED_CPULIST=0000ff00
-
Правила UDEV. Добавление правил для оптимизации длины очереди и эффективного управления флагами устройств. Создайте следующее правило в
/etc/udev/rules.d/99-azure-txqueue-len.rules
:
SUBSYSTEM=="net", ACTION=="add|change", KERNEL=="eth*", ATTR{tx_queue_len}="10000“
Для пакетов, отложенных дважды
Когда речь идет о повышении сетевой производительности Linux, мы используем SR-IOV с драйверами Mellanox (mlx4 или mlx5). Особенностью Azure является то, что это создает два интерфейса: синтетический и виртуальный. Дополнительные сведения.
Дополнительные заметки
Системные администраторы могут реализовать эти решения, изменив такие файлы конфигурации, как /etc/sysctl.d/
, /etc/modules-load.d/
и /etc/udev/rules.d/
. Убедитесь, что обновления драйверов ядра и системные конфигурации проверяются для потенциальных регрессий.
Дополнительные сведения о конкретных конфигурациях и устранении неполадок см. в документации Azure по производительности сети.
Связанный контент
- Разверните виртуальные машины близко друг к другу для низкой задержки с группами размещения в непосредственной близости.
- Ознакомьтесь с оптимизированным результатом тестирования пропускной способности и производительности для вашего сценария.
- Узнайте, как пропускная способность выделяется виртуальным машинам.
- Узнайте больше о часто задаваемых вопросах о виртуальной сети Azure.