diff options
Diffstat (limited to 'ansible/roles/install_dpdk_shared')
-rw-r--r-- | ansible/roles/install_dpdk_shared/defaults/main.yml | 2 | ||||
-rwxr-xr-x | ansible/roles/install_dpdk_shared/tasks/Debian.yml | 22 | ||||
-rw-r--r-- | ansible/roles/install_dpdk_shared/tasks/RedHat.yml | 29 | ||||
-rw-r--r-- | ansible/roles/install_dpdk_shared/tasks/main.yml | 114 | ||||
-rw-r--r-- | ansible/roles/install_dpdk_shared/vars/main.yml | 9 |
5 files changed, 176 insertions, 0 deletions
diff --git a/ansible/roles/install_dpdk_shared/defaults/main.yml b/ansible/roles/install_dpdk_shared/defaults/main.yml new file mode 100644 index 000000000..fe2172401 --- /dev/null +++ b/ansible/roles/install_dpdk_shared/defaults/main.yml @@ -0,0 +1,2 @@ +--- +INSTALL_BIN_PATH: "/opt/nsb_bin"
\ No newline at end of file diff --git a/ansible/roles/install_dpdk_shared/tasks/Debian.yml b/ansible/roles/install_dpdk_shared/tasks/Debian.yml new file mode 100755 index 000000000..c77e4f96a --- /dev/null +++ b/ansible/roles/install_dpdk_shared/tasks/Debian.yml @@ -0,0 +1,22 @@ +# Copyright (c) 2017 Intel Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +--- +- name: Install DPDK build dependencies + action: "{{ ansible_pkg_mgr }} name={{ item }} state=present" + with_items: + - libpcap-dev + +- name: Install kernel headers + action: "{{ ansible_pkg_mgr }} name=linux-headers-{{ dpdk_kernel }} state=present" + diff --git a/ansible/roles/install_dpdk_shared/tasks/RedHat.yml b/ansible/roles/install_dpdk_shared/tasks/RedHat.yml new file mode 100644 index 000000000..ae66faa04 --- /dev/null +++ b/ansible/roles/install_dpdk_shared/tasks/RedHat.yml @@ -0,0 +1,29 @@ +# Copyright (c) 2017 Intel Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +--- +- name: Install DPDK build dependencies + action: "{{ ansible_pkg_mgr }} name={{ item }} state=present" + with_items: + - libpcap-devel + +# Do this before installing kernel headers +# example: +# kernel-headers-3.10.0-514.2.2.el7.x86_64 for kernel 3.10.0-514.el7.x86_64 +- name: Adjust dpdk_kernel to be match an RPM, remove el7.x86_64 + set_fact: + rpm_kernel: "{{ dpdk_kernel|regex_replace('[.]el\\d+\\.x86_64', '') }}" + +- name: Install kernel headers +# use rpm wildcard + action: "{{ ansible_pkg_mgr }} name=kernel-headers-{{ rpm_kernel }}* state=present" diff --git a/ansible/roles/install_dpdk_shared/tasks/main.yml b/ansible/roles/install_dpdk_shared/tasks/main.yml new file mode 100644 index 000000000..65954be04 --- /dev/null +++ b/ansible/roles/install_dpdk_shared/tasks/main.yml @@ -0,0 +1,114 @@ +# Copyright (c) 2017 Intel Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +--- +#- patch: src="{{ item }}" basedir="{{ dpdk_path }}" strip=0 +# with_fileglob: +# - "{{ local_nsb_path }}/patches/dpdk_custom_patch/rte_pipeline.patch" +# +#- patch: src="{{ item }}" basedir="{{ dpdk_path }}" strip=1 +# with_fileglob: +# - "{{ local_nsb_path }}/patches/dpdk_custom_patch/0*.patch" + +- name: set DPDK shared dir + set_fact: + dpdk_shared_path: "{{ dpdk_path }}-shared" + +- command: "cp -a {{ dpdk_path }} {{ dpdk_shared_path }}" + +- name: find kernel for image, (including chroot) + find_kernel: + kernel: "{{ ansible_kernel }}" + register: found_kernel + +# Do this before installing kernel headers +- name: Set dpdk_kernel to be the kernel we found + set_fact: + dpdk_kernel: "{{ found_kernel.kernel }}" + +- include: "{{ ansible_os_family }}.yml" + +- name: set RTE_KERNELDIR to point to found kernel + set_fact: + RTE_KERNELDIR: "/lib/modules/{{ dpdk_kernel }}/build" + +- command: make -j {{ ansible_processor_vcpus }} config T={{ dpdk_make_arch }} O={{ dpdk_make_arch }} + args: + chdir: "{{ dpdk_shared_path }}" + environment: + RTE_KERNELDIR: "{{ RTE_KERNELDIR }}" + +- name: enable RTE_PORT_STATS_COLLECT + lineinfile: + dest: "{{ dpdk_shared_path }}/{{ dpdk_make_arch }}/.config" + regexp: '^CONFIG_RTE_PORT_STATS_COLLECT=n' + line: 'CONFIG_RTE_PORT_STATS_COLLECT=y' + +- name: enable DPDK RTE_PORT_PCAP + lineinfile: + dest: "{{ dpdk_shared_path }}/{{ dpdk_make_arch }}/.config" + regexp: '^CONFIG_RTE_PORT_PCAP=n' + line: 'CONFIG_RTE_PORT_PCAP=y' + +- name: enable DPDK RTE_TABLE_STATS_COLLECT + lineinfile: + dest: "{{ dpdk_shared_path }}/{{ dpdk_make_arch }}/.config" + regexp: '^CONFIG_RTE_TABLE_STATS_COLLECT=n' + line: 'CONFIG_RTE_TABLE_STATS_COLLECT=y' + +- name: enable DPDK RTE_PIPELINE_STATS_COLLECT + lineinfile: + dest: "{{ dpdk_shared_path }}/{{ dpdk_make_arch }}/.config" + regexp: '^CONFIG_RTE_PIPELINE_STATS_COLLECT=n' + line: 'CONFIG_RTE_PIPELINE_STATS_COLLECT=y' + +# This is requied for collectd but VNFs can't use shared DPDK +- name: enable CONFIG_RTE_BUILD_SHARED_LIB + lineinfile: + dest: "{{ dpdk_shared_path }}/{{ dpdk_make_arch }}/.config" + regexp: '^CONFIG_RTE_BUILD_SHARED_LIB=n' + line: 'CONFIG_RTE_BUILD_SHARED_LIB=y' + +- name: enable DPDK CONFIG_RTE_EAL_PMD_PATH + lineinfile: + dest: "{{ dpdk_shared_path }}/{{ dpdk_make_arch }}/.config" + regexp: '^CONFIG_RTE_EAL_PMD_PATH=""' + line: 'CONFIG_RTE_EAL_PMD_PATH="{{ dpdk_pmd_path }}"' + + # no T= target for clean +- command: make -j {{ ansible_processor_vcpus }} clean O={{ dpdk_make_arch }} + args: + chdir: "{{ dpdk_shared_path }}" + environment: + RTE_KERNELDIR: "{{ RTE_KERNELDIR }}" + +# TODO: disable ASLR + +- command: make -j {{ ansible_processor_vcpus }} + args: + chdir: "{{ dpdk_shared_path }}/{{ dpdk_make_arch}}" + environment: + RTE_KERNELDIR: "{{ RTE_KERNELDIR }}" + +#- name: make install DPDK into /usr for collectd and other programs +# make: +# chdir: "{{ dpdk_shared_path }}/{{ dpdk_make_arch}}" +# target: install +# params: "T={{ RTE_TARGET }}" +## params: "prefix={{ usr_prefix }}" +# environment: +# RTE_KERNELDIR: "{{ RTE_KERNELDIR }}" +# become: yes + +# don't install module or copy dpdk-devbind + diff --git a/ansible/roles/install_dpdk_shared/vars/main.yml b/ansible/roles/install_dpdk_shared/vars/main.yml new file mode 100644 index 000000000..45bcc339b --- /dev/null +++ b/ansible/roles/install_dpdk_shared/vars/main.yml @@ -0,0 +1,9 @@ +--- +dpdk_make_arch: x86_64-native-linuxapp-gcc +dpdk_module_dir: "/lib/modules/{{ dpdk_kernel }}/extra" +hugetable_mount: /mnt/huge +dpdk_devbind: + "16.07": "{{ dpdk_path }}/tools/dpdk-devbind.py" + "17.02": "{{ dpdk_path }}/usertools/dpdk-devbind.py" + "17.04": "{{ dpdk_path }}/usertools/dpdk-devbind.py" +dpdk_pmd_path: /usr/lib/dpdk-pmd/ |