]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/PG: Add helper method to get the average size of objects in a PG.
authorSridhar Seshasayee <sseshasa@redhat.com>
Mon, 20 Nov 2023 12:46:31 +0000 (18:16 +0530)
committerSridhar Seshasayee <sseshasa@redhat.com>
Fri, 24 Nov 2023 14:54:35 +0000 (20:24 +0530)
Factor out the code in PG::queue_recovery() that determines the average
object size in a PG to PG::get_average_object_size(). This is used to
determine the cost of a background operation for e.g., recovery,
snaptrim in case mClock scheduler is employed.

Signed-off-by: Sridhar Seshasayee <sseshasa@redhat.com>
src/osd/PG.cc
src/osd/PG.h

index d2f97a129a241336ea91d2d3f35fa450607b7c62..11af6c2b3ca8e69a40133885ab9cd85196f6590a 100644 (file)
@@ -420,15 +420,7 @@ void PG::queue_recovery()
     dout(10) << "queue_recovery -- queuing" << dendl;
     recovery_queued = true;
     // Let cost per object be the average object size
-    auto num_bytes = static_cast<uint64_t>(
-      std::max<int64_t>(
-       0, // ensure bytes is non-negative
-       info.stats.stats.sum.num_bytes));
-    auto num_objects = static_cast<uint64_t>(
-      std::max<int64_t>(
-       1, // ensure objects is non-negative and non-zero
-       info.stats.stats.sum.num_objects));
-    uint64_t cost_per_object = std::max<uint64_t>(num_bytes / num_objects, 1);
+    uint64_t cost_per_object = get_average_object_size();
     osd->queue_for_recovery(
       this, cost_per_object, recovery_state.get_recovery_op_priority()
     );
index 2e82e74ab0127a466bc3f83c64e11063ada7cfec..0cfd33d484ee1e9c89a5391f4f75bcb4fcd45371 100644 (file)
@@ -1024,6 +1024,19 @@ public:
     return num_bytes;
   }
 
+  uint64_t get_average_object_size() {
+    ceph_assert(ceph_mutex_is_locked_by_me(_lock));
+    auto num_bytes = static_cast<uint64_t>(
+      std::max<int64_t>(
+        0, // ensure bytes is non-negative
+        info.stats.stats.sum.num_bytes));
+    auto num_objects = static_cast<uint64_t>(
+      std::max<int64_t>(
+        1, // ensure objects is non-negative and non-zero
+        info.stats.stats.sum.num_objects));
+    return std::max<uint64_t>(num_bytes / num_objects, 1);
+  }
+
 protected:
 
   /*