@@ -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 | |||
@@ -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 %} |
@@ -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, |
@@ -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 %} |
@@ -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 %} |
@@ -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'] %} | |||
@@ -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 %} |
@@ -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 %} | |||
@@ -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 |