紅帽O(jiān)SP10 NFV配置指南: 4. 配置OVS+DPDK

azeqjz OpenStack: 紅帽O(jiān)SP10 NFV配置指南: 4. 配置OVS+DPDK

原文:
NETWORK FUNCTIONS VIRTUALIZATION CONFIGURATION GUIDE > Chapter 4. Configure DPDK Accelerated Open vSwitch (OVS) for Networking

4 配置OVS+DPDK

這一章節(jié)包括OVS+DPDK在Red Hat OpenStack Platform環(huán)境下的部署與調(diào)測(cè)。參考以下文檔OVS-DPDK部署規(guī)劃以了解配置OVS-DPDK的配置參數(shù)。NETWORK FUNCTIONS VIRTUALIZATION PLANNING GUIDE > Chapter 6. Planning Your OVS-DPDK Deployment

  • 4.1 單OVS-DPDK數(shù)據(jù)面 單OVS網(wǎng)橋 單端口
  • 4.2 雙OVS-DPDK數(shù)據(jù)面 雙OVS網(wǎng)橋 雙端口
  • 4.3 單OVS-DPDK數(shù)據(jù)面 單OVS網(wǎng)橋 雙端口
  • 4.5 配置OVS-DPDK可組合角色
  • 4.6 設(shè)置OVS-DPDK接口的MTU值

注意:本指南提供了CPU使用、內(nèi)存分配與網(wǎng)卡配置等示例,在不同的拓?fù)渑cuse case下,這可能都不一樣。硬件與配置選項(xiàng),可以參考NFV產(chǎn)品指南NFV規(guī)劃指南。

OVS+DPDK的優(yōu)點(diǎn)
DPDK是Intel實(shí)現(xiàn)的一個(gè)用戶態(tài)高速數(shù)據(jù)包處理框架,相比于Linux內(nèi)核實(shí)現(xiàn)的數(shù)據(jù)包處理方式,有以下優(yōu)勢(shì)。

  1. 用戶態(tài)驅(qū)動(dòng)程序,避免不必要的內(nèi)存拷貝和系統(tǒng)調(diào)用。
  2. 使用輪詢方式從網(wǎng)卡獲取數(shù)據(jù)包,避免中斷方式的上下文切換開銷。
  3. 獨(dú)占CPU處理數(shù)據(jù)包,雖然在網(wǎng)絡(luò)流量低的時(shí)候浪費(fèi)CPU資源,但是網(wǎng)絡(luò)流量高的時(shí)候處理數(shù)據(jù)包性能很好,可以避免CPU切換導(dǎo)致的cache miss和上下文切換。最新DPDK可以實(shí)現(xiàn)流量小的時(shí)候使用中斷方式,流量大的時(shí)候使用輪詢方式。
  4. 內(nèi)存訪問優(yōu)化,充分利用NUMA架構(gòu),大頁(yè)內(nèi)存,無鎖隊(duì)列實(shí)現(xiàn)數(shù)據(jù)包的并發(fā)高效處理。
  5. 軟件的優(yōu)化,比如cache line對(duì)齊,CPU預(yù)取數(shù)據(jù),充分利用IntelCPU的網(wǎng)絡(luò)相關(guān)新指令來提升性能。
  6. 充分利用網(wǎng)卡的Offload功能實(shí)現(xiàn)硬件加速。

雖然DPDK對(duì)于數(shù)據(jù)包處理性能很好,但是它只是將數(shù)據(jù)包高效的送給用戶態(tài),而沒有網(wǎng)絡(luò)棧去處理數(shù)據(jù)包,社區(qū)版DPDK也無法與Linux網(wǎng)絡(luò)棧很好結(jié)合,所以基于Linux網(wǎng)絡(luò)棧實(shí)現(xiàn)的網(wǎng)絡(luò)應(yīng)用程序無法直接使用DPDK,如果要使用DPDK,應(yīng)用程序需要重寫。當(dāng)然如果是全新的網(wǎng)絡(luò)程序,基于DPDK開發(fā)是個(gè)不錯(cuò)的選擇。
原文:x86服務(wù)器中網(wǎng)絡(luò)性能分析與調(diào)優(yōu)

