Juniper NFX250 — установка VyOS, тест производительности (Часть 2)

Автор: | 05.03.2021

В первой части я делал общий обзор функционала и принципов работы NFX250, а так же проводил тест производительности JCP.
Теперь настало время использовать NFX по назначению и запустить виртуальный роутер.
Из доступных open source проектов, которые можно использовать в качестве роутера, я выбрал VyOS. Так же можно попробовать FRR.

Enhanced-orchestration и hugepages

В тесте используется архитектура V2 и версия софта 18.4R3.
Для развертывания виртуалок из JDM нужно включить функционал enhanced-orchestration и hugepages.
При этом придется удалить все интерфейсы и перезагрузить JDM. Понадобится доступ через консоль.
На моем тестовом NFX250 всего 16Gb памяти. Для корректной работы JCP, JDM и гипервизора необходимо 6-8 Gb памяти. Значит, можем выделить 8Gb на пользовательские виртуалки.

{master:0}[edit]
root@jdm# set system services enhanced-orchestration 
root@jdm# set system memory hugepages page-size 1024 page-count 8 
## Warning: bridges stanza not allowed if system services enhanced-orchestration is configured
## Warning: interface stanza not allowed if system services enhanced-orchestration is configured
## Warning: route stanza not allowed if system services enhanced-orchestration is configured
root@jdm# delete interface eth0br 
root@jdm# delete route  
root@jdm# delete interface jmgmt0 
root@jdm# delete apply-groups 1604-config 
root@jdm# delete groups 1604-config 
{master:0}[edit]
root@jdm# commit and-quit
commit complete
root@jdm> request system reboot 
Reboot the system ? [yes,no] (no) yes 

System reboot operation started, please wait...

После перезагрузки настраиваю заново менеджмент:

{master:0}[edit]
root@jdm# set interfaces jmgmt0 unit 0 family inet dhcp 
root@jdm# commit 
commit complete

Установка VyOS

После включения enhanced-orchestration становится доступен функционал настройки VNF из JDM. Фактически это просто создание XML из Junos оболочки.
VyOS версии Rolling доступен для свободного скачивания на официальном сайте.

{master:0}
root@jdm> start shell 
jdm:~#cd /var/third-party
jdm:/var/third-party# wget https://downloads.vyos.io/rolling/current/amd64/vyos-rolling-latest.iso

Создаю HDD диск для установки VyOS:

jdm:/var/third-party# qemu-img create -f qcow2 vyos.qcow2 2G
Formatting 'vyos.qcow2', fmt=qcow2 size=2147483648 encryption=off cluster_size=65536 lazy_refcounts=off 

Конфиг для VyOS VNF:

[edit]
  virtual-network-functions vyos {
      image {
          /var/third-party/vyos.qcow2;
          image-type qcow2;
          bus-type virtio;
      }
      virtual-cpu {
          count 6;
          features {
              hardware-virtualization;
          }
      }
      no-default-interfaces;
      interfaces eth0 {
          management internal;
      }
     memory {
        size 4096000;
        features {
            hugepages {
                page-size 1024;
            }
        }
    }
      storage sdb {
          type {
              cdrom {
                  source {
                      file /var/third-party/images/vyos-rolling-latest.iso;
                  }
              }
          }
      }
  }

В Junos 18.4R3.3 я не нашел функционала для установки cd-rom в качестве загрузочного диска. Добавляю строчку с опцией загрузки с cd-rom с помощью virsh:

jdm:~#virsh edit vyos 
 <os>
    <type arch='x86_64' machine='pc-i440fx-1.7'>hvm</type>
+    <boot dev='cdrom'/>
    <boot dev='hd'/>
    <smbios mode='sysinfo'/>
  </os>

Перезапускаю виртуалку, что бы загрузиться с iso образа.

jdm:~# virsh destroy vyos        
Domain vyos destroyed

jdm:~# virsh start vyos  
Domain vyos started

Теперь подключаюсь virsh консолью и устанавливаю VyOS. После установки нужно выключить виртуалку для редактирования опций загрузки:

