예: KVM의 vMX 인스턴스에서 SR-IOV 구현
KVM상의 vMX는 SR-IOV(Single-Root I/O Virtualization) 인터페이스 유형을 지원합니다. SR-IOV(단일 루트 I/O 가상화)를 통해 물리적 기능이 여러 개의 개별 vNIC으로 표시되도록 합니다. SR-IOV를 사용하면 네트워크 어댑터와 같은 디바이스가 다양한 하드웨어 기능 간에 리소스에 별도의 액세스 권한을 가질 수 있습니다. SR-IOV를 지원하는 물리적 NIC가 있는 경우, SR-IOV 지원 vNIC 또는 VF(가상 기능)를 vMX 인스턴스에 연결하여 성능을 개선할 수 있습니다.
시스템 요구 사항:
Junos OS 릴리스 18.4 이상.
VMX에서 KVM용 SR-IOV를 사용하려면 다음 Intel NIC 드라이버 중 하나가 필요합니다.
10G 포트 및 ixgbe 드라이버를 사용하는 Intel X520 또는 X540
10G 포트 및 i40e 드라이버를 사용하는 Intel X710 또는 XL710
Junos OS 릴리스 19.1R1-S1 및 Junos OS 릴리스 19.2R1에서 시작하여 Intel XL710-QDA2 NIC를 사용하는 40G 포트에 대한 지원은 VMX 인스턴스에서 사용할 수 있습니다. 40G 포트를 사용할 때 vMX는 포트 속도를 자동 감지하고 2개의 I/O vCPU를 할당합니다.
VMX 인스턴스에서 SR-IOV를 사용하려면 다음 작업을 완료해야 합니다.
시스템(/sys/) 모드에서 SR-IOV를 사용하도록 NIC를 준비합니다.
Intel에서 드라이버를 설치하려면 드라이버를 컴파일하고 기존 드라이버를 제거한 다음 새로운 컴파일된 드라이버를 설치해야 합니다.
참고:vMX 설치 관리자가 수정된 intel-driver도 제공합니다. 인텔의 기본 드라이버를 사용하거나 vMX 수정 드라이버를 사용할 수 있습니다.
vmx.conf 파일 준비
Junos CLI를 사용하여 네이티브 드라이버 구성
SR-IOV를 활성화하기 위한 BIOS 요구 사항- 시스템의 BIOS 설정에서 Intel VT-d 또는 AMD IOMMU가 활성화되는지 확인합니다.
NIC에 대한 PCI-주소 및 커널 이름을 식별하는 절차
Intel에서 최신 드라이버 소프트웨어 다운로드 및 설치
Intel에서 최신 드라이버 소프트웨어를 다운로드하고 Ubuntu에서 제공하는 기존 드라이버 소프트웨어를 교체할 수 있습니다.
이 예에서는 INTEL® 네트워크 어댑터 드라이버 for PCIe* Intel® 10 Gigabit Ethernet Network Connections Under Linux 에서 소프트웨어를 다운로드하여 원하는 디렉토리에 저장한 다음 README 지침을 따릅니다.
인텔에서 드라이버 소프트웨어를 설치하려면 다음을 수행합니다.
시스템 모드에서 SR-IOV를 사용하도록 NIC 준비
호스트는 값을 설정 sriov_numvfs 하여 각 전용 NIC에 대해 통보해야 하며, 해당 NIC에서 SR-IOV를 사용하는 VF의 수입니다. vmx.sh 스크립트에는 공유 NIC를 사용하는 VF 수에 대한 정보가 없습니다. 이 때문에 그에 따라 구성 sriov_numvfs 해야 합니다.
이 값은 재부팅 후에 영구적이도록 부트 옵션으로 설정될 수 있으며 재부팅 후에는 지속되지 않는 실시간 변경을 할 수 있습니다.
이 예제에서 제공된 절차는 /sys를 사용하여 구성 sriov_numvfs 하기 위한 임시 솔루션입니다. 모든 설정은 /sys/class/net/interface-namedevicesriov_numvfs/에 대한 설정이 비 영구이므로 재부팅 시에도 구성이 지속되지 않습니다.
NIC가 SR-IOV를 사용하도록 준비하려면 다음 단계를 완료하십시오.
# echo num_of_vf > /sys/class/net/interface-name/device/sriov_numvfs
아래 명령어에서 4개의 VNF가 SR-IOV에 공유 NIC ens8f1을 사용할 수 있도록 지원합니다. sudo를 사용하거나 루트 사용자로 로그인해야 합니다.
As sudo user:
root@ubuntu2:~# echo 4 | sudo tee -a /sys/class/net/ens8f1/device/sriov_numvfs
As root user
root@ubuntu2:~# echo 4 > /sys/class/net/ens8f1/device/sriov_numvfs
이 sriov_numvfs
옵션은 SR-IOV가 지원하는 최대 VF 개수인 값 0-n만 허용합니다.
부팅 시 SR-IOV 설정
다음 절차는 구성이 호스트의 재부팅을 지속하는 SR-IOV 구성을 위한 몇 가지 대체 방법을 제공합니다.
호스트 부팅 프로세스 중에 값을 설정하는 데 사용할 수 있는 옵션은 다음과 같습니다.
rc.local 사용
모드프로비 옵션 설정
그럽을 사용한 커널-파라마이커 설정
아래 예제에서는 그루브 커널 명령을 사용하여 값을 구성하는 sriov_numvfs 방법을 보여줍니다.
거대한 페이지에 대한 자세한 내용은 vMX를 설치하기 위한 Ubuntu 호스트 준비(Preparing the Ubuntu Host to Install to Installing)를 참조하십시오.
파일 "/etc/default/grub"을 편집합니다.
lab@ubuntu2:~$ cat /etc/default/grub | grep -i cmd
GRUB_CMDLINE_LINUX_DEFAULT="intel_iommu=on"
GRUB_CMDLINE_LINUX="isolcpus=34-41,48-55 default_hugepagesz=1G
hugepagesz=1G hugepages=120 ixgbe.max_vfs=8"
편집 후 다음을 업데이트합니다.
sudo update-grub
새 부트 로더를 작성하여 다음 재부팅 시 변경을 활성화합니다.
sudo grub-install /dev/sda
호스트를 재부팅하여 설정을 활성화합니다.
sudo reboot
sriov_numvfs 설정 검증
목적
CLI를 사용하여 구성을 sriov_numvfs 확인합니다. 이 예에서 SR-IOV와 함께 사용하는 데 필요한 NIC는 PCI-address 85:00.0에서 ens8f1입니다. 출력의 "가상 기능"에 유의하십시오.
작업
lab@ubuntu2:~$ lspci | grep 85
85:00.0 Ethernet controller: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection (rev 01) 85:00.1 Ethernet controller: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection (rev 01) 85:10.0 Ethernet controller: Intel Corporation 82599 Ethernet Controller Virtual Function (rev 01) 85:10.1 Ethernet controller: Intel Corporation 82599 Ethernet Controller Virtual Function (rev 01) 85:10.2 Ethernet controller: Intel Corporation 82599 Ethernet Controller Virtual Function (rev 01) 85:10.3 Ethernet controller: Intel Corporation 82599 Ethernet Controller Virtual Function (rev 01) 85:10.4 Ethernet controller: Intel Corporation 82599 Ethernet Controller Virtual Function (rev 01) 85:10.5 Ethernet controller: Intel Corporation 82599 Ethernet Controller Virtual Function (rev 01) 85:10.6 Ethernet controller: Intel Corporation 82599 Ethernet Controller Virtual Function (rev 01) 85:10.7 Ethernet controller: Intel Corporation 82599 Ethernet Controller Virtual Function (rev 01) 85:11.0 Ethernet controller: Intel Corporation 82599 Ethernet Controller Virtual Function (rev 01) 85:11.1 Ethernet controller: Intel Corporation 82599 Ethernet Controller Virtual Function (rev 01) 85:11.2 Ethernet controller: Intel Corporation 82599 Ethernet Controller Virtual Function (rev 01) 85:11.3 Ethernet controller: Intel Corporation 82599 Ethernet Controller Virtual Function (rev 01) 85:11.4 Ethernet controller: Intel Corporation 82599 Ethernet Controller Virtual Function (rev 01) 85:11.5 Ethernet controller: Intel Corporation 82599 Ethernet Controller Virtual Function (rev 01) 85:11.6 Ethernet controller: Intel Corporation 82599 Ethernet Controller Virtual Function (rev 01) 85:11.7 Ethernet controller: Intel Corporation 82599 Ethernet Controller Virtual Function (rev 01)
또한 sriov_numvfs /sys/class/net/ens8f1/device/sriov_numvfs
원하는 값을 포함합니다.
lab@ubuntu2:~$ cat /sys/class/net/ens8f1/device/sriov_numvfs
8
테스트를 위해 에 직접 기록 /sys/class/net/interface-name/device/sriov_numvfs
하여 sriov_numvfs 빠르게 변경할 수 있습니다.
sriov_numvfs 수 변경
SR-IOV와 함께 주어진 NIC를 사용하는 첫 번째 vMX 인스턴스를 구축한 후에는 VF의 수를 변경할 수 없으므로(예: 부트 시간에 grub 명령어를 사용함으로써) 사전에 sriov_numvfs 만들 것을 권장합니다. VF 번호를 변경해야 하는 경우 실행 중인 vMX를 중단해야 합니다. sriov_numvfs 옵션을 더 높은 가치로 설정하여 나중에 sriov_numvfs 수를 변경하지 않는 것이 좋습니다.
이미 구성된 VF 값을 변경하려면 먼저 값을 0으로 변경한 다음 필요한 정수 값으로 변경해야 합니다.
할당된 VF가 없는 경우, VF 수를 유효한 값으로 변경할 수 있습니다(0 - n, 여기서 n은 SR-IOV에 의해 지원되는 최대 VF 개수입니다).
VF 수를 수정하려면 다음 단계를 수행해야 합니다.
공유 SR-IOV NIC를 사용하여 VNF의 작동을 중단하십시오.
VF(Virtual Functor)의 수를 0으로 설정하여 SR-IOV 네트워크 어댑터를 비활성화합니다.
As root:
root@ubuntu2:~# echo 0 > /sys/class/net/ens8f1/device/sriov_numvfs
As sudo:
lab@ubuntu2:~$ echo 0 | sudo tee -a /sys/class/net/ens8f1/device/sriov_numvfs
필요한 VF 개수 변경(이 예에서 6개를 사용하고 있는 경우)
root@ubuntu2:~# echo 6 > /sys/class/net/ens8f1/device/sriov_numvfs
참고:다음 오류 메시지가 보이면 3단계를 수행하기 전에 먼저 2단계에서 설명한 대로 값을 0으로 설정합니다.
root@ubuntu2:~# echo 6 > /sys/class/net/ens8f1/device/sriov_numvfs bash: echo: write error: Device or resource busy
다음 명령을 사용하여 구성을 확인합니다.
root@ubuntu2:~# cat /sys/class/net/ens8f1/device/sriov_numvfs
vMX를 다시 시작하기 전에 SR-IOV 사용을 위해 vmx.conf 파일을 채택하십시오.
VMX 구성 파일 업데이트(vmx.conf) 매개 변수
vMX 구성에 필요한 매개 변수는 시작 구성 파일에서 정의됩니다. 구성 파일은 YAML 형식입니다. 기본 파일은 config/vmx.conf입니다. 여러 인스턴스에 대한 구성 파일을 다른 이름으로 저장할 수 있습니다.
SR-IOV 디바이스 유형에 대한 인터페이스를 구성하려면 인터페이스, NIC 및 MAC 주소를 지정해야 합니다. 표 1 은 vmx.conf 파일을 변경하는 데 사용하는 구성 매개변수의 세부 정보를 제공합니다.
구성 요소 |
VM 매개 변수 |
설명 |
---|---|---|
vPFE |
|
SR-IOV를 사용하는 모든 인터페이스에 사용하거나 SR-IOV 및 비SR-IOV 기반 인터페이스의 혼합을 지원하는 데 사용합니다 |
|
|
|
인터페이스 |
|
유형이 로 설정 |
|
10GE NIC로 |
|
|
사용할 인터페이스의 커널 이름입니다. |
|
|
이 NIC를 |
|
|
공유 NIC를 사용하는 각 VF 인스턴스가 고유하거나 다른 MAC 주소를 사용하는지 확인합니다. |
샘플 vmx.conf 파일:
lab@ubuntu2:~/vmx/config$ cat vmx.conf.sriov
############################################################## # # vmx.conf # Config file for vmx on the hypervisor. # Uses YAML syntax. # Leave a space after ":" to specify the parameter value. # ############################################################## --- #Configuration on the host side - management interface, VM images etc. HOST: identifier : vmx1 # Maximum 6 characters host-management-interface : ens4f0 routing-engine-image : "/home/lab/vmx/images/junos-vmx-x86-64-18.1R3-S2.5.qcow2" routing-engine-hdd : "/home/lab/vmx/images/vmxhdd.img" forwarding-engine-image : "/home/lab/vmx/images/vFPC-20181023.img" --- #External bridge configuration BRIDGES: - type : external name : br-ext # Max 10 characters --- #vRE VM parameters CONTROL_PLANE: vcpus : 1 memory-mb : 1024 console_port: 8601 interfaces : - type : static ipaddr : 10.102.144.94 macaddr : "0A:00:DD:C0:DE:0E" --- #vPFE VM parameters FORWARDING_PLANE: memory-mb : 8192 vcpus : 4 console_port: 8602 device-type : mixed <<<< sriov or mixed use_native_drivers : true <<<< use drivers as provided by the host interfaces : - type : static ipaddr : 10.102.144.98 macaddr : "0A:00:DD:C0:DE:10" --- #Interfaces JUNOS_DEVICES: - interface : ge-0/0/0 type : virtio <<< required mac-address : "02:06:0A:0E:FF:F0" description : "ge-0/0/0 interface" - interface : ge-0/0/1 type : sriov <<< required mtu : 9192 <<< required port-speed-mbps : 10000 <<< required nic : ens8f1 <<< required virtual-function : 0 <<< use consecutive / unique numbers for each vMX instance mac-address : "02:06:0A:0E:FF:F1" <<< make sure that each vNF is using a DIFFERENT MAC-address description : "ge-0/0/1 interface"
vmx 설치 시작
lab@ubuntu2:~/vmx$ sudo ./vmx.sh --install --cfg ./config/vmx.conf.sriov
Intel ixgbe 드라이버 사용 시 필요한 변경 사항
기존 구축을 수정된 IXGBE 드라이버에서 수정되지 않은 IXGBE 드라이버로 이동하려고 할 때 Junos CLI에서 Edit 모드를 입력하고 "기본" 드라이버를 사용할 때 다음 명령을 사용합니다.
user@host# set interfaces vlan-offload
자세한 내용은 수정된 IXGBE 드라이버 및 수정되지 않은 IXGBE 드라이버에서 확인하십시오.