diff options
author | Stepan Andrushko <stepanx.andrushko@intel.com> | 2018-10-05 21:42:33 +0300 |
---|---|---|
committer | Stepan Andrushko <stepanx.andrushko@intel.com> | 2019-02-06 18:40:55 +0200 |
commit | 4c72b415a9689986fede6775d31af67980ef7aaa (patch) | |
tree | 7793f0e81dcd278ea933f5c85e58fa12a135a22f /ansible | |
parent | 88c5dda9712afc71742b164905f21cfff45926fa (diff) |
Add CPU isolation support for Yardstick NSB setup
Add support to define CPU isolation in grub by using NSB setup script.
List of CPU's to be isolated is not used by default and is defined in
install-inventory.ini.
Warning: reboot is required to apply CPU isolation to grub.
JIRA: YARDSTICK-1467
Change-Id: I54ffa925a8f3059180d17ff4f1c41ff6e0f12066
Signed-off-by: Stepan Andrushko <stepanx.andrushko@intel.com>
Diffstat (limited to 'ansible')
-rw-r--r-- | ansible/install-inventory.ini | 7 | ||||
-rw-r--r-- | ansible/install.yaml | 1 | ||||
-rw-r--r-- | ansible/roles/enable_cpu_isolation_on_boot/defaults/main.yml | 21 | ||||
-rw-r--r-- | ansible/roles/enable_cpu_isolation_on_boot/tasks/main.yml | 59 | ||||
-rw-r--r-- | ansible/ubuntu_server_baremetal_deploy_samplevnfs.yml | 1 |
5 files changed, 88 insertions, 1 deletions
diff --git a/ansible/install-inventory.ini b/ansible/install-inventory.ini index d0a8ef927..bcd57db65 100644 --- a/ansible/install-inventory.ini +++ b/ansible/install-inventory.ini @@ -25,4 +25,9 @@ ubuntu_archive={"amd64": "http://archive.ubuntu.com/ubuntu/", "arm64": "http://p # path_to_img=/tmp/workspace/yardstick-image.img # Uncomment credentials below if needed # ansible_user=root -# ansible_pass=root +# ansible_ssh_pass=root + +# List of CPUs to be isolated (not used by default) +# Grub line will be extended with: "isolcpus=<ISOL_CPUS> nohz=on nohz_full=<ISOL_CPUS> rcu_nocbs=1<ISOL_CPUS>" +# ISOL_CPUS=2-27,30-55 # physical cpu's for all NUMA nodes, four cpu's reserved for kernel +# ISOL_CPUS=2-27,58-83 # physical cpu's for first NUMA node, four cpu's reserved for kernel diff --git a/ansible/install.yaml b/ansible/install.yaml index 6146c7f19..847f01c57 100644 --- a/ansible/install.yaml +++ b/ansible/install.yaml @@ -67,6 +67,7 @@ # can't update grub in chroot/docker - enable_hugepages_on_boot - enable_iommu_on_boot + - enable_cpu_isolation_on_boot # needed for collectd plugins - increase_open_file_limits - install_image_dependencies diff --git a/ansible/roles/enable_cpu_isolation_on_boot/defaults/main.yml b/ansible/roles/enable_cpu_isolation_on_boot/defaults/main.yml new file mode 100644 index 000000000..37c3fd8e1 --- /dev/null +++ b/ansible/roles/enable_cpu_isolation_on_boot/defaults/main.yml @@ -0,0 +1,21 @@ +# Copyright (c) 2018 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. +--- +grub_file: "/etc/default/grub" +isolcpus_help_string: ' # added by Yardstick ansible isolcpus role' +isolcpu_params: " isolcpus={{ ISOL_CPUS }} nohz=on nohz_full={{ ISOL_CPUS }} rcu_nocbs={{ ISOL_CPUS }}" +enable_isolcpu: 'GRUB_CMDLINE_LINUX="$GRUB_CMDLINE_LINUX{{ isolcpu_params }}"' +update_grub: + Debian: "update-grub2" + RedHat: "grub2-mkconfig -o /boot/grub2/grub.cfg" diff --git a/ansible/roles/enable_cpu_isolation_on_boot/tasks/main.yml b/ansible/roles/enable_cpu_isolation_on_boot/tasks/main.yml new file mode 100644 index 000000000..b41a2b307 --- /dev/null +++ b/ansible/roles/enable_cpu_isolation_on_boot/tasks/main.yml @@ -0,0 +1,59 @@ +# Copyright (c) 2018 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: Check if isolcpus is set by this role in {{ grub_file}} + lineinfile: + path: "{{ grub_file }}" + regexp: '{{ isolcpus_help_string }}' + state: absent + check_mode: yes + register: is_nsb_isolcpus_role + ignore_errors: True + +- name: Check if isolcpus is set by someone else + lineinfile: + path: "{{ grub_file }}" + regexp: "isolcpus=" + state: absent + check_mode: yes + register: is_isolcpu + ignore_errors: True + +- name: Send warning that CPU isolation cannot be configured + debug: + msg: "WARNING: CPU isolation is not configured" + when: + - not is_nsb_isolcpus_role.changed and not is_isolcpu.changed + - ISOL_CPUS is not defined + +- name: Send info that CPU isolation configured by someone else + debug: + msg: "INFO: NOT modified, CPU isolation is already configured by someone." + when: + - not is_nsb_isolcpus_role.changed and is_isolcpu.changed + +- name: Add/update isolcpus when ISOL_CPUS is defined and not set at all or set by this role + lineinfile: + path: "{{ grub_file }}" + regexp: "{{ isolcpus_help_string }}" + line: '{{ enable_isolcpu }} {{ isolcpus_help_string }}' + when: + - is_nsb_isolcpus_role.changed or not is_nsb_isolcpus_role.changed and not is_isolcpu.changed + - ISOL_CPUS is defined + +- name: Update grub for bare metal usage + command: "{{ update_grub[ansible_os_family] }}" + when: + - is_nsb_isolcpus_role.changed or not is_nsb_isolcpus_role.changed and not is_isolcpu.changed + - ISOL_CPUS is defined diff --git a/ansible/ubuntu_server_baremetal_deploy_samplevnfs.yml b/ansible/ubuntu_server_baremetal_deploy_samplevnfs.yml index 4f4d7d075..8ca8650ff 100644 --- a/ansible/ubuntu_server_baremetal_deploy_samplevnfs.yml +++ b/ansible/ubuntu_server_baremetal_deploy_samplevnfs.yml @@ -27,6 +27,7 @@ # can't update grub in chroot/docker - enable_hugepages_on_boot - enable_iommu_on_boot + - enable_cpu_isolation_on_boot # needed for collectd plugins - increase_open_file_limits - install_image_dependencies |