在接下來的流程中,我們需要:

  • 更新network-environment.yaml以包含內(nèi)核參數(shù)和DPDK參數(shù)。
  • 更新compute.yaml以包含DPDK接口參數(shù)中的Bridge。
  • 更新controller.yaml以包含DPDK接口參數(shù)中的同一個(gè)Bridge的細(xì)節(jié)。
  • 執(zhí)行overcloud_deploy.sh腳本部署含有DPDK的overcloud。
OpenStack_NFV_Config-Guide_Topology_450694_0617_ECE_OVS-DPDK

在開始之前,需要確保有:

注意:部署OVS-DPDK時(shí),Red Hat OpenStack Platform 10(OVS2.6)以O(shè)VS服務(wù)器模式運(yùn)行。在OVS服務(wù)器模式中,如果OVS重啟,要求重啟所有連接到該OVS的虛擬機(jī)實(shí)例。

4.1. 配置單網(wǎng)口OVS-DPDK與VLAN Tunneling

*單OVS-DPDK數(shù)據(jù)面 單OVS網(wǎng)橋 單端口 *
這一節(jié)包括配置與部署單數(shù)據(jù)平面端口的OVS-DPDK,同時(shí)配置OpenStack環(huán)境的控制面Linux網(wǎng)橋綁定。

4.1.1. 修改first-boot.yaml

修改first-boot.yaml,定義OVS與DPDK參數(shù),配置CPU親和性為tuned。

  1. 增加額外資源
resources:
  userdata:
    type: OS::Heat::MultipartMime
    properties:
      parts:
      - config: {get_resource: set_ovs_config}
      - config: {get_resource: set_dpdk_params}
      - config: {get_resource: install_tuned}
      - config: {get_resource: compute_kernel_args}
  1. OVS配置。
