12.2. RT-KVM을 사용하여 OVS-DPDK 구성
12.2.1. 실시간 컴퓨팅을 위한 노드 지정
실시간 컴퓨팅에 대한 노드를 지정하려면 새 역할 파일을 생성하여 Real-time Compute 역할을 구성하고 Real-time Compute 리소스 클래스로 베어 메탈 노드를 구성하여 컴퓨팅 노드를 실시간으로 태그합니다.
다음 절차는 아직 프로비저닝하지 않은 새 오버클라우드 노드에 적용됩니다. 이미 프로비저닝된 기존 오버클라우드 노드에 리소스 클래스를 할당하려면 오버클라우드를 축소하여 노드를 프로비저닝 해제한 다음 오버클라우드를 확장하여 새 리소스 클래스 할당으로 노드를 다시 프로비저닝합니다. 자세한 내용은 director를 사용하여 Red Hat OpenStack Platform 설치 및 관리에서 오버클라우드 노드 스케일링을 참조하십시오.
프로세스
-
언더클라우드 호스트에
stack
사용자로 로그인합니다. stackrc
언더클라우드 인증 정보 파일을 소싱합니다.[stack@director ~]$ source ~/stackrc
-
/usr/share/openstack-tripleo-heat-templates/environments/compute-real-time-example.yaml
파일을 기반으로ComputeRealTime
역할의 매개변수를 설정하는compute-real-time.yaml
환경 파일을 만듭니다. ComputeRealTime
역할을 포함하는roles_data_rt.yaml
이라는 새 역할 데이터 파일과 오버클라우드에 필요한 다른 역할 데이터 파일을 생성합니다. 다음 예제에서는 역할Controller
, Compute ,
을 포함하는 역할 데이터 파일Compute
RealTimeroles_data_rt.yaml
을 생성합니다.(undercloud)$ openstack overcloud roles generate \ -o /home/stack/templates/roles_data_rt.yaml \ ComputeRealTime Compute Controller
ComputeRealTime 역할의 roles_data_rt.yaml 파일을 업데이트합니다.
################################################### # Role: ComputeRealTime # ################################################### - name: ComputeRealTime description: | Real Time Compute Node role CountDefault: 1 # Create external Neutron bridge tags: - compute - external_bridge networks: InternalApi: subnet: internal_api_subnet Tenant: subnet: tenant_subnet Storage: subnet: storage_subnet HostnameFormatDefault: '%stackname%-computert-%index%' deprecated_nic_config_name: compute-rt.yaml
노드 정의 템플릿에
node.json
또는node.yaml
.yaml에 추가하여 오버클라우드의 ComputeRealTime 노드를 등록합니다.자세한 내용은 director 를 사용하여 Red Hat OpenStack Platform 설치 및 관리의 오버클라우드 노드 등록을 참조하십시오.
노드 하드웨어를 검사합니다.
(undercloud)$ openstack overcloud node introspect --all-manageable --provide
자세한 내용은 director 를 사용하여 Red Hat OpenStack Platform 설치 및 관리에서 베어 메탈 노드 하드웨어 인벤토리 생성 을 참조하십시오.
ComputeRealTime에 지정할 각 베어 메탈 노드에 사용자 지정 ComputeRealTime 리소스 클래스를 태그합니다.
(undercloud)$ openstack baremetal node set \ --resource-class baremetal.RTCOMPUTE <node>
<node>를 베어 메탈 노드의 이름 또는 UUID로 바꿉니다.
노드 정의 파일
overcloud-baremetal-deploy.yaml
에 ComputeRealTime 역할을 추가하고 노드에 할당할 예측 노드 배치, 리소스 클래스, 네트워크 토폴로지 또는 기타 속성을 정의합니다.- name: Controller count: 3 ... - name: Compute count: 3 ... - name: ComputeRealTime count: 1 defaults: resource_class: baremetal.RTCOMPUTE network_config: template: /home/stack/templates/nic-config/<role_topology_file>
<
role_topology_file
>을ComputeRealTime
역할에 사용할 토폴로지 파일의 이름으로 바꿉니다(예:myRoleTopology.j2
). 기존 네트워크 토폴로지를 재사용하거나 역할에 대한 새 사용자 지정 네트워크 인터페이스 템플릿을 생성할 수 있습니다.자세한 내용은 director를 사용하여 Red Hat OpenStack Platform 설치 및 관리에서 사용자 정의 네트워크 인터페이스 템플릿 정의를 참조하십시오. 기본 네트워크 정의 설정을 사용하려면 역할 정의에
network_config
를 포함하지 마십시오.노드 정의 파일에서 노드 속성을 구성하는 데 사용할 수 있는 속성에 대한 자세한 내용은 director를 사용하여 Red Hat OpenStack Platform 설치 및 관리에서 베어 메탈 노드 프로비저닝 속성을 참조하십시오.
노드 정의 파일의 예는 director를 사용하여 Red Hat OpenStack Platform 설치 및 관리의 예제 노드 정의 파일을 참조하십시오.
다음 Ansible 플레이북을 생성하여 노드 프로비저닝 중에 커널을 구성하고 플레이북을
/home/stack/templates/fix_rt_kernel.yaml
로 저장합니다.# RealTime KVM fix until BZ #2122949 is closed- - name: Fix RT Kernel hosts: allovercloud any_errors_fatal: true gather_facts: false vars: reboot_wait_timeout: 900 pre_tasks: - name: Wait for provisioned nodes to boot wait_for_connection: timeout: 600 delay: 10 tasks: - name: Fix bootloader entry become: true shell: |- set -eux new_entry=$(grep saved_entry= /boot/grub2/grubenv | sed -e s/saved_entry=//) source /etc/default/grub sed -i "s/options.*/options root=$GRUB_DEVICE ro $GRUB_CMDLINE_LINUX $GRUB_CMDLINE_LINUX_DEFAULT/" /boot/loader/entries/$(</etc/machine-id)$new_entry.conf cp -f /boot/grub2/grubenv /boot/efi/EFI/redhat/grubenv post_tasks: - name: Configure reboot after new kernel become: true reboot: reboot_timeout: "{{ reboot_wait_timeout }}" when: reboot_wait_timeout is defined
노드 프로비저닝 파일의
ComputeOvsDpdkSriovRT
역할 정의에/home/stack/templates/fix_rt_kernel.yaml
을 플레이북으로 포함합니다.- name: ComputeOvsDpdkSriovRT ... ansible_playbooks: - playbook: /usr/share/ansible/tripleo-playbooks/cli-overcloud-node-kernelargs.yaml extra_vars: kernel_args: "default_hugepagesz=1GB hugepagesz=1G hugepages=64 iommu=pt intel_iommu=on tsx=off isolcpus=2-19,22-39" reboot_wait_timeout: 900 tuned_profile: "cpu-partitioning" tuned_isolated_cores: "2-19,22-39" defer_reboot: true - playbook: /home/stack/templates/fix_rt_kernel.yaml extra_vars: reboot_wait_timeout: 1800
노드 정의 파일에서 노드 속성을 구성하는 데 사용할 수 있는 속성에 대한 자세한 내용은 director를 사용하여 Red Hat OpenStack Platform 설치 및 관리에서 베어 메탈 노드 프로비저닝 속성을 참조하십시오.
노드 정의 파일의 예는 director를 사용하여 Red Hat OpenStack Platform 설치 및 관리의 예제 노드 정의 파일을 참조하십시오.
역할의 새 노드를 프로비저닝합니다.
(undercloud)$ openstack overcloud node provision \ [--stack <stack> \ ] [--network-config \] --output <deployment_file> \ /home/stack/templates/overcloud-baremetal-deploy.yaml
-
선택 사항:
<stack
>을 베어 메탈 노드가 프로비저닝되는 스택의 이름으로 바꿉니다. 기본값은overcloud
입니다. -
선택 사항:
--network-config
선택적 인수를 포함하여 네트워크 정의를cli-overcloud-node-network-config.yaml
Ansible 플레이북에 제공합니다.network_config
속성을 사용하여 네트워크 정의를 정의하지 않으면 기본 네트워크 정의가 사용됩니다. -
<
deployment_file
>을 배포 명령에 포함할 heat 환경 파일의 이름으로 교체합니다(예:/home/stack/templates/overcloud-baremetal-deployed.yaml
).
-
선택 사항:
별도의 터미널에서 프로비저닝 진행 상황을 모니터링합니다. 프로비저닝이 성공하면 노드 상태가
available
에서active
로 변경됩니다.(undercloud)$ watch openstack baremetal node list
--network-config
옵션 없이 provisioning 명령을 실행한 경우 NIC 템플릿 파일을 가리키도록network-environment.yaml
파일에서 <Role>NetworkConfigTemplate
매개변수를 구성합니다.parameter_defaults: ComputeNetworkConfigTemplate: /home/stack/templates/nic-configs/compute.j2 ComputeAMDSEVNetworkConfigTemplate: /home/stack/templates/nic-configs/<rt_compute>.j2 ControllerNetworkConfigTemplate: /home/stack/templates/nic-configs/controller.j2
<
rt_compute
>를ComputeRealTime
역할의 네트워크 토폴로지가 포함된 파일의 이름으로 바꿉니다(예: 기본 네트워크 토폴로지를 사용하려면computert.yaml
).다른 환경 파일과 함께 스택에 환경 파일을 추가하고 오버클라우드를 배포합니다.
(undercloud)$ openstack overcloud deploy --templates \ -r /home/stack/templates/roles_data_rt.yaml \ -e /home/stack/templates/overcloud-baremetal-deployed.yaml -e /home/stack/templates/node-info.yaml \ -e [your environment files] \ -e /home/stack/templates/compute-real-time.yaml
12.2.2. OVS-DPDK 매개변수 구성
parameter_defaults
에서 터널 유형을vxlan
으로 설정하고 네트워크 유형을vxlan,vlan
:로 설정합니다.NeutronTunnelTypes: 'vxlan' NeutronNetworkType: 'vxlan,vlan'
parameters_defaults
에서 브리지 매핑을 설정합니다.# The OVS logical->physical bridge mappings to use. NeutronBridgeMappings: - dpdk-mgmt:br-link0
parameter_defaults
에서ComputeOvsDpdkSriov
역할의 역할별 매개변수를 설정합니다.########################## # OVS DPDK configuration # ########################## ComputeOvsDpdkSriovParameters: KernelArgs: "default_hugepagesz=1GB hugepagesz=1G hugepages=32 iommu=pt intel_iommu=on isolcpus=2-19,22-39" TunedProfileName: "cpu-partitioning" IsolCpusList: "2-19,22-39" NovaComputeCpuDedicatedSet: ['4-19,24-39'] NovaReservedHostMemory: 4096 OvsDpdkSocketMemory: "3072,1024" OvsDpdkMemoryChannels: "4" OvsPmdCoreList: "2,22,3,23" NovaComputeCpuSharedSet: [0,20,1,21] NovaLibvirtRxQueueSize: 1024 NovaLibvirtTxQueueSize: 1024
참고게스트 생성 중에 오류가 발생하지 않도록 하려면 각 NUMA 노드에 형제 스레드가 있는 하나 이상의 CPU를 할당합니다. 이 예에서
OvsPmdCoreList
매개변수 값은 NUMA 0의 코어 2 및 22, NUMA 1의 코어 3 및 23을 나타냅니다.참고이러한 대규모 페이지는 가상 머신에서 사용하고 이 절차에 표시된 대로
OvsDpdkSocketMemory
매개변수를 사용하는 OVS-DPDK에서도 사용됩니다. 가상 머신에 사용할 수 있는 대규모 페이지 수는부팅
매개변수에서OvsDpdkSocketMemory
를 뺀 값입니다.DPDK 인스턴스와 연결된 플레이버에도
hw:mem_page_size=1GB
를 추가해야 합니다.참고OvsDpdkMemoryChannels
는 이 프로세스에 필요한 설정입니다. optimal operation을 위해 적절한 매개변수 및 값을 사용하여 DPDK를 배포하십시오.SR-IOV의 역할별 매개변수를 구성합니다.
NovaPCIPassthrough: - vendor_id: "8086" product_id: "1528" address: "0000:06:00.0" trusted: "true" physical_network: "sriov-1" - vendor_id: "8086" product_id: "1528" address: "0000:06:00.1" trusted: "true" physical_network: "sriov-2"