jdm:~# virsh console vyos

#boot sequence omitted

vyos login: vyos
Password: 
Linux vyos 5.10.14-amd64-vyos #1 SMP Tue Feb 16 09:38:59 UTC 2021 x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
vyos@vyos:~$ install image
Welcome to the VyOS install program.  This script
will walk you through the process of installing the
VyOS image to a local hard drive.
Would you like to continue? (Yes/No) [Yes]: 
Probing drives: OK
Looking for pre-existing RAID groups...none found.
The VyOS image will require a minimum 2000MB root.
Would you like me to try to partition a drive automatically
or would you rather partition it manually with parted?  If
you have already setup your partitions, you may skip this step

Partition (Auto/Parted/Skip) [Auto]: 

I found the following drives on your system:
 vda    2147MB

Install the image on? [vda]:

This will destroy all data on /dev/vda.
Continue? (Yes/No) [No]: yes

How big of a root partition should I create? (2000MB - 2147MB) [2147]MB: 

Creating filesystem on /dev/vda1: OK
Done!
Mounting /dev/vda1...
What would you like to name this image? [1.4-rolling-202102162107]: 
OK.  This image will be named: 1.4-rolling-202102162107
Copying squashfs image...
Copying kernel and initrd images...
Done!
I found the following configuration files:
    /opt/vyatta/etc/config/config.boot
    /opt/vyatta/etc/config.boot.default
Which one should I copy to vda? [/opt/vyatta/etc/config/config.boot]: 

Copying /opt/vyatta/etc/config/config.boot to vda.
Enter password for administrator account
Enter password for user 'vyos':
Retype password for user 'vyos':
I need to install the GRUB boot loader.
I found the following drives on your system:
 vda    2147MB

Which drive should GRUB modify the boot partition on? [vda]:

Setting up grub: OK
Done!
vyos@vyos:~$ poweroff 
Are you sure you want to poweroff this system? [y/N] y
[  298.141695] systemd-shutdown[1]: Failed to parse (null): No such file or directory
[  298.142995] systemd-shutdown[1]: Failed to deactivate swaps: No such file or directory
[  298.148160] [1960]: Failed to unmount /usr/lib/live/mount/medium: Device or resource busy
[  298.208396] reboot: Power down

error: One or more references were leaked after disconnect from the hypervisor

Возвращаю порядок загрузки в исходное положение и запускаю VyOS:

jdm:~#virsh edit vyos 
 <os>
    <type arch='x86_64' machine='pc-i440fx-1.7'>hvm</type>
-    <boot dev='cdrom'/>
    <boot dev='hd'/>
    <smbios mode='sysinfo'/>
  </os>

jdm:~#virsh start vyos 

На этом установка VyOS завершена, прейдем к настройке и тестированию.

Начальная настройка VyOS

Начну с настройки менеджмента.
При настройке VNF для VyOS был выделен только один интерфейс — management internal. Он отвечает за связность с JDM.
Для корректной работы, на этом интерфейсе нужно включить DHCP клиент.
Так же, добавлю интерфейс для менеджмента, который подключен к бриджу out-of-band управления .

{master:0}
root@jdm> configure
root@jdm# set virtual-network-functions vyos interfaces eth1 management out-of-band 
root@jdm# commit and-quit 
commit complete
root@jdm> request virtual-network-functions console vyos 

Connected to domain vyos
Escape character is ^]

vyos login: vyos
Password: 
Linux vyos 5.10.14-amd64-vyos #1 SMP Tue Feb 16 09:38:59 UTC 2021 x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.

vyos@vyos# set interfaces ethernet eth0 address dhcp
vyos@vyos# set interfaces ethernet eth1 address dhcp
vyos@vyos# set service ssh 
vyos@vyos# commit

Теперь можно использовать JDM для управления VyOS, а так же подключиться по SSH из сети менджмента.

root@jdm> show virtual-network-functions 
ID       Name                                              State      Liveliness
--------------------------------------------------------------------------------
6        vyos                                              Running    alive
1        vjunos0                                           Running    alive
10216    jdm                                               Running    alive

