From 6682b3e34c768053c016c7b860248d27b0ada910 Mon Sep 17 00:00:00 2001 From: sufuf3 Date: Mon, 6 Aug 2018 14:16:09 +0800 Subject: [PATCH] Add systemd for binding dpdk port after reboot - Add dpdkbind.service for systemd - Update kernel module from uio to igb_uio cc linkernetworks/vortex#212 --- inventory/group_vars/network-setup.yml | 2 +- network-setup.yml | 2 +- .../network-setup/dpdk/tasks/bind-network.yml | 4 +-- roles/network-setup/dpdk/tasks/dpdk.yml | 26 +++++++++++++++++++ .../network-setup/dpdk/tasks/setting-kmod.yml | 4 +-- .../network-setup/dpdk/templates/dpdkbind.j2 | 3 +++ .../dpdk/templates/dpdkbind.service.j2 | 13 ++++++++++ roles/network-setup/reset/tasks/dpdk.yml | 2 +- 8 files changed, 49 insertions(+), 7 deletions(-) create mode 100644 roles/network-setup/dpdk/templates/dpdkbind.j2 create mode 100644 roles/network-setup/dpdk/templates/dpdkbind.service.j2 diff --git a/inventory/group_vars/network-setup.yml b/inventory/group_vars/network-setup.yml index 7d5e097..0f2c51b 100644 --- a/inventory/group_vars/network-setup.yml +++ b/inventory/group_vars/network-setup.yml @@ -25,4 +25,4 @@ ovs_tar_path: /tmp/openvswitch-2.9.2.tar.gz ovs_folder_name: openvswitch-2.9.2 ### Kernel module ### -kernel_module: uio +kernel_module: igb_uio diff --git a/network-setup.yml b/network-setup.yml index 83b41c7..79004fb 100644 --- a/network-setup.yml +++ b/network-setup.yml @@ -3,7 +3,7 @@ - hosts: network-setup become: yes roles: - - { role: network-setup/dpdk, when: kernel_module == 'uio' or ovs_type == 'dpdk', tags: dpdk } + - { role: network-setup/dpdk, when: kernel_module == 'igb_uio' or ovs_type == 'dpdk', tags: dpdk } - { role: network-setup/ovs, when: ovs_type == 'ovs', tags: ovs } - { role: network-setup/dpdk-ovs, when: ovs_type == 'dpdk', tags: dpdk-ovs } - { role: network-setup/setup-dpdk-ovs, when: ovs_type == 'dpdk', tags: dpdk-ovs } diff --git a/roles/network-setup/dpdk/tasks/bind-network.yml b/roles/network-setup/dpdk/tasks/bind-network.yml index df9c898..33980c0 100644 --- a/roles/network-setup/dpdk/tasks/bind-network.yml +++ b/roles/network-setup/dpdk/tasks/bind-network.yml @@ -36,11 +36,11 @@ # Bind port - name: Bind port - shell: cd ~/ && {{ DPDK_DIR }}/usertools/dpdk-devbind.py --bind=igb_uio {{ item.name }} + shell: cd ~/ && {{ DPDK_DIR }}/usertools/dpdk-devbind.py --bind={{kernel_module}} {{ item.name }} ignore_errors: True with_items: - "{{ dpdk_ifaces }}" - when: ovs_type == 'dpdk' + when: ovs_type == 'dpdk' and kernel_module == 'igb_uio' # Check port - name: Check port diff --git a/roles/network-setup/dpdk/tasks/dpdk.yml b/roles/network-setup/dpdk/tasks/dpdk.yml index 0a3865d..4b2ed49 100644 --- a/roles/network-setup/dpdk/tasks/dpdk.yml +++ b/roles/network-setup/dpdk/tasks/dpdk.yml @@ -67,3 +67,29 @@ command: sed -i 's/CONFIG_RTE_BUILD_SHARED_LIB=n/CONFIG_RTE_BUILD_SHARED_LIB=y/g' {{ DPDK_DIR }}/config/common_base when: ovs_type == 'dpdk' +# NIC setup will binding dpdk port after reboot +- name: Copy dpdkbind.service file + template: + src: dpdkbind.service.j2 + dest: "/etc/systemd/system/dpdkbind.service" + owner: root + group: root + mode: 0755 + when: ovs_type == 'dpdk' + +- name: Copy dpdkbind file + template: + src: dpdkbind.j2 + dest: "/etc/systemd/system/dpdkbind" + owner: root + group: root + mode: 0755 + when: ovs_type == 'dpdk' + +- name: Enable dpdkbind.service + command: "{{ item }}" + with_items: + - systemctl enable dpdkbind + - systemctl start dpdkbind + when: ovs_type == 'dpdk' + diff --git a/roles/network-setup/dpdk/tasks/setting-kmod.yml b/roles/network-setup/dpdk/tasks/setting-kmod.yml index 3c5c53a..61e069d 100644 --- a/roles/network-setup/dpdk/tasks/setting-kmod.yml +++ b/roles/network-setup/dpdk/tasks/setting-kmod.yml @@ -15,7 +15,7 @@ - name: Insert igb_uio when kernal_module is UIO command: insmod {{ DPDK_DIR }}/x86_64-native-linuxapp-gcc/kmod/igb_uio.ko ignore_errors: True - when: kernel_module == 'uio' and ovs_type == 'dpdk' + when: kernel_module == 'igb_uio' and ovs_type == 'dpdk' # Make uio and igb_uio installations persist across reboots - name: Insert igb_uio when kernal_module is UIO @@ -25,5 +25,5 @@ - depmod -a - echo "uio" | sudo tee -a /etc/modules - echo "igb_uio" | sudo tee -a /etc/modules - when: kernel_module == 'uio' and ovs_type == 'dpdk' + when: kernel_module == 'igb_uio' and ovs_type == 'dpdk' diff --git a/roles/network-setup/dpdk/templates/dpdkbind.j2 b/roles/network-setup/dpdk/templates/dpdkbind.j2 new file mode 100644 index 0000000..9a1b158 --- /dev/null +++ b/roles/network-setup/dpdk/templates/dpdkbind.j2 @@ -0,0 +1,3 @@ +{% for item in dpdk_ifaces %} +NET_IF_NAME={{item.name}} +{%- endfor -%} diff --git a/roles/network-setup/dpdk/templates/dpdkbind.service.j2 b/roles/network-setup/dpdk/templates/dpdkbind.service.j2 new file mode 100644 index 0000000..60121ff --- /dev/null +++ b/roles/network-setup/dpdk/templates/dpdkbind.service.j2 @@ -0,0 +1,13 @@ +[Unit] +Description=Binding dpdk port after reboot +After=multi-user.target + +[Install] +WantedBy=multi-user.target + +[Service] +Type=oneshot +RemainAfterExit=true +EnvironmentFile=-/etc/default/dpdkbind +ExecStart=/bin/bash -c 'echo "$NET_IF_NAME" | tr "," "\n" | awk \'{system("/sbin/ifconfig " $1 " down")}\'' +ExecStart=/bin/bash -c 'echo "$NET_IF_NAME" | tr "," "\n" | awk \'{system("/usr/src/dpdk-stable-17.11.2/usertools/dpdk-devbind.py --bind={{ kernel_module }} " $1 )}\'' diff --git a/roles/network-setup/reset/tasks/dpdk.yml b/roles/network-setup/reset/tasks/dpdk.yml index 23f7090..6a013bd 100644 --- a/roles/network-setup/reset/tasks/dpdk.yml +++ b/roles/network-setup/reset/tasks/dpdk.yml @@ -46,7 +46,7 @@ - name: Remove IGB UIO module shell: /sbin/rmmod igb_uio ignore_errors: True - when: kernel_module == 'uio' and ovs_type == 'dpdk' + when: kernel_module == 'igb_uio' and ovs_type == 'dpdk' # Unbind devices from VFIO driver - name: Remove VFIO module