Setting sysctl values#
By default, TPA sets various sysctl values on target instances, and
includes them in /etc/sysctl.conf so that they persist across
reboots.
You can optionally specify your own values in sysctl_values :
cluster_vars:
sysctl_values:
kernel.core_pattern: core.%e.%p.%t
vm.dirty_bytes: 4294967296
vm.zone_reclaim_mode: 0
Any values you specify will take precedence over TPA’s default values
for that variable (if any). The settings will first be added to
sysctl.conf line-by-line, and finally loaded with sysctl -p .
Docker and lxd instances do not support setting sysctls, so TPA will skip this step altogether for those platforms.
Hugepages#
By default, TPA reserves hugepages of the architecture’s default size
(2MB on x86_64) for Postgres to use for shared_buffers . It does
this by adding hugepages=N to the kernel command line and writing
vm.nr_hugepages = N to /etc/sysctl.conf .
If you want Postgres to use a larger hugepage size (typically 1GB on
x86_64), set huge_page_size to a Postgres-style memory string:
instances:
- Name: primary
vars:
huge_page_size: 1GB
When huge_page_size is set, TPA will:
reserve pages of that size on the kernel command line, e.g.
hugepagesz=1G hugepages=N;omit
vm.nr_hugepagesfrom/etc/sysctl.conf(that sysctl only ever applies to the architecture’s default-size pool, and is silently ineffective for any other size); andset the
huge_page_sizeGUC inpostgresql.confso Postgres uses pages from the chosen pool.
It is almost always right to set huge_page_size on individual
Postgres instances rather than in cluster_vars : any reservation
made on the kernel command line is taken out of normal memory at boot,
so a Barman server or other non-Postgres instance in the same cluster
does not want the same allocation as a Postgres node.
By default, TPA calculates the number of hugepages to reserve as
shared_buffers plus 3% of total RAM, divided by the hugepage size.
You can override this calculation by setting nr_hugepages directly:
instances:
- Name: primary
vars:
huge_page_size: 1GB
nr_hugepages: 16
Note
For backwards compatibility, an existing sysctl_values['vm.nr_hugepages'] is honoured as the page count when nr_hugepages is not set explicitly.
By default, TPA will set transparent_hugepage to “never” on the kernel
command line and also install a script, /etc/tpa/rc.local , to set
it at boot-time via the sys filesystem. To use a different setting,
set transparent_hugepage to always or madvise in an
instances vars or in cluster_vars to control all instances.