root@jdm> ssh vyos@vyos 
Welcome to VyOS
vyos@vyos's password: 
Linux vyos 5.10.14-amd64-vyos #1 SMP Tue Feb 16 09:38:59 UTC 2021 x86_64
vyos@vyos:~$ 

Виртуалка доступна из сети менеджмента, теперь нужно настроить связь в внешним миром.
На NFX250 это можно сделать двумя способами:
-Virtio (service chaining using vlans)
-SR-IOV ( Service Chaining with SR-IOV (Single Root Input/Output Virtualization)).

Настройка и тестирование VyOS(Virtio)

Начну тестирование с варианта, в котором используются Vitrio интерфейсы.
Virtio самый простой и быстрый вариант для развертывания сервисов. Однако, при этом вся нагрузка ложится на гипервизор и зависит, в основном, от производительности CPU.

Схема лабы для тестирования VyOS и virtio:

Для связи с внешним миром требуется настроить JCP:

{master:0}[edit]
root#set vlans vlan100 vlan-id 100
root#set vlans vlan200 vlan-id 200 
root#set interfaces xe-0/0/12 unit 0 family ethernet-switching interface-mode access 
root#set interfaces xe-0/0/12 unit 0 family ethernet-switching vlan members vlan100      
root#set interfaces xe-0/0/13 unit 0 family ethernet-switching interface-mode access 
root#set interfaces xe-0/0/13 unit 0 family ethernet-switching vlan members vlan200      
root#set interfaces sxe-0/0/0.0 family ethernet-switching interface-mode trunk 
root#set interfaces sxe-0/0/0.0 family ethernet-switching vlan members vlan100  
root#set interfaces sxe-0/0/1.0 family ethernet-switching interface-mode trunk 
root#set interfaces sxe-0/0/1.0 family ethernet-switching vlan members vlan200
root# commit 
commit complete    

Вся конфигурация, которая касается связности виртуальных машин, выполняется в JDM.
Нужно добавить интерфейсы для VyOS и создать вланы на гипервизоре:

{master:0}[edit]
root@jdm#set host-os vlans vlan100 vlan-id 100 
root@jdm#set host-os vlans vlan200 vlan-id 200 
root@jdm#set virtual-network-functions vyos interfaces eth3 mapping vlan mode access
root@jdm#set virtual-network-functions vyos interfaces eth3 mapping vlan members vlan100
root@jdm#set virtual-network-functions vyos interfaces eth4 mapping vlan mode access
root@jdm#set virtual-network-functions vyos interfaces eth4 mapping vlan members vlan200
root@jdm# commit 
commit complete    

Конфиг VyOS:

interfaces {
    ethernet eth0 {
        address dhcp
        description internal Management
        hw-id b0:33:a6:33:f3:cf
    }
    ethernet eth1 {
        address dhcp
        description OOB Management
        hw-id b0:33:a6:33:f3:d0
    }
    ethernet eth2 {
        address 172.16.23.2/30
        description BGP-to-ext-network
        hw-id b0:33:a6:33:f3:d2
    }
    ethernet eth3 {
        address 10.223.0.1/24
        description S2-test-server
        hw-id b0:33:a6:33:f3:d3
    }
}
protocols {
    bgp 65234 {
        address-family {
            ipv4-unicast {
                network 10.223.0.0/24 {
                }
            }
        }
        neighbor 172.16.23.1 {
            address-family {
                ipv4-unicast {
                    route-map {
                        export export
                    }
                }
            }
            remote-as 65230
        }
    }
}

Тест iperf3 на интерфейсах virtio:

