add stop-gap to fix compat with CPUs not supporting SSE 4.1

Some of our users ran into issues with running Ceph on older CPU
architectures [1]. This is apparently due to a bug in gf-complete
paired with gcc-12, that
leads to SSE 4.1 instructions being emitted in the general code,
rather than dynamically dispatching functions using those
instructions. Those binaries then break on older CPUs that do not
support this instruction set.

I've ran some benchmarks with `rados bench` against our last release
(18.2.0-pve2) and this new version. The commands were taken from our
latest Ceph benchmarking paper [2]. The results showed that this patch
does not lead to performance regressions on newer hardware.

                  18.2.0-pve2    this patch
Read EC           4574.28        4651.95
Write EC          3739.59        3773.87
Read Replicated   5345.34        5568.41
Write Replicated  4123.28        4066.19
(numbers correspond to bandwidth in MB/s)

[1] https://forum.proxmox.com/threads/proxmox-8-ceph-quincy-monitor-no-longer-working-on-amd-opteron-2427.129613
[2] https://www.proxmox.com/en/downloads/proxmox-virtual-environment/documentation/proxmox-ve-ceph-benchmark-2020-09

Signed-off-by: Stefan Hanreich <s.hanreich@proxmox.com>
(cherry picked from commit 27f45121cc)
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
This commit is contained in:
Stefan Hanreich 2023-09-18 17:46:56 +02:00 committed by Thomas Lamprecht
parent 0c5de8e1f3
commit e26c9c9604
2 changed files with 33 additions and 0 deletions

View File

@ -0,0 +1,32 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Stefan Hanreich <s.hanreich@proxmox.com>
Date: Fri, 15 Sep 2023 16:55:02 +0200
Subject: [PATCH] fix compatibility with CPUs not supporting SSE 4.1
instructions
Building without -O1 causes gcc-12 to emit SSE 4.1 instructions which
are not supported on older CPU architectures. This leads to Ceph
crashing on older CPU architectures. -O1 causes those optimizations to
be implemented manually via runtime dispatch.
Signed-off-by: Stefan Hanreich <s.hanreich@proxmox.com>
---
src/erasure-code/jerasure/CMakeLists.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/erasure-code/jerasure/CMakeLists.txt b/src/erasure-code/jerasure/CMakeLists.txt
index f9cd22e11..b0a355235 100644
--- a/src/erasure-code/jerasure/CMakeLists.txt
+++ b/src/erasure-code/jerasure/CMakeLists.txt
@@ -67,7 +67,7 @@ endif()
add_library(gf-complete_objs OBJECT ${gf-complete_srcs})
set_target_properties(gf-complete_objs PROPERTIES
- COMPILE_FLAGS "${SIMD_COMPILE_FLAGS}")
+ COMPILE_FLAGS "${SIMD_COMPILE_FLAGS} -O1")
set_target_properties(gf-complete_objs PROPERTIES
COMPILE_DEFINITIONS "${GF_COMPILE_FLAGS}")
--
2.39.2

View File

@ -9,6 +9,7 @@
0013-d-control-move-python-dependencies-over-to-python3.patch
0014-fix-service-ordering-avoid-Before-remote-fs-pre.targ.patch
0015-d-control-drop-outdated-build-dependencies-and-bump-.patch
0015-fix-compatibility-with-CPUs-not-supporting-SSE-4.1-i.patch
0016-d-rules-fix-no-restart-on-upgrade.patch
0017-python3.10-pep-620.patch
0020-fix-4759-run-ceph-crash-daemon-with-www-data-group-f.patch