From ec05ef512b63bdb37d7081259e6d687ab68ebdb4 Mon Sep 17 00:00:00 2001 From: yangxiaoliang Date: Thu, 25 Aug 2022 10:43:18 +0800 Subject: [PATCH] ceph-volume: decrease number of pvs calls in lvm list --- ...ease-number-of-pvs-calls-in-lvm-list.patch | 66 +++++++++++++++++++ ceph.spec | 6 +- 2 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 0006-ceph-volume-decrease-number-of-pvs-calls-in-lvm-list.patch diff --git a/0006-ceph-volume-decrease-number-of-pvs-calls-in-lvm-list.patch b/0006-ceph-volume-decrease-number-of-pvs-calls-in-lvm-list.patch new file mode 100644 index 0000000..f29a576 --- /dev/null +++ b/0006-ceph-volume-decrease-number-of-pvs-calls-in-lvm-list.patch @@ -0,0 +1,66 @@ +From 1a38ea3b96dbe8fd2f2fca8ee9a501ef1423027f Mon Sep 17 00:00:00 2001 +From: Guillaume Abrioux +Date: Mon, 20 Jun 2022 13:43:43 +0200 +Subject: [PATCH] ceph-volume: decrease number of `pvs` calls in `lvm list` + +current implementation of `List.create_report()` implies a lot of calls +to `pvs` process. This could be avoided. + +current implementation: +``` +>>> import timeit +>>> from ceph_volume.devices.lvm.listing import List +>>> timeit.timeit(List([]).main, number=1000) + +... + +93.03700458299136 +``` + +new implementation: + +``` +>>> import timeit +>>> from ceph_volume.devices.lvm.listing import List +>>> timeit.timeit(List([]).main, number=1000) + +... + +62.16391600697534 +``` + +In this example, it improves performance by ~30% + +Fixes: https://tracker.ceph.com/issues/56127 + +Signed-off-by: Guillaume Abrioux +--- + src/ceph-volume/ceph_volume/devices/lvm/listing.py | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/src/ceph-volume/ceph_volume/devices/lvm/listing.py b/src/ceph-volume/ceph_volume/devices/lvm/listing.py +index 44d5063ce37..c16afdaa767 100644 +--- a/src/ceph-volume/ceph_volume/devices/lvm/listing.py ++++ b/src/ceph-volume/ceph_volume/devices/lvm/listing.py +@@ -101,6 +101,8 @@ class List(object): + + report = {} + ++ pvs = api.get_pvs() ++ + for lv in lvs: + if not api.is_ceph_device(lv): + continue +@@ -109,8 +111,7 @@ class List(object): + report.setdefault(osd_id, []) + lv_report = lv.as_dict() + +- pvs = api.get_pvs(filters={'lv_uuid': lv.lv_uuid}) +- lv_report['devices'] = [pv.name for pv in pvs] if pvs else [] ++ lv_report['devices'] = [pv.name for pv in pvs if pv.lv_uuid == lv.lv_uuid] if pvs else [] + report[osd_id].append(lv_report) + + phys_devs = self.create_report_non_lv_device(lv) +-- +2.33.0 + diff --git a/ceph.spec b/ceph.spec index f412f76..2969bc4 100644 --- a/ceph.spec +++ b/ceph.spec @@ -125,7 +125,7 @@ ################################################################################# Name: ceph Version: 16.2.7 -Release: 4 +Release: 5 %if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler} Epoch: 2 %endif @@ -148,6 +148,7 @@ Patch2: 0002-enable-install-deps-in-openEuler.patch Patch3: 0003-isa-l-update.patch Patch4: 0004-cmake-add-support-python-3.10.patch Patch5: 0005-ceph-volume-lvm-api-function-no-undefined.patch +Patch6: 0006-ceph-volume-decrease-number-of-pvs-calls-in-lvm-list.patch %if 0%{?suse_version} # _insert_obs_source_lines_here ExclusiveArch: x86_64 aarch64 ppc64le s390x @@ -2486,6 +2487,9 @@ exit 0 %config %{_sysconfdir}/prometheus/ceph/ceph_default_alerts.yml %changelog +* Thu Aug 25 2022 yangxiaoliang - 2:16.2.7-5 +- fix ceph-volume lvm list calls many times pvs + * Mon Jul 18 2022 yangxiaoliang - 2:16.2.7-4 - fix ceph-volume lvm api function undefined error