ceph-volume: decrease number of pvs calls in lvm list

This commit is contained in:
yangxiaoliang 2022-08-25 10:43:18 +08:00
parent e38a529796
commit ec05ef512b
2 changed files with 71 additions and 1 deletions

View File

@ -0,0 +1,66 @@
From 1a38ea3b96dbe8fd2f2fca8ee9a501ef1423027f Mon Sep 17 00:00:00 2001
From: Guillaume Abrioux <gabrioux@redhat.com>
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 <gabrioux@redhat.com>
---
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

View File

@ -125,7 +125,7 @@
################################################################################# #################################################################################
Name: ceph Name: ceph
Version: 16.2.7 Version: 16.2.7
Release: 4 Release: 5
%if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler} %if 0%{?fedora} || 0%{?rhel} || 0%{?openEuler}
Epoch: 2 Epoch: 2
%endif %endif
@ -148,6 +148,7 @@ Patch2: 0002-enable-install-deps-in-openEuler.patch
Patch3: 0003-isa-l-update.patch Patch3: 0003-isa-l-update.patch
Patch4: 0004-cmake-add-support-python-3.10.patch Patch4: 0004-cmake-add-support-python-3.10.patch
Patch5: 0005-ceph-volume-lvm-api-function-no-undefined.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} %if 0%{?suse_version}
# _insert_obs_source_lines_here # _insert_obs_source_lines_here
ExclusiveArch: x86_64 aarch64 ppc64le s390x ExclusiveArch: x86_64 aarch64 ppc64le s390x
@ -2486,6 +2487,9 @@ exit 0
%config %{_sysconfdir}/prometheus/ceph/ceph_default_alerts.yml %config %{_sysconfdir}/prometheus/ceph/ceph_default_alerts.yml
%changelog %changelog
* Thu Aug 25 2022 yangxiaoliang <yangxiaoliang07@163.com> - 2:16.2.7-5
- fix ceph-volume lvm list calls many times pvs
* Mon Jul 18 2022 yangxiaoliang <yangxiaoliang07@163.com> - 2:16.2.7-4 * Mon Jul 18 2022 yangxiaoliang <yangxiaoliang07@163.com> - 2:16.2.7-4
- fix ceph-volume lvm api function undefined error - fix ceph-volume lvm api function undefined error