rocky_linux_8/mpi-tuning-ansible.yaml (108 lines of code) (raw):

# Copyright 2020 Google LLC # # 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: Limit to Rocky Linux 8 hosts hosts: all tasks: - name: group hosts based on their OS group_by: key: os_{{ ansible_facts['distribution'] }}_{{ ansible_facts['distribution_major_version'] }} tags: [ always, never ] - name: GCP system optimization for HPC hosts: os_Rocky_Linux_8 become: yes vars: grub_default: /etc/default/grub ncpus: "{{ansible_processor_cores * ansible_processor_count}}" sysctl_config: net.ipv4.tcp_rmem: 4096 87380 16777216 net.ipv4.tcp_wmem: 4096 16384 16777216 tasks: - name: Adds noht if not present lineinfile: path: "{{grub_default}}" regexp: '^GRUB_CMDLINE_LINUX="(((?!noht).)*)"$' line: 'GRUB_CMDLINE_LINUX="\1 noht"' backrefs: yes notify: - write_grub tags: [ nosmt, never] - name: Adds nosmt if not present lineinfile: path: "{{grub_default}}" regexp: '^GRUB_CMDLINE_LINUX="(((?!nosmt).)*)"$' line: 'GRUB_CMDLINE_LINUX="\1 nosmt"' backrefs: yes notify: - write_grub tags: [ nosmt, never ] - name: Adds nr_cpus={{ncpus}} if not present lineinfile: path: "{{grub_default}}" regexp: '^GRUB_CMDLINE_LINUX="(((?!nr_cpus=).)*)"$' line: 'GRUB_CMDLINE_LINUX="\1 nr_cpus={{ncpus}}"' backrefs: yes notify: - write_grub tags: [ nosmt, never ] - name: Set tuned-adm profile to network-latency shell: tuned-adm profile network-latency || /bin/true tags: [ networklatency, never] - name: Adjust TCP memory sysctl: name: '{{ item.key }}' value: '{{ item.value }}' sysctl_set: yes state: present reload: yes ignoreerrors: yes with_dict: '{{ sysctl_config }}' tags: [ tcpmem, never ] - name: configure system limits pam_limits: domain: '*' limit_type: "{{item.limit_type}}" limit_item: "{{item.limit_item}}" value: "{{item.value}}" with_items: - { limit_type: '-', limit_item: 'nproc', value: 'unlimited' } - { limit_type: '-', limit_item: 'memlock', value: 'unlimited' } - { limit_type: '-', limit_item: 'stack', value: 'unlimited' } - { limit_type: '-', limit_item: 'nofile', value: 1048576 } - { limit_type: '-', limit_item: 'cpu', value: 'unlimited' } - { limit_type: '-', limit_item: 'rtprio', value: unlimited } tags: [ limits, never ] - name: Disable SELinux service selinux: state: disabled register: disablingSE notify: Reboot tags: [ noselinux, never ] - name: Disable firewalld service systemd: name: firewalld state: stopped enabled: no masked: yes tags: [ nofirewalld, never ] - name: Remove CPU vulnerabilities mitigations lineinfile: path: "{{grub_default}}" regexp: '^GRUB_CMDLINE_LINUX="(((?!spectre_v2=off nopti spec_store_bypass_disable=off).)*)"$' line: 'GRUB_CMDLINE_LINUX="\1 spectre_v2=off nopti spec_store_bypass_disable=off"' backrefs: yes notify: write_grub tags: [ nomitigation, never ] handlers: - name: Determine if using UEFI set_fact: grub_config: "{{ (ansible_mounts | selectattr('mount', 'contains', '/boot/efi') | list | length > 0) | ternary( '/etc/grub2-efi.cfg', '/etc/grub2.cfg' ) }}" listen: write_grub - name: Get config path for grub command: readlink -e {{grub_config}} register: grub_file listen: write_grub - name: Write grub configuration command: grub2-mkconfig -o {{ grub_file.stdout }} listen: write_grub notify: Reboot - name: Reboot Required reboot: listen: Reboot