2 # file: roles/performance_tuning/tasks/main.yaml
4 - name: Inst - Update Package Cache (APT)
9 - ansible_distribution|lower == 'ubuntu'
11 - perf-inst-prerequisites
13 - name: Inst - Machine Prerequisites
15 name: "{{ packages | flatten(levels=1) }}"
18 - perf-inst-prerequisites
20 - name: Conf - Turbo Boost
21 import_tasks: turbo_boost.yaml
23 cpu_microarchitecture == "skylake" or
24 cpu_microarchitecture == "cascadelake"
26 - perf-conf-turbo-boost
28 - name: Conf - Adjust nr_hugepages
29 # change the minimum size of the hugepage pool.
30 # 2G VPP, 4GB per VNF/CNF, 2G reserve
32 name: "vm.nr_hugepages"
33 value: "{{ sysctl.vm.nr_hugepages }}"
35 sysctl_file: "/etc/sysctl.d/90-csit.conf"
40 - name: Conf - Adjust max_map_count
41 # this file contains the maximum number of memory map areas a process
42 # may have. memory map areas are used as a side-effect of calling
43 # malloc, directly by mmap and mprotect, and also when loading shared
46 # while most applications need less than a thousand maps, certain
47 # programs, particularly malloc debuggers, may consume lots of them,
48 # e.g., up to one or two maps per allocation.
49 # must be greater than or equal to (2 * vm.nr_hugepages).
51 name: "vm.max_map_count"
52 value: "{{ sysctl.vm.nr_hugepages * 4 }}"
54 sysctl_file: "/etc/sysctl.d/90-csit.conf"
59 - name: Conf - Adjust hugetlb_shm_group
60 # hugetlb_shm_group contains group id that is allowed to create sysv
61 # shared memory segment using hugetlb page.
63 name: "vm.hugetlb_shm_group"
66 sysctl_file: "/etc/sysctl.d/90-csit.conf"
71 - name: Conf - Adjust swappiness
72 # this control is used to define how aggressive the kernel will swap
73 # memory pages. higher values will increase agressiveness, lower values
74 # decrease the amount of swap. a value of 0 instructs the kernel not to
75 # initiate swap until the amount of free and file-backed pages is less
76 # than the high water mark in a zone.
81 sysctl_file: "/etc/sysctl.d/90-csit.conf"
86 - name: Conf - Adjust shmmax
87 # shared memory max must be greator or equal to the total size of hugepages.
88 # for 2mb pages, totalhugepagesize = vm.nr_hugepages * 2 * 1024 * 1024
89 # if the existing kernel.shmmax setting (cat /sys/proc/kernel/shmmax)
90 # is greater than the calculated totalhugepagesize then set this parameter
91 # to current shmmax value.
94 value: "{{ sysctl.vm.nr_hugepages * 2 * 1024 * 1024 }}"
96 sysctl_file: "/etc/sysctl.d/90-csit.conf"
101 - name: Conf - Adjust watchdog_cpumask
102 # this value can be used to control on which cpus the watchdog may run.
103 # the default cpumask is all possible cores, but if no_hz_full is
104 # enabled in the kernel config, and cores are specified with the
105 # nohz_full= boot argument, those cores are excluded by default.
106 # offline cores can be included in this mask, and if the core is later
107 # brought online, the watchdog will be started based on the mask value.
109 # typically this value would only be touched in the nohz_full case
110 # to re-enable cores that by default were not running the watchdog,
111 # if a kernel lockup was suspected on those cores.
113 name: "kernel.watchdog_cpumask"
114 value: "{{ sysctl.kernel.watchdog_cpumask }}"
116 sysctl_file: "/etc/sysctl.d/90-csit.conf"
121 - name: Conf - Adjust randomize_va_space
122 # this option can be used to select the type of process address
123 # space randomization that is used in the system, for architectures
124 # that support this feature.
125 # 0 - turn the process address space randomization off. this is the
126 # default for architectures that do not support this feature anyways,
127 # and kernels that are booted with the "norandmaps" parameter.
129 name: "kernel.randomize_va_space"
132 sysctl_file: "/etc/sysctl.d/90-csit.conf"
137 - name: Conf - Cpufrequtils
139 src: "files/cpufrequtils"
140 dest: "/etc/default/cpufrequtils"
145 - perf-conf-cpufrequtils
147 - name: Conf - Irqbalance
149 src: "files/irqbalance"
150 dest: "/etc/default/irqbalance"
155 - perf-conf-irqbalance
157 - name: Conf - Set Ondemand Service To Disable
164 - name: Conf - Kernel Parameters
166 path: "/etc/default/grub"
168 regexp: "^GRUB_CMDLINE_LINUX="
169 line: "GRUB_CMDLINE_LINUX=\"{% for key, value in grub.items() %}{% if value is sameas true %}{{key}} {% else %}{{key}}={{value}} {% endif %}{% endfor %}\""
175 - meta: flush_handlers
177 - name: Conf - Load Kernel Modules By Default
187 - perf-conf-load-kernel-modules
189 - meta: flush_handlers