From f0b0f340f8f7a6a150cbe5eea3c699090bb2ebeb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Han?= Date: Tue, 16 Apr 2019 22:24:08 +0200 Subject: [PATCH] ceph: osd, do not auto tune osd-memory-target MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit As per https://github.com/ceph/ceph/pull/26856 Ceph tunes the value of osd-memory-target when running the OSD process so there is no need to enforce it. We also set a safety factor to that value which has been calculated by the Ceph eng/perf team. Without this factor, the OSD will get OOM killed since it is consuming memory for other purposes too. Signed-off-by: Sébastien Han --- pkg/operator/ceph/cluster/osd/spec.go | 33 +++++++++++++++------------ 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/pkg/operator/ceph/cluster/osd/spec.go b/pkg/operator/ceph/cluster/osd/spec.go index 078047d72..ba1af13d1 100644 --- a/pkg/operator/ceph/cluster/osd/spec.go +++ b/pkg/operator/ceph/cluster/osd/spec.go @@ -39,16 +39,17 @@ import ( ) const ( - dataDirsEnvVarName = "ROOK_DATA_DIRECTORIES" - osdStoreEnvVarName = "ROOK_OSD_STORE" - osdDatabaseSizeEnvVarName = "ROOK_OSD_DATABASE_SIZE" - osdWalSizeEnvVarName = "ROOK_OSD_WAL_SIZE" - osdJournalSizeEnvVarName = "ROOK_OSD_JOURNAL_SIZE" - osdsPerDeviceEnvVarName = "ROOK_OSDS_PER_DEVICE" - encryptedDeviceEnvVarName = "ROOK_ENCRYPTED_DEVICE" - osdMetadataDeviceEnvVarName = "ROOK_METADATA_DEVICE" - rookBinariesMountPath = "/rook" - rookBinariesVolumeName = "rook-binaries" + dataDirsEnvVarName = "ROOK_DATA_DIRECTORIES" + osdStoreEnvVarName = "ROOK_OSD_STORE" + osdDatabaseSizeEnvVarName = "ROOK_OSD_DATABASE_SIZE" + osdWalSizeEnvVarName = "ROOK_OSD_WAL_SIZE" + osdJournalSizeEnvVarName = "ROOK_OSD_JOURNAL_SIZE" + osdsPerDeviceEnvVarName = "ROOK_OSDS_PER_DEVICE" + encryptedDeviceEnvVarName = "ROOK_ENCRYPTED_DEVICE" + osdMetadataDeviceEnvVarName = "ROOK_METADATA_DEVICE" + rookBinariesMountPath = "/rook" + rookBinariesVolumeName = "rook-binaries" + osdMemoryTargetSafetyFactor float32 = 0.8 ) func (c *Cluster) makeJob(nodeName string, devices []rookalpha.Device, @@ -156,8 +157,10 @@ func (c *Cluster) makeDeployment(nodeName string, selection rookalpha.Selection, // Set osd memory target to the best appropriate value if !osd.IsFileStore { - if !c.resources.Limits.Memory().IsZero() { - commonArgs = append(commonArgs, "--osd-memory-target", strconv.Itoa(int(c.resources.Limits.Memory().Value()))) + // As of Nautilus Ceph auto-tunes its osd_memory_target on the fly so we don't need to force it + if !c.clusterInfo.CephVersion.IsAtLeastNautilus() && !c.resources.Limits.Memory().IsZero() { + osdMemoryTargetValue := float32(c.resources.Limits.Memory().Value()) * osdMemoryTargetSafetyFactor + commonArgs = append(commonArgs, fmt.Sprintf("--osd-memory-target=%f", osdMemoryTargetValue)) } } @@ -208,8 +211,10 @@ func (c *Cluster) makeDeployment(nodeName string, selection rookalpha.Selection, // Set osd memory target to the best appropriate value if !osd.IsFileStore { - if !c.resources.Limits.Memory().IsZero() { - args = append(args, "--osd-memory-target", strconv.Itoa(int(c.resources.Limits.Memory().Value()))) + // As of Nautilus Ceph auto-tunes its osd_memory_target on the fly so we don't need to force it + if !c.clusterInfo.CephVersion.IsAtLeastNautilus() && !c.resources.Limits.Memory().IsZero() { + osdMemoryTargetValue := float32(c.resources.Limits.Memory().Value()) * osdMemoryTargetSafetyFactor + commonArgs = append(commonArgs, fmt.Sprintf("--osd-memory-target=%f", osdMemoryTargetValue)) } }