Сценарии
Сетевая пропускная способность I/O может продолжать расти до того момента, когда один vCPU не сможет обработать все прерывания NIC. NIC multi-queue позволяет нескольким vCPU обрабатывать прерывания NIC, тем самым улучшая PPS сети и производительность I/O.
ECS, поддерживающие NIC Multi-Queue
NIC multi-queue может быть включён только на ECS со спецификациями, образом и типом виртуализации, описанными в этом разделе.
- Для получения подробной информации о ECS flavors, поддерживающих NIC multi-queue, см. раздел "Instances" в Elastic Cloud Server User Guide.Note
Если есть более 1 очереди NIC, поддерживается NIC multi-queue.
- Только KVM ECS поддерживают NIC multi-queue.
- Публичные образы Linux, перечисленные в Таблица 2 поддерживают NIC multi-queue.Note
- Windows не имеет коммерческой поддержки NIC multi-queue. Если включить NIC multi-queue для образа Windows, ECS, созданный из такого образа, может запускаться дольше обычного.
- Для Linux ECSs, рекомендуется обновить ядро до версии 2.6.35 или более новой. В противном случае NIC multi-queue не поддерживается.
Запуск uname -r для проверки версии ядра. Если версия ниже 2.6.35, обратитесь в техническую поддержку для её обновления.
OS | Образ | Поддержка NIC Multi-Queue |
---|---|---|
Windows | Windows Server 2008 WEB R2 64bit | Да (поддерживается только приватными образами) |
Windows Server 2008 Enterprise SP2 64bit | Да (поддерживается только частными образами) | |
Windows Server 2008 R2 Standard/Datacenter/Enterprise 64bit | Да (поддерживается только частными образами) | |
Windows Server 2008 R2 Enterprise 64bit_WithGPUdriver | Да (поддерживается только частными образами) | |
Windows Server 2012 R2 Standard 64bit_WithGPUdriver | Да (поддерживается только частными образами) | |
Windows Server 2012 R2 Standard/Datacenter 64bit | Да (поддерживается только частными образами) |
OS | Image | Поддержка NIC Multi-Queue | Multi-Queue включён по умолчанию для Public Images |
---|---|---|---|
Linux | Ubuntu 14.04/16.04 Server 64bit | Да | Да |
openSUSE 42.2 64bit | Да | Да | |
SUSE Enterprise 12 SP1/SP2 64bit | Да | Да | |
CentOS 6.8/6.9/7.0/7.1/7.2/7.3/7.4/7.5/7.6 64bit | Да | Да | |
Debian 8.0.0/8.8.0/8.9.0/9.0.0 64bit | Да | Да | |
Fedora 24/25 64bit | Да | Да | |
EulerOS 2.2 64bit | Да | Да |
Инструкции по эксплуатации
Предположим, что ECS имеет требуемые характеристики и тип виртуализации.
- Если ECS был создан из публичного образа, указанного в ECS, поддерживающие NIC Multi-Queue, NIC multi-queue включена на ECS по умолчанию. Вам не нужно включать NIC multi-queue вручную.
- Если ECS был создан из внешнего файлa образа с ОС, указанной в ECS, поддерживающие NIC Multi-Queue, вам может потребоваться выполнить следующие операции для включения NIC multi-queue:
- Зарегистрировать внешний файл образа как приватный образ.
- Включить NIC Multi-Queue для образа.
- Создать ECS из приватного образа.
- Включить NIC Multi-Queue на ECS.
Зарегистрировать внешний файл образа как приватный образ
Import the image file to the IMS console. For details, see Registering an Image File as a Private Image.
Enable NIC Multi-Queue for the Image
Windows has not commercially supported NIC multi-queue. If you enable NIC multi-queue for a Windows image, an ECS created from such an image may take longer than normal to start.
Use any of the following methods to enable NIC multi-queue for an image:
Method 1:
- Access the IMS console.
- Log in to the management console.
- Under Computing , click Image Management Service .
The IMS console is displayed.
- On the displayed Private Images странице, найдите строку, содержащую образ, и нажмите Изменить в Операция столбце.
- Включить NIC multi-queue для образа.
Метод 2:
- Откройте консоль IMS.
- Войдите в консоль управления.
- Под Вычисление , нажмите Image Management Service .
Консоль IMS отображается.
- На отображенной Приватные образы странице, нажмите имя образа.
- В правом верхнем углу отображаемой страницы сведений об образе нажмите Изменить . В отображаемом Изменить образ в диалоговом окне включите NIC multi-queue для образа.
Method 3: Добавить hw_vif_multiqueue_enabled к образу с использованием API.
- Получите токен. Для получения подробной информации см. Вызов API > Аутентификация в Image Management Service Справочник API.
- Вызовите API для обновления информации об образе. Для получения подробной информации см. "Updating Image Information (Native OpenStack API)" в Image Management Service Справочник API.
- Добавить X-Auth-Token в заголовок запроса.
Значение X-Auth-Token это токен, полученный на шаге 1.
- Добавьте Content-Type в заголовок запроса.
Установите Content-Type в application/openstack-images-v2.1-json-patch .
URI запроса имеет следующий формат:
PATCH /v2/images/{image_id}
Тело запроса имеет следующий вид:
[{"op":"add","path":"/hw_vif_multiqueue_enabled","value": true}]
Создайте ECS из приватного образа
Используйте зарегистрированный частный образ для создания ECS. Для получения подробностей смотрите Elastic Cloud Server Руководство пользователя. Обратите внимание на следующее при установке параметров:
- Регион : Выберите регион, где находится частный образ.
- Образ : Выберите Частный образ а затем нужный образ из раскрывающегося списка.
Включить NIC Multi-Queue на ECS
KVM ECSs, работающие под Windows, используют частные образы для поддержки NIC multi-queue.
Для Linux ECSs, которые в качестве примера работают под CentOS 7.4, выполните следующие операции для включения NIC multi-queue:
- Включить NIC multi-queue.
- Войдите в ECS.
- Выполните следующую команду, чтобы получить количество очередей, поддерживаемых NIC, и количество очередей с включённым NIC multi-queue:
ethtool -l NIC
- Выполните следующую команду для настройки количества очередей, используемых NIC:
ethtool -L NIC комбинированный Количество очередей
Пример:
[root@localhost ~]# ethtool -l eth0 #View the number of queues used by NIC eth0.Channel parameters for eth0:Pre-set maximums:RX: 0TX: 0Other: 0Combined: 4 #Indicates that a maximum of four queues can be enabled for the NIC.Current hardware settings:RX: 0TX: 0Other: 0Combined: 1 #Indicates that one queue has been enabled.[root@localhost ~]# ethtool -L eth0 combined 4 #Enable four queues on NIC eth0. - (Optional) Включите irqbalance, чтобы система автоматически распределяла прерывания NIC на несколько vCPUs.
- Выполните следующую команду для включения irqbalance:
service irqbalance start
- Выполните следующую команду для просмотра статуса irqbalance:
service irqbalance status
Если Активный значение в выводе команды содержит active (running) , irqbalance был включен.
Рисунок 1 Включен irqbalance
- Выполните следующую команду для включения irqbalance:
- (Опционально) Включить привязку прерываний.
Включение irqbalance позволяет системе автоматически распределять прерывания NIC, улучшая производительность сети. Если улучшенная производительность сети не соответствует вашим ожиданиям, вручную настройте привязку прерываний на целевом ECS.
Подробные операции следующие:
Запустите следующий скрипт, чтобы каждый ECS vCPU обрабатывает запросы прерываний, инициализированные одной очередью. То есть одна очередь соответствует одному прерыванию, и одно прерывание привязывается к одному vCPU.
#!/bin/bashservice irqbalance stopeth_dirs=$(ls -d /sys/class/net/eth*)if [ $? -ne 0 ];thenecho "Failed to find eth* , sleep 30" >> $ecs_network_logsleep 30eth_dirs=$(ls -d /sys/class/net/eth*)fifor eth in $eth_dirsdocur_eth=$(basename $eth)cpu_count=`cat /proc/cpuinfo| grep "processor"| wc -l`virtio_name=$(ls -l /sys/class/net/"$cur_eth"/device/driver/ | grep pci |awk {'print $9'})affinity_cpu=0virtio_input="$virtio_name""-input"irqs_in=$(grep "$virtio_input" /proc/interrupts | awk -F ":" '{print $1}')for irq in ${irqs_in[*]}doecho $((affinity_cpu%cpu_count)) > /proc/irq/"$irq"/smp_affinity_listaffinity_cpu=$[affinity_cpu+2]doneaffinity_cpu=1virtio_output="$virtio_name""-output"irqs_out=$(grep "$virtio_output" /proc/interrupts | awk -F ":" '{print $1}')for irq in ${irqs_out[*]}doecho $((affinity_cpu%cpu_count)) > /proc/irq/"$irq"/smp_affinity_listaffinity_cpu=$[affinity_cpu+2]donedone - (Опционально) Включить XPS и RPS.
XPS позволяет системе с включенной многоканальной очередью NIC выбирать очередь по vCPU при отправке пакета данных.
#!/bin/bash# enable XPS featurecpu_count=$(grep -c processor /proc/cpuinfo)dec2hex(){echo $(printf "%x" $1)}eth_dirs=$(ls -d /sys/class/net/eth*)if [ $? -ne 0 ];thenecho "Failed to find eth* , sleep 30" >> $ecs_network_logsleep 30eth_dirs=$(ls -d /sys/class/net/eth*)fifor eth in $eth_dirsdocpu_id=1cur_eth=$(basename $eth)cur_q_num=$(ethtool -l $cur_eth | grep -iA5 current | grep -i combined | awk {'print $2'})for((i=0;i<cur_q_num;i++))doif [ $i -eq $ cpu_count ];thencpu_id=1fixps_file="/sys/class/net/${cur_eth}/queues/tx-$i/xps_cpus"rps_file="/sys/class/net/${cur_eth}/queues/rx-$i/rps_cpus"cpuset=$(dec2hex "$cpu_id")echo $cpuset > $xps_fileecho $cpuset > $rps_filelet cpu_id=cpu_id*2donedone
- Сценарии
- ECS, поддерживающие NIC Multi-Queue
- Инструкции по эксплуатации
- Зарегистрировать внешний файл образа как частный образ
- Включить NIC Multi-Queue для образа
- Создать ECS из частного образа
- Включить NIC Multi-Queue на ECS