[root@s2]# iperf3 -c 10.222.0.2 -p 5201 
Connecting to host 10.222.0.2, port 5201
[  4] local 10.223.0.2 port 58654 connected to 10.222.0.2 port 5201
[ ID] Interval           Transfer     Bandwidth       Retr  Cwnd
[  4]   0.00-1.00   sec   340 MBytes  2.85 Gbits/sec   57    331 KBytes       
#######OMMITED############
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Retr
[  4]   0.00-10.00  sec  3.53 GBytes  3.03 Gbits/sec  918             sender
[  4]   0.00-10.00  sec  3.53 GBytes  3.03 Gbits/sec                  receiver
iperf Done.

[root@s2]# iperf3 -c 10.222.0.2 -p 5201 -R
Connecting to host 10.222.0.2, port 5201
Reverse mode, remote host 10.222.0.2 is sending
[  4] local 10.223.0.2 port 58662 connected to 10.222.0.2port 5201
[ ID] Interval           Transfer     Bandwidth
[  4]   0.00-1.00   sec   330 MBytes  2.77 Gbits/sec                  
#######OMMITED############               
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Retr
[  4]   0.00-10.00  sec  2.98 GBytes  2.56 Gbits/sec  637             sender
[  4]   0.00-10.00  sec  2.98 GBytes  2.56 Gbits/sec                  receiver

Результат на Virtio:
2.56Gbit/3.03Gbit
Неплохо.
Попробуем тоже самое с SR-IOV.

Настройка и тестирование VyOS(SR-IOV)

С помощью SR-IOV предоставляется общий доступ к ресурсам PCI-Experss. Физический интерфейс делится на определенное количество VF (Virtual Functions), каждый из которых можно подключить к виртуальной машине. В зависимости от модели оборудования, доступно разное количество VF.
SR-IOV меньше нагружает CPU и обеспечивает меньшее время отклика.

Схема лабы для тестирования VyOS и SR-IOV:


Меняю конфигурацию портов виртуальной машины на SR-IOV:

root@jdm#delete virtual-network-functions vyos interfaces eth3 mapping vlan
root@jdm#delete virtual-network-functions vyos interfaces eth4 mapping vlan
root@jdm#set virtual-network-functions vyos interfaces eth3 mapping hsxe0 virtual-function vlan-id 100 
root@jdm#set virtual-network-functions vyos interfaces eth4 mapping hsxe1 virtual-function vlan-id 200 
root@jdm# commit 
commit complete 

Тест iperf3 на интерфейсах SR-IOV.

[root@s2]# iperf3 -c 10.222.0.2 -p 5201 -R
Connecting to host 10.222.0.2, port 5201
Reverse mode, remote host 10.222.0.2 is sending
[  4] local 10.223.0.2 port 58626 connected to 10.222.0.2 port 5201
[ ID] Interval           Transfer     Bandwidth
[  4]   0.00-1.00   sec   458 MBytes  3.84 Gbits/sec                  
#######OMMITED############
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Retr
[  4]   0.00-10.00  sec  4.53 GBytes  3.89 Gbits/sec  312             sender
[  4]   0.00-10.00  sec  4.53 GBytes  3.89 Gbits/sec                  receiver
iperf Done.

[root@s2]# iperf3 -c 10.222.0.2 -p 5201 
Connecting to host 10.222.0.2, port 5201
[  4] local 10.223.0.2 port 58630 connected to 10.222.0.2 port 5201
[ ID] Interval           Transfer     Bandwidth       Retr  Cwnd
[  4]   0.00-1.00   sec   513 MBytes  4.30 Gbits/sec   54    645 KBytes       
#######OMMITED############
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Retr
[  4]   0.00-10.00  sec  5.08 GBytes  4.37 Gbits/sec  186             sender
[  4]   0.00-10.00  sec  5.08 GBytes  4.37 Gbits/sec                  receiver
iperf Done.

Результат на SR-IOV:
3.89Gbit/4.37Gbit
Значительно лучше.

Напомню, что тест проводится на NFX250-ATT-LS1, который является самой младшей моделью в линейке NFX250.
По результатам теста можно сказать, что Juniper выпустил интересный продукт, на базе которого можно быстро развернуть практически любой сервис. На базе старших моделей можно ожидать значительный прирост производительности.

Подписаться
Уведомить о

0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии