Automatically tuning OSD memory
The OSD daemons adjust the memory consumption based on the
osd_memory_target configuration option.
The option osd_memory_target sets OSD memory based upon the available RAM in the
system.
Syntax
ceph config set osd osd_memory_target_autotune true
cephadm starts with a fraction mgr/cephadm/autotune_memory_target_ratio, which
defaults to 0.7 of the total RAM in the system, subtract off any memory consumed by
non-autotuned daemons such as non-OSDS and for OSDs for which
osd_memory_target_autotune is false, and then divide by the remaining OSDs.
By default, autotune_memory_target_ratio is 0.2 for hyper-converged
infrastructure and 0.7 for other environments.
The osd_memory_target parameter is calculated as follows:
Syntax
osd_memory_target = TOTAL_RAM_OF_THE_OSD_NODE (in Bytes) * (autotune_memory_target_ratio) / NUMBER_OF_OSDS_IN_THE_OSD_NODE - (SPACE_ALLOCATED_FOR_OTHER_DAEMONS (in Bytes))
SPACE_ALLOCATED_FOR_OTHER_DAEMONS may optionally include the following daemon space allocations:
-
Alertmanager: 1 GB
-
Grafana: 1 GB
-
Ceph Manager: 4 GB
-
Ceph Monitor: 2 GB
-
Node-exporter: 1 GB
-
Prometheus: 1 GB
For example, if a node has 24 OSDs and has 251 GB RAM space, then
osd_memory_target is 7860684936.
The final targets are reflected in the configuration database with options. You can view the
limits and the current memory consumed by each daemon from the ceph orch ps output
under MEM LIMIT column.
The default setting of osd_memory_target_autotune
true is unsuitable for hyperconverged infrastructures where compute and Ceph
storage services are colocated. In a hyperconverged infrastructure, the
autotune_memory_target_ratio can be set to 0.2 to reduce the
memory consumption of Ceph.
[ceph: root@host01 /]# ceph config set mgr mgr/cephadm/autotune_memory_target_ratio 0.2
You can manually set a specific memory target for an OSD in the storage cluster.
Example
[ceph: root@host01 /]# ceph config set osd.123 osd_memory_target 7860684936
You can manually set a specific memory target for an OSD host in the storage cluster.
Syntax
ceph config set osd/host:_HOSTNAME_ osd_memory_target _TARGET_BYTES_
Example
[ceph: root@host01 /]# ceph config set osd/host:host01 osd_memory_target 1000000000
osd_memory_target_autotune overwrites existing manual OSD memory
target settings. To prevent daemon memory from being tuned even when the
osd_memory_target_autotune option or other similar options are enabled, set the
_no_autotune_memory label on the host.Syntax
ceph orch host label add HOSTNAME _no_autotune_memory
You can exclude an OSD from memory autotuning by disabling the autotune option and setting a specific memory target.
Example
[ceph: root@host01 /]# ceph config set osd.123 osd_memory_target_autotune false
[ceph: root@host01 /]# ceph config set osd.123 osd_memory_target 16G