]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
common/lockdep: introduce MAX_FOLLOWERS
authorKefu Chai <kchai@redhat.com>
Mon, 8 Mar 2021 07:34:47 +0000 (15:34 +0800)
committerKefu Chai <kchai@redhat.com>
Mon, 8 Mar 2021 13:16:35 +0000 (21:16 +0800)
before this change we use a matrix for tracking the locks and those
which are locked after acquiring the formers. where follows[a][b]
sigifies that b is acquired after a is acquired, and a and b are both
lock ids allocated in the lock_ids registry.

but since we might need to have a much large set of locks which are
acquired at the same time. but the numbers of their follower of
each of them are always much smaller. because we are not likely
to hold, for instance, 4096 locks when we still holding a lock.
actually, this might be a bug, if we actually do this.

so we can use smaller vectors for tracking the followers. and the
size of those vectors can be one or more orders of magnitude smaller
than the number of locks.

in this change, MAX_FOLLOWERS in introduced for the max number
of followers.

Signed-off-by: Kefu Chai <kchai@redhat.com>
src/common/lockdep.cc

index 687d99d4953abb4f26d8249feabeca49b6dc2199..644245d4144375a0f66101bc2fba404c00712392 100644 (file)
@@ -19,7 +19,6 @@
 
 /******* Constants **********/
 #define lockdep_dout(v) lsubdout(g_lockdep_ceph_ctx, lockdep, v)
-#define MAX_LOCKS  4096   // increase me as needed
 #define BACKTRACE_SKIP 2
 
 /******* Globals **********/
@@ -38,10 +37,12 @@ static lockdep_stopper_t lockdep_stopper;
 static ceph::unordered_map<std::string, int> lock_ids;
 static std::map<int, std::string> lock_names;
 static std::map<int, int> lock_refs;
+static constexpr size_t MAX_LOCKS = 4096;   // increase me as needed
 static std::bitset<MAX_LOCKS> free_ids; // bit set = free
 static ceph::unordered_map<pthread_t, std::map<int,ceph::BackTrace*> > held;
-static std::vector<std::bitset<MAX_LOCKS>> follows(MAX_LOCKS); // follows[a][b] means b taken after a
-static std::vector<std::array<ceph::BackTrace *, MAX_LOCKS>> follows_bt(MAX_LOCKS);
+static constexpr size_t MAX_FOLLOWERS = 4096;
+static std::vector<std::bitset<MAX_FOLLOWERS>> follows(MAX_LOCKS); // follows[a][b] means b taken after a
+static std::vector<std::array<ceph::BackTrace *, MAX_FOLLOWERS>> follows_bt(MAX_LOCKS);
 unsigned current_maxid;
 int last_freed_id = -1;
 static bool free_ids_inited;