set_ovs_config:
    type: OS::Heat::SoftwareConfig
    properties:
      config:
        str_replace:
          template: |
            #!/bin/bash
            FORMAT=$COMPUTE_HOSTNAME_FORMAT
            if [[ -z $FORMAT ]] ; then
              FORMAT="compute" ;
            else
              # Assumption: only %index% and %stackname% are the variables in Host name format
              FORMAT=$(echo $FORMAT | sed  's/\%index\%//g' | sed 's/\%stackname\%//g') ;
            fi
            if [[ $(hostname) == *$FORMAT* ]] ; then
              if [ -f /usr/lib/systemd/system/openvswitch-nonetwork.service ]; then
                ovs_service_path="/usr/lib/systemd/system/openvswitch-nonetwork.service"
              elif [ -f /usr/lib/systemd/system/ovs-vswitchd.service ]; then
                ovs_service_path="/usr/lib/systemd/system/ovs-vswitchd.service"
              fi
              grep -q "RuntimeDirectoryMode=.*" $ovs_service_path
              if [ "$?" -eq 0 ]; then
                sed -i 's/RuntimeDirectoryMode=.*/RuntimeDirectoryMode=0775/' $ovs_service_path
              else
                echo "RuntimeDirectoryMode=0775" >> $ovs_service_path
              fi
              grep -Fxq "Group=qemu" $ovs_service_path
              if [ ! "$?" -eq 0 ]; then
                echo "Group=qemu" >> $ovs_service_path
              fi
              grep -Fxq "UMask=0002" $ovs_service_path
              if [ ! "$?" -eq 0 ]; then
                echo "UMask=0002" >> $ovs_service_path
              fi
              ovs_ctl_path='/usr/share/openvswitch/scripts/ovs-ctl'
              grep -q "umask 0002 \&\& start_daemon \"\$OVS_VSWITCHD_PRIORITY\"" $ovs_ctl_path
              if [ ! "$?" -eq 0 ]; then
                sed -i 's/start_daemon \"\$OVS_VSWITCHD_PRIORITY.*/umask 0002 \&\& start_daemon \"$OVS_VSWITCHD_PRIORITY\" \"$OVS_VSWITCHD_WRAPPER\" \"$@\"/' $ovs_ctl_path
              fi
            fi
          params:
            $COMPUTE_HOSTNAME_FORMAT: {get_param: ComputeHostnameFormat}
  1. 設(shè)置DPDK參數(shù)
 set_dpdk_params:
    type: OS::Heat::SoftwareConfig
    properties:
      config:
        str_replace:
          template: |
            #!/bin/bash
            set -x
            get_mask()
            {
              local list=$1
              local mask=0
              declare -a bm
              max_idx=0
              for core in $(echo $list | sed 's/,/ /g')
              do
                  index=$(($core/32))
                  bm[$index]=0
                  if [ $max_idx -lt $index ]; then
                     max_idx=$(($index))
                  fi
              done
              for ((i=$max_idx;i>=0;i--));
              do
                  bm[$i]=0
              done
              for core in $(echo $list | sed 's/,/ /g')
              do
                  index=$(($core/32))
                  temp=$((1<<$(($core % 32))))
                  bm[$index]=$((${bm[$index]} | $temp))
              done

              printf -v mask "%x" "${bm[$max_idx]}"
              for ((i=$max_idx-1;i>=0;i--));
              do
                  printf -v hex "%08x" "${bm[$i]}"
                  mask+=$hex
              done
              printf "%s" "$mask"
            }

            FORMAT=$COMPUTE_HOSTNAME_FORMAT
            if [[ -z $FORMAT ]] ; then
              FORMAT="compute" ;
            else
              # Assumption: only %index% and %stackname% are the variables in Host name format
              FORMAT=$(echo $FORMAT | sed  's/\%index\%//g' | sed 's/\%stackname\%//g') ;
            fi
            if [[ $(hostname) == *$FORMAT* ]] ; then
              pmd_cpu_mask=$( get_mask $PMD_CORES )
              host_cpu_mask=$( get_mask $LCORE_LIST )
              socket_mem=$(echo $SOCKET_MEMORY | sed s/\'//g )
              ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-init=true
              ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-socket-mem=$socket_mem
              ovs-vsctl --no-wait set Open_vSwitch . other_config:pmd-cpu-mask=$pmd_cpu_mask
              ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-lcore-mask=$host_cpu_mask
            fi
          params:
            $COMPUTE_HOSTNAME_FORMAT: {get_param: ComputeHostnameFormat}
            $LCORE_LIST: {get_param: HostCpusList}
            $PMD_CORES: {get_param: NeutronDpdkCoreList}
            $SOCKET_MEMORY: {get_param: NeutronDpdkSocketMemory}
  1. 設(shè)置tuned以提供CPU親和性
  install_tuned:
    type: OS::Heat::SoftwareConfig
    properties:
      config:
        str_replace:
          template: |
            #!/bin/bash
            FORMAT=$COMPUTE_HOSTNAME_FORMAT
            if [[ -z $FORMAT ]] ; then
              FORMAT="compute" ;
            else
              # Assumption: only %index% and %stackname% are the variables in Host name format
              FORMAT=$(echo $FORMAT | sed  's/\%index\%//g' | sed 's/\%stackname\%//g') ;
            fi
            if [[ $(hostname) == *$FORMAT* ]] ; then
              tuned_conf_path="/etc/tuned/cpu-partitioning-variables.conf"
              if [ -n "$TUNED_CORES" ]; then
                grep -q "^isolated_cores" $tuned_conf_path
                if [ "$?" -eq 0 ]; then
                  sed -i 's/^isolated_cores=.*/isolated_cores=$TUNED_CORES/' $tuned_conf_path
                else
                  echo "isolated_cores=$TUNED_CORES" >> $tuned_conf_path
                fi
                tuned-adm profile cpu-partitioning
              fi
            fi
          params:
            $COMPUTE_HOSTNAME_FORMAT: {get_param: ComputeHostnameFormat}
            $TUNED_CORES: {get_param: HostIsolatedCoreList}
  1. 設(shè)置內(nèi)核參數(shù)
  compute_kernel_args:
    type: OS::Heat::SoftwareConfig
    properties:
      config:
        str_replace:
          template: |
            #!/bin/bash
            FORMAT=$COMPUTE_HOSTNAME_FORMAT
            if [[ -z $FORMAT ]] ; then
              FORMAT="compute" ;
            else
              # Assumption: only %index% and %stackname% are the variables in Host name format
              FORMAT=$(echo $FORMAT | sed  's/\%index\%//g' | sed 's/\%stackname\%//g') ;
            fi
            if [[ $(hostname) == *$FORMAT* ]] ; then
              sed 's/^\(GRUB_CMDLINE_LINUX=".*\)"/\1 $KERNEL_ARGS isolcpus=$TUNED_CORES"/g' -i /etc/default/grub ;
              grub2-mkconfig -o /etc/grub2.cfg
              reboot
            fi
          params:
            $KERNEL_ARGS: {get_param: ComputeKernelArgs}
            $COMPUTE_HOSTNAME_FORMAT: {get_param: ComputeHostnameFormat}
            $TUNED_CORES: {get_param: HostIsolatedCoreList}

4.1.2. 修改 post-install.yaml

  1. 設(shè)置tuned以提供CPU親和性
  ExtraConfig:
    type: OS::Heat::SoftwareConfig
    properties:
      group: script
      config:
        str_replace:
          template: |
            #!/bin/bash

            set -x
            FORMAT=$COMPUTE_HOSTNAME_FORMAT
            if [[ -z $FORMAT ]] ; then
              FORMAT="compute" ;
            else
              # Assumption: only %index% and %stackname% are the variables in Host name format
              FORMAT=$(echo $FORMAT | sed  's/\%index\%//g' | sed 's/\%stackname\%//g') ;
            fi
            if [[ $(hostname) == *$FORMAT* ]] ; then
              tuned_service=/usr/lib/systemd/system/tuned.service
              grep -q "network.target" $tuned_service
              if [ "$?" -eq 0 ]; then
                sed -i '/After=.*/s/network.target//g' $tuned_service
              fi
              grep -q "Before=.*network.target" $tuned_service
              if [ ! "$?" -eq 0 ]; then
                grep -q "Before=.*" $tuned_service
                if [ "$?" -eq 0 ]; then
                  sed -i 's/^\(Before=.*\)/\1 network.target openvswitch.service/g' $tuned_service
                else
                  sed -i '/After/i Before=network.target openvswitch.service' $tuned_service
                fi
              fi
              systemctl daemon-reload
            fi
          params:
            $COMPUTE_HOSTNAME_FORMAT: {get_param: ComputeHostnameFormat}

4.1.3. 修改 network-environment.yaml

  1. resource_registry增加OVS-DPDK自定義資源
resource_registry:
  # Specify the relative/absolute path to the config files you want to use for override the default.
  OS::TripleO::Compute::Net::SoftwareConfig: nic-configs/compute-ovs-dpdk.yaml
  OS::TripleO::Controller::Net::SoftwareConfig: nic-configs/controller.yaml
  OS::TripleO::NodeUserData: first-boot.yaml
  OS::TripleO::NodeExtraConfigPost: post-install.yaml
  1. parameter_defaults,關(guān)閉tunnel類型(設(shè)置值為""),設(shè)置網(wǎng)絡(luò)類型為vlan
NeutronTunnelTypes: ""
NeutronNetworkType: 'vlan'
  1. 更新parameter_defaults,關(guān)聯(lián)物理網(wǎng)絡(luò)到虛擬網(wǎng)橋。
NeutronBridgeMappings: 'dpdk:br-link'
  1. 更新parameter_defaults,設(shè)置OpenStack網(wǎng)絡(luò)ML2與OVS VLAN映射范圍。
NeutronNetworkVLANRanges: 'dpdk:22:22'

這個(gè)示例在物理網(wǎng)絡(luò)(dpdk_data)上設(shè)置VLAN范圍。

  1. parameter_defaults下設(shè)置OVS-DPDK配置參數(shù)。
    注意:NeutronDPDKCoreList 和NeutronDPDKMemoryChannels是必要的配置,如果部署DPDK時(shí)此參數(shù)值不正確,部署會(huì)失敗,或者導(dǎo)致不穩(wěn)定。

ⅰ 提供可以被用來作DPDK輪循模式驅(qū)動(dòng)(DPDK poll mode drivers,PMDs)的CPU核列表,格式為[allowed_pattern: "'[0-9,-]+'"]

NeutronDpdkCoreList: "'4,6,20,22'" 

可通過以下選項(xiàng)優(yōu)化OVS-DPDK性能

  • 配置CPU與DPDK接口的NUMA節(jié)點(diǎn)關(guān)聯(lián)。
    使用cat /sys/class/net/<interface>/device/numa_node列出與接口關(guān)聯(lián)的NUMA節(jié)點(diǎn),使用lscpu列出與NUMA節(jié)點(diǎn)關(guān)聯(lián)的CPU。
  • 超線程情況下把CPU sibling放到同個(gè)組里( 什么是CPU sibling? )。
    使用cat /sys/devices/system/cpu/<cpu>/topology/thread_siblings_list查詢CPU sibling。
  • 為主機(jī)進(jìn)程預(yù)留CPU 0。
  • 隔離分配給PMD的CPU,保證主機(jī)進(jìn)程不使用這些CPU。
  • 使用NovaVcpuPinset把分配給PMD的CPU從計(jì)算調(diào)度中排除。

Type 1: DPDK PMD使用,NeutronDpdkCoreList;Type 2:宿主機(jī)進(jìn)程使用,HostCpusList;Type 3:虛擬機(jī)使用,NovaVcpuPinset。
NovaVcpuPinSet + NeutronDpdkCoreList = HostIsolatedCoreList

ⅱ提供內(nèi)存通道的數(shù)量,格式[allowed_pattern: "[0-9]+"]

  NeutronDpdkMemoryChannels: "4"

ⅲ 設(shè)置從CPU socket的大頁(yè)池中預(yù)分配的內(nèi)存。

  NeutronDpdkSocketMemory: "2048,2048"

這是用逗號(hào)分隔的字符串,按照CPU socket升序排列。如果只有一個(gè)NUMA節(jié)點(diǎn),則設(shè)置為 1024,0 。

ⅳ 設(shè)置DPDK驅(qū)動(dòng)類型與數(shù)據(jù)通道類型。

  NeutronDpdkDriverType: "vfio-pci"
  NeutronDatapathType: "netdev"
  1. parameter_defaults下設(shè)置OVS的vhost-user socket目錄。
  NeutronVhostuserSocketDir: "/var/run/openvswitch"
  1. parameter_defaults下預(yù)留給主機(jī)進(jìn)程的RAM。
  NovaReservedHostMemory: 2048
  1. parameter_defaults下,設(shè)置預(yù)留給虛擬機(jī)進(jìn)程的物理CPU核范圍,以逗號(hào)分隔。
  NovaVcpuPinSet: "8,10,12,14,18,24,26,28,30"
  1. parameter_defaults下,列出使用的過濾器。
    Nova scheduler使用這些列出來的過濾器。優(yōu)先列出最有拘束力的過濾器,以使節(jié)點(diǎn)的過濾進(jìn)程更加高效運(yùn)行。
NovaSchedulerDefaultFilters: "RamFilter,ComputeFilter,AvailabilityZoneFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,PciPassthroughFilter,NUMATopologyFilter"
  1. parameter_defaults下,增加ComputeKernelArgs參數(shù),以在初次啟動(dòng)時(shí)增加這些參數(shù)到默認(rèn)的grub文件中。
  ComputeKernelArgs: "default_hugepagesz=1GB hugepagesz=1G hugepages=32 iommu=pt intel_iommu=on"

注意:這些大頁(yè)內(nèi)存會(huì)被虛擬機(jī)消耗使用,也會(huì)被OVS-DPDK使用,如在此步驟中的NeutronDpdkSocketMemory參數(shù)所示??梢员惶摂M機(jī)使用的大頁(yè)內(nèi)存頁(yè)數(shù)是引導(dǎo)參數(shù)減去NeutronDpdkSocketMemory。
需要在使用DPDK的虛擬機(jī)實(shí)例flavor中添加hw:mem_page_size=1GB。如果沒有做這一步,虛擬機(jī)實(shí)例會(huì)無法獲取DHCP分配(大頁(yè)內(nèi)存?)。

  1. parameter_defaults下,設(shè)置需要調(diào)整的物理CPU核范圍。
    參數(shù)在附錄調(diào)整文檔cpu-partitioning中。
  HostIsolatedCoreList: "2,4,6,8,10,12,14,18,20,22,24,26,28,30"
  1. parameter_defaults下,設(shè)置邏輯OVS-DPDK核列表。這些CPU核必須要手工從NeutronDpdkCoreListNovaVcpuPinSet列表中排除出去。
  HostCpusList: "'3,5,7,19,21,23'"

4.1.4. 修改 controller.yaml

  1. 創(chuàng)建一個(gè)獨(dú)立的provisioning接口。
  -
    type: interface
    name: nic1
    use_dhcp: false
    addresses:
      -
        ip_netmask:
          list_join:
            - '/'
            - - {get_param: ControlPlaneIp}
              - {get_param: ControlPlaneSubnetCidr}
    routes:
      -
        ip_netmask: 169.254.169.254/32
        next_hop: {get_param: EC2MetadataIp}
      -
        default: true
        next_hop: {get_param: ExternalInterfaceDefaultRoute}
  1. 為隔離的網(wǎng)絡(luò)創(chuàng)建控制面Linux綁定。
  -
    type: linux_bond
    name: bond_api
    bonding_options: "mode=active-backup"
    use_dhcp: false
    dns_servers: {get_param: DnsServers}
    members:
      -
        type: interface
        name: nic2
        primary: true
      -
        type: interface
        name: nic3
  1. 為L(zhǎng)inux綁定分配VLAN。
  -
    type: vlan
    vlan_id: {get_param: InternalApiNetworkVlanID}
    device: bond_api
    addresses:
      -
        ip_netmask: {get_param: InternalApiIpSubnet}
  -
    type: vlan
    vlan_id: {get_param: TenantNetworkVlanID}
    device: bond_api
    addresses:
      -
        ip_netmask: {get_param: TenantIpSubnet}
  -
    type: vlan
    vlan_id: {get_param: StorageNetworkVlanID}
    device: bond_api
    addresses:
      -
        ip_netmask: {get_param: StorageIpSubnet}
  -
    type: vlan
    vlan_id: {get_param: StorageMgmtNetworkVlanID}
    device: bond_api
    addresses:
      -
        ip_netmask: {get_param: StorageMgmtIpSubnet}
  -
    type: vlan
    vlan_id: {get_param: ExternalNetworkVlanID}
    device: bond_api
    addresses:
    -
      ip_netmask: {get_param: ExternalIpSubnet}
  1. 為計(jì)算節(jié)點(diǎn)創(chuàng)建VOS網(wǎng)橋。
  -
    type: ovs_bridge
    name: br-link
    use_dhcp: false
    members:
      -
        type: interface
        name: nic4

4.1.5. 修改compute.yaml

復(fù)制默認(rèn)的compute.yamlcompute-ovs-dpdk.yaml,并且修改一下內(nèi)容:

  1. 創(chuàng)建分離的provisioning接口。
  -
    type: interface
    name: nic1
    use_dhcp: false
    addresses:
     -
       ip_netmask:
         list_join:
           - '/'
           - - {get_param: ControlPlaneIp}
             - {get_param: ControlPlaneSubnetCidr}
    routes:
     -
       ip_netmask: 169.254.169.254/32
       next_hop: {get_param: EC2MetadataIp}
     -
       default: true
       next_hop: {get_param: ControlPlaneDefaultRoute}
  1. 為隔離的網(wǎng)絡(luò)創(chuàng)建控制面Linux綁定。
  -
    type: linux_bond
    name: bond_api
    bonding_options: "mode=active-backup"
    use_dhcp: false
    dns_servers: {get_param: DnsServers}
    members:
      -
        type: interface
        name: nic2
        primary: true
      -
        type: interface
        name: nic3
  1. 分配VLAN給這個(gè)Linux綁定。
 -
    type: vlan
    vlan_id: {get_param: InternalApiNetworkVlanID}
    device: bond_api
    addresses:
      -
        ip_netmask: {get_param: InternalApiIpSubnet}
  -
    type: vlan
    vlan_id: {get_param: TenantNetworkVlanID}
    device: bond_api
    addresses:
      -
        ip_netmask: {get_param: TenantIpSubnet}
  -
    type: vlan
    vlan_id: {get_param: StorageNetworkVlanID}
    device: bond_api
    addresses:
      -
        ip_netmask: {get_param: StorageIpSubnet}
  1. 設(shè)置有DPDK接口的網(wǎng)橋,以連接到控制節(jié)點(diǎn)。
  -
    type: ovs_user_bridge
    name: br-link
    use_dhcp: false
    members:
      -
        type: ovs_dpdk_port
        name: dpdk0
        members:
          -
            type: interface
            name: nic4

注意:
如果有多個(gè)DPDK設(shè)備,為每個(gè)需要添加的DPDK設(shè)備復(fù)制一遍type字段即可。

注意:
使用OVS-DPDK時(shí),在同一個(gè)計(jì)算節(jié)點(diǎn)上的所有網(wǎng)橋類型應(yīng)該為ovs_user_bridge。當(dāng)不是這個(gè)類型時(shí),雖然Director可能會(huì)接受這個(gè)配置,但是Red Hat OpenStack Platform不支持同個(gè)節(jié)點(diǎn)上同時(shí)有ovs_bridgeovs_user_bridge

4.1.6. 執(zhí)行 overcloud_deploy.sh 腳本

以下例子定義bash腳本中的OVS-DPDK環(huán)境openstack overcloud deploy命令:

#!/bin/bash

openstack overcloud deploy  --templates \
-e /usr/share/openstack-tripleo-heat-templates/environments/network-isolation.yaml \
-e /usr/share/openstack-tripleo-heat-templates/environments/neutron-ovs-dpdk.yaml \
-e /home/stack/ospd-10-vlan-dpdk-single-port-ctlplane-bonding/network-environment.yaml
  • /usr/share/openstack-tripleo-heat-templates/environments/neutron-ovs-dpdk.yaml是默認(rèn)neutron-ovs-dpdk.yaml文件的位置,這使能計(jì)算節(jié)點(diǎn)的OVS-DPDK參數(shù)。

  • /home/stack/<relative-directory>/network-environment.yamlnetwork-environment.yaml文件的路徑。使用這個(gè)文件來覆蓋neutron-ovs-dpdk.yaml文件的默認(rèn)值。

注意:
overcloud部署后,需要重啟計(jì)算節(jié)點(diǎn)以執(zhí)行tuned文件。

注意:
此OVS-DPDK配置不支持安全組與熱遷移。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容