2 # file: roles/performance_tuning/tasks/main.yaml
4 - Name: Update package cache (apt)
9 - ansible_distribution|lower == 'ubuntu'
11 - name: Performance Tuning - Install Distribution - Release - Machine Prerequisites
13 name: "{{ packages | flatten(levels=1) }}"
16 - install-dependencies
18 - name: Performance Tuning - Distribution - release - machine optimizations
19 include_tasks: '{{ ansible_distribution|lower }}_{{ ansible_distribution_release }}.yaml'
21 - machine-optimizations
23 - name: Performance Tuning - Configure {{ ansible_machine }} Kernel Parameters
25 path: "/etc/default/grub"
27 regexp: "^GRUB_CMDLINE_LINUX="
28 line: "GRUB_CMDLINE_LINUX=\"{% for key, value in grub.items() %}{% if value %}{{key}}={{value}} {% else %}{{key}} {% endif %}{% endfor %}\""
34 - meta: flush_handlers
36 - name: Performance Tuning - Turbo Boost
37 import_tasks: turbo_boost.yaml
39 cpu_microarchitecture == "skylake" or
40 cpu_microarchitecture == "cascadelake"
44 - name: Performance Tuning - Adjust nr_hugepages
45 # change the minimum size of the hugepage pool.
46 # 2G VPP, 4GB per VNF/CNF, 2G reserve
48 name: "vm.nr_hugepages"
49 value: "{{ sysctl.vm.nr_hugepages }}"
51 sysctl_file: "/etc/sysctl.d/90-csit.conf"
56 - name: Performance Tuning - Adjust max_map_count
57 # this file contains the maximum number of memory map areas a process
58 # may have. memory map areas are used as a side-effect of calling
59 # malloc, directly by mmap and mprotect, and also when loading shared
62 # while most applications need less than a thousand maps, certain
63 # programs, particularly malloc debuggers, may consume lots of them,
64 # e.g., up to one or two maps per allocation.
65 # must be greater than or equal to (2 * vm.nr_hugepages).
67 name: "vm.max_map_count"
68 value: "{{ sysctl.vm.nr_hugepages * 4 }}"
70 sysctl_file: "/etc/sysctl.d/90-csit.conf"
75 - name: Performance Tuning - Adjust hugetlb_shm_group
76 # hugetlb_shm_group contains group id that is allowed to create sysv
77 # shared memory segment using hugetlb page.
79 name: "vm.hugetlb_shm_group"
82 sysctl_file: "/etc/sysctl.d/90-csit.conf"
87 - name: Performance Tuning - Adjust swappiness
88 # this control is used to define how aggressive the kernel will swap
89 # memory pages. higher values will increase agressiveness, lower values
90 # decrease the amount of swap. a value of 0 instructs the kernel not to
91 # initiate swap until the amount of free and file-backed pages is less
92 # than the high water mark in a zone.
97 sysctl_file: "/etc/sysctl.d/90-csit.conf"
102 - name: Performance Tuning - Adjust shmmax
103 # shared memory max must be greator or equal to the total size of hugepages.
104 # for 2mb pages, totalhugepagesize = vm.nr_hugepages * 2 * 1024 * 1024
105 # if the existing kernel.shmmax setting (cat /sys/proc/kernel/shmmax)
106 # is greater than the calculated totalhugepagesize then set this parameter
107 # to current shmmax value.
109 name: "kernel.shmmax"
110 value: "{{ sysctl.vm.nr_hugepages * 2 * 1024 * 1024 }}"
112 sysctl_file: "/etc/sysctl.d/90-csit.conf"
117 - name: Performance Tuning - Adjust watchdog_cpumask
118 # this value can be used to control on which cpus the watchdog may run.
119 # the default cpumask is all possible cores, but if no_hz_full is
120 # enabled in the kernel config, and cores are specified with the
121 # nohz_full= boot argument, those cores are excluded by default.
122 # offline cores can be included in this mask, and if the core is later
123 # brought online, the watchdog will be started based on the mask value.
125 # typically this value would only be touched in the nohz_full case
126 # to re-enable cores that by default were not running the watchdog,
127 # if a kernel lockup was suspected on those cores.
129 name: "kernel.watchdog_cpumask"
130 value: "{{ sysctl.kernel.watchdog_cpumask }}"
132 sysctl_file: "/etc/sysctl.d/90-csit.conf"
137 - name: Performance Tuning - Adjust randomize_va_space
138 # this option can be used to select the type of process address
139 # space randomization that is used in the system, for architectures
140 # that support this feature.
141 # 0 - turn the process address space randomization off. this is the
142 # default for architectures that do not support this feature anyways,
143 # and kernels that are booted with the "norandmaps" parameter.
145 name: "kernel.randomize_va_space"
148 sysctl_file: "/etc/sysctl.d/90-csit.conf"
153 - name: Performance Tuning - Copy Cpufrequtils File
155 src: "files/cpufrequtils"
156 dest: "/etc/default/cpufrequtils"
163 - name: Performance Tuning - Copy Irqbalance File
165 src: "files/irqbalance"
166 dest: "/etc/default/irqbalance"
175 - name: Performance Tuning - Set Ondemand Service To Disable
182 - name: Performance Tuning - Load Kernel Modules By Default
190 - load-kernel-modules
192 - meta: flush_handlers