Kaynağa Gözat

Merge "Linux OVS-dpdk and multiqueue support"

tags/2017.4
Marek Celoud 7 yıl önce
ebeveyn
işleme
5ca7ca15f2
9 değiştirilmiş dosya ile 275 ekleme ve 16 silme
  1. +84
    -11
      README.rst
  2. +6
    -0
      linux/files/dpdk_interfaces
  3. +2
    -1
      linux/map.jinja
  4. +134
    -0
      linux/network/dpdk.sls
  5. +3
    -0
      linux/network/init.sls
  6. +2
    -1
      linux/network/interface.sls
  7. +2
    -2
      linux/network/resolv.sls
  8. +1
    -1
      linux/system/hugepages.sls
  9. +41
    -0
      tests/pillar/network_openvswitch_dpdk.sls

+ 84
- 11
README.rst Dosyayı Görüntüle

@@ -760,19 +760,92 @@ Setup resolv.conf, nameservers, domain and search domains
network:
resolv:
dns:
- 8.8.4.4
- 8.8.8.8
- 8.8.4.4
- 8.8.8.8
domain: my.example.com
search:
- my.example.com
- example.com
- my.example.com
- example.com
options:
- ndots:5
- timeout:2
- attempts:2
- ndots: 5
- timeout: 2
- attempts: 2

DPDK OVS interfaces
--------------------

**DPDK OVS NIC**

.. code-block:: yaml

linux:
network:
bridge: openvswitch
dpdk:
enabled: true
driver: uio/vfio-pci
openvswitch:
pmd_cpu_mask: "0x6"
dpdk_socket_mem: "1024,1024"
dpdk_lcore_mask: "0x400"
memory_channels: 2
interface:
dpkd0:
name: ${_param:dpdk_nic}
pci: 0000:06:00.0
driver: igb_uio/vfio
enabled: true
type: dpdk_ovs_port
n_rxq: 2
bridge: br-prv
br-prv:
enabled: true
type: dpdk_ovs_bridge

**DPDK OVS Bond**

Linux storage pillars
---------------------
.. code-block:: yaml

linux:
network:
bridge: openvswitch
dpdk:
enabled: true
driver: uio/vfio-pci
openvswitch:
pmd_cpu_mask: "0x6"
dpdk_socket_mem: "1024,1024"
dpdk_lcore_mask: "0x400"
memory_channels: 2
interface:
dpdk_second_nic:
name: ${_param:primary_second_nic}
pci: 0000:06:00.0
driver: igb_uio/vfio
bond: dpdkbond0
enabled: true
type: dpdk_ovs_port
n_rxq: 2
dpdk_first_nic:
name: ${_param:primary_first_nic}
pci: 0000:05:00.0
driver: igb_uio/vfio
bond: dpdkbond0
enabled: true
type: dpdk_ovs_port
n_rxq: 2
dpdkbond0:
enabled: true
bridge: br-prv
type: dpdk_ovs_bond
mode: active-backup
br-prv:
enabled: true
type: dpdk_ovs_bridge


Linux storage
-------------

Linux with mounted Samba

@@ -789,7 +862,7 @@ Linux with mounted Samba
- file_system: cifs
- options: guest,uid=myuser,iocharset=utf8,file_mode=0777,dir_mode=0777,noperm

Linux with file swap
File swap configuration

.. code-block:: yaml

@@ -803,7 +876,7 @@ Linux with file swap
device: /swapfile
size: 1024

Linux with partition swap
Partition swap configuration

.. code-block:: yaml


+ 6
- 0
linux/files/dpdk_interfaces Dosyayı Görüntüle

@@ -0,0 +1,6 @@
{%- from "linux/map.jinja" import network with context %}
{%- for interface_name, interface in network.interface.iteritems() %}
{%- if 'dpdk' in interface.type and interface.pci is defined %}
pci {{ interface.pci }} {{ interface.driver }}
{%- endif %}
{%- endfor %}

+ 2
- 1
linux/map.jinja Dosyayı Görüntüle

