]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
ceph-volume: decrease number of `pvs` calls in `lvm list` 46753/head
authorGuillaume Abrioux <gabrioux@redhat.com>
Mon, 20 Jun 2022 11:43:43 +0000 (13:43 +0200)
committerGuillaume Abrioux <gabrioux@redhat.com>
Thu, 23 Jun 2022 07:05:48 +0000 (09:05 +0200)
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

index 44d5063ce37e09c559d4258bac5975b4f9954d1b..c16afdaa767286a198c6278defc150a8cc35fe71 100644 (file)
@@ -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)