[dm-6.4 PATCH v3 16/20] dm: add dm_num_sharded_locks()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Simple helper to use when DM core code needs to appropriately size,
based on num_online_cpus(), its data structures that split locks.

dm_num_sharded_locks() rounds up num_online_cpus() to next power of 2
but caps return at DM_MAX_SHARDED_LOCKS (64).

This heuristic may evolve as warranted, but as-is it will serve as a
more informed basis for sizing the sharded lock structs in dm-bufio's
dm_buffer_cache (buffer_trees) and dm-bio-prison-v1's dm_bio_prison
(prison_regions).

Signed-off-by: Mike Snitzer <snitzer@xxxxxxxxxx>
---
 drivers/md/dm.h | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/drivers/md/dm.h b/drivers/md/dm.h
index 22eaed188907..18450282d0d9 100644
--- a/drivers/md/dm.h
+++ b/drivers/md/dm.h
@@ -20,6 +20,7 @@
 #include <linux/completion.h>
 #include <linux/kobject.h>
 #include <linux/refcount.h>
+#include <linux/log2.h>
 
 #include "dm-stats.h"
 
@@ -228,4 +229,13 @@ void dm_free_md_mempools(struct dm_md_mempools *pools);
  */
 unsigned int dm_get_reserved_bio_based_ios(void);
 
+#define DM_MAX_SHARDED_LOCKS 64
+
+static inline unsigned int dm_num_sharded_locks(void)
+{
+	unsigned int num_locks = roundup_pow_of_two(num_online_cpus());
+
+	return min_t(unsigned int, num_locks, DM_MAX_SHARDED_LOCKS);
+}
+
 #endif
-- 
2.40.0




[Index of Archives]     [Linux RAID]     [Linux SCSI]     [Linux ATA RAID]     [IDE]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Device Mapper]

  Powered by Linux