@@ -11,7 +11,7 @@
'repo': {},
'package': {},
'autoupdates': {
'pkgs': []
'pkgs': []
},
'selinux': 'permissive',
'ca_certs_dir': '/usr/local/share/ca-certificates',
@@ -106,6 +106,7 @@
'hostname_file': '/etc/hostname',
'bridge_pkgs': ['bridge-utils'],
'ovs_pkgs': ['openvswitch-switch', 'bridge-utils'],
'dpdk_pkgs': ['dpdk', 'dpdk-dev', 'dpdk-dkms', 'dpdk-igb-uio-dkms', 'dpdk-rte-kni-dkms'],
'network_manager': False,
'interface': {},
'interface_params': interface_params,

+ 134
- 0
linux/network/dpdk.sls Dosyayı Görüntüle

@@ -0,0 +1,134 @@
{%- from "linux/map.jinja" import network with context %}
{%- from "linux/map.jinja" import system with context %}
{%- if network.dpdk.enabled %}

linux_dpdk_pkgs:
pkg.installed:
- pkgs: {{ network.dpdk_pkgs }}

linux_dpdk_kernel_module:
kmod.present:
- name: {{ network.dpdk.driver }}
- require:
- pkg: linux_dpdk_pkgs
- require_in:
- service: linux_network_dpdk_service

/etc/dpdk/interfaces:
file.managed:
- source: salt://linux/files/dpdk_interfaces
- template: jinja
- user: root
- group: root
- mode: 644
- require:
- pkg: linux_dpdk_pkgs

linux_network_dpdk_service:
service.running:
- enable: true
- name: dpdk
- watch:
- file: /etc/dpdk/interfaces

{%- if network.openvswitch is defined %}

openvswitch_dpdk_pkgs:
pkg.installed:
- pkgs:
- openvswitch-switch-dpdk
- openvswitch-switch
- bridge-utils

linux_network_dpdk_ovs_service:
cmd.run:
- name: "ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-init=true"
- require:
- service: linux_network_dpdk_service
- unless: 'ovs-vsctl get Open_vSwitch . other_config | grep "dpdk-init=\"true\""'

{%- set ovs_options = [
"pmd-cpu-mask=\""+network.openvswitch.pmd_cpu_mask+"\"",
"dpdk-socket-mem=\""+network.openvswitch.dpdk_socket_mem+"\"",
"dpdk-lcore-mask=\""+network.openvswitch.dpdk_lcore_mask+"\"",
"dpdk-extra=\"-n "+network.openvswitch.memory_channels+" --vhost-owner libvirt-qemu:kvm --vhost-perm 0664\""
]
%}

{%- for option in ovs_options %}

linux_network_dpdk_ovs_option_{{ option }}:
cmd.run:
- name: 'ovs-vsctl set Open_vSwitch . other_config:{{ option }}'
- watch_in:
- service: service_openvswitch
- require:
- cmd: linux_network_dpdk_ovs_service
- unless: |
ovs-vsctl get Open_vSwitch . other_config | grep '{{ option }}'

{%- endfor %}

service_openvswitch:
service.running:
- name: openvswitch-switch
- enable: true
- watch:
- cmd: linux_network_dpdk_ovs_service

{%- endif %}

{%- for interface_name, interface in network.interface.iteritems() if interface.get('enabled', True) %}

{%- if interface.type == "dpdk_ovs_bond" %}

{%- set bond_interfaces = {} %}
{%- for iface_name, iface in network.interface.iteritems() if iface.get('enabled', True) and iface.get('bond',"") == interface_name %}
{#- Get list of child interfaces #}
{%- do bond_interfaces.update({iface_name: iface}) %}
{%- endfor %}

linux_network_dpdk_bond_interface_{{ interface_name }}:
cmd.run:
- name: "ovs-vsctl add-bond {{ interface.bridge }} {{ interface_name }} {{ bond_interfaces.keys()|join(' ') }} {% for iface_name, iface in bond_interfaces.iteritems() %}-- set Interface {{ iface_name }} type=dpdk options:dpdk-devargs={{ iface.pci }} {% endfor %}"
- unless: "ovs-vsctl show | grep {{ interface_name }}"
- require:
- cmd: linux_network_dpdk_bridge_interface_{{ interface.bridge }}

linux_network_dpdk_bond_mode_{{ interface_name }}:
cmd.run:
- name: "ovs-vsctl set port {{ interface_name }} bond_mode={{ interface.mode }}"
- unless: "ovs-appctl bond/show {{ interface_name }} | grep {{ interface.mode }}"
- require:
- cmd: linux_network_dpdk_bond_interface_{{ interface_name }}

{%- elif interface.type == 'dpdk_ovs_bridge' %}

linux_network_dpdk_bridge_interface_{{ interface_name }}:
cmd.run:
- name: "ovs-vsctl add-br {{ interface_name }} -- set bridge {{ interface_name }} datapath_type=netdev"
- unless: "ovs-vsctl show | grep {{ interface_name }}"

{%- elif interface.type == 'dpdk_ovs_port' and interface.bridge is defined %}

linux_network_dpdk_bridge_port_interface_{{ interface_name }}:
cmd.run:
- name: "ovs-vsctl add-port {{ interface.bridge }} dpdk0 -- set Interface dpdk0 type=dpdk options:dpdk-devargs={{ interface.pci }}"
- unless: "ovs-vsctl show | grep dpdk0"
- require:
- cmd: linux_network_dpdk_bridge_interface_{{ interface.bridge }}

{# Multiqueue n_rxq setup on interfaces #}
{%- elif interface.type == 'dpdk_ovs_port' and interface.n_rxq is defined %}

linux_network_dpdk_bridge_port_interface_n_rxq_{{ interface_name }}:
cmd.run:
- name: "ovs-vsctl set Interface {{ interface_name }} options:n_rxq={{ interface.n_rxq }} "
- unless: |
ovs-vsctl get Interface {{ interface_name }} options | grep 'n_rxq="{{ interface.n_rxq }}"'

{%- endif %}

{%- endfor %}

{%- endif %}

+ 3
- 0
linux/network/init.sls Dosyayı Görüntüle

@@ -7,6 +7,9 @@ include:
{%- if network.resolv is defined %}
- linux.network.resolv
{%- endif %}
{%- if network.dpdk is defined %}
- linux.network.dpdk
{%- endif %}
{%- if network.interface|length > 0 %}
- linux.network.interface
{%- endif %}

+ 2
- 1
linux/network/interface.sls Dosyayı Görüntüle

@@ -24,7 +24,8 @@ linux_network_bridge_pkgs:

{%- set interface_name = interface.get('name', interface_name) %}

{%- if interface.get('managed', True) %}
{# it is not used for any interface with type preffix dpdk,eg. dpdk_ovs_port #}
{%- if interface.get('managed', True) and not 'dpdk' in interface.type %}

{%- if grains.os_family in ['RedHat', 'Debian'] %}


+ 2
- 2
linux/network/resolv.sls Dosyayı Görüntüle

@@ -9,7 +9,7 @@

linux_resolvconf_disable:
cmd.run:
- name: resolvconf --disable-updates
- onlyif: resolvconf --updates-are-enabled
- name: resolvconf --disable-updates
- onlyif: resolvconf --updates-are-enabled

{%- endif %}

+ 1
- 1
linux/system/hugepages.sls Dosyayı Görüntüle

@@ -24,7 +24,7 @@ hugepages_mount_{{ hugepages_type }}:
- device: Hugetlbfs-kvm
- fstype: hugetlbfs
- mkmnt: true
- opts: mode=777,pagesize={{ hugepages.size }}
- opts: mode=775,gid=kvm,pagesize={{ hugepages.size }}

{%- endif %}


+ 41
- 0
tests/pillar/network_openvswitch_dpdk.sls Dosyayı Görüntüle

@@ -0,0 +1,41 @@
linux:
system:
enabled: true
domain: local
network:
enabled: true
hostname: test01
fqdn: test01.local
network_manager: false
bridge: openvswitch
dpdk:
enabled: true
driver: uio
openvswitch:
pmd_cpu_mask: "0x6"
dpdk_socket_mem: "1024"
dpdk_lcore_mask: "0x400"
memory_channels: "2"
interface:
dpdk0:
name: enp5s0f1
pci: "0000:05:00.1"
driver: igb_uio
bond: dpdkbond0
enabled: true
type: dpdk_ovs_port
dpdk1:
name: enp5s0f2
pci: "0000:05:00.2"
driver: igb_uio
bond: dpdkbond0
enabled: true
type: dpdk_ovs_port
dpdkbond0:
enabled: true
bridge: br-prv
type: dpdk_ovs_bond
mode: active-backup
br-prv:
enabled: true
type: dpdk_ovs_bridge

Yükleniyor…
İptal
Kaydet