public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] squashfs: Customize squashfs metadata cache size
@ 2022-08-08 20:58 Yury Khmel
  0 siblings, 0 replies; only message in thread
From: Yury Khmel @ 2022-08-08 20:58 UTC (permalink / raw)
  To: Phillip Lougher; +Cc: linux-kernel, Yury Khmel

It provides customization using module params.
In some use-cases reading metadata may take comparable time reading data
itself. Increasing the cache size in such cases helps to eliminate that
bottleneck and increase the overall performance.

Signed-off-by: Yury Khmel <khmel@google.com>
---
 fs/squashfs/file.c        |  4 ++--
 fs/squashfs/squashfs_fs.h |  2 +-
 fs/squashfs/super.c       | 12 +++++++++++-
 3 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/fs/squashfs/file.c b/fs/squashfs/file.c
index 98e64fec75b7..fc8859741f59 100644
--- a/fs/squashfs/file.c
+++ b/fs/squashfs/file.c
@@ -207,7 +207,7 @@ static long long read_indexes(struct super_block *sb, int n,
  * to distribute these over the length of the file, entry[0] maps index x,
  * entry[1] maps index x + skip, entry[2] maps index x + 2 * skip, and so on.
  * The larger the file, the greater the skip factor.  The skip factor is
- * limited to the size of the metadata cache (SQUASHFS_CACHED_BLKS) to ensure
+ * limited to the size of the metadata cache (squashfs_cached_blks) to ensure
  * the number of metadata blocks that need to be read fits into the cache.
  * If the skip factor is limited in this way then the file will use multiple
  * slots.
@@ -216,7 +216,7 @@ static inline int calculate_skip(u64 blocks)
 {
 	u64 skip = blocks / ((SQUASHFS_META_ENTRIES + 1)
 		 * SQUASHFS_META_INDEXES);
-	return min((u64) SQUASHFS_CACHED_BLKS - 1, skip + 1);
+	return min((u64) squashfs_cached_blks() - 1, skip + 1);
 }
 
 
diff --git a/fs/squashfs/squashfs_fs.h b/fs/squashfs/squashfs_fs.h
index b3fdc8212c5f..b42aaf51de28 100644
--- a/fs/squashfs/squashfs_fs.h
+++ b/fs/squashfs/squashfs_fs.h
@@ -202,7 +202,7 @@ static inline int squashfs_block_size(__le32 raw)
 #define SQUASHFS_XATTR_OFFSET(A)	((unsigned int) ((A) & 0xffff))
 
 /* cached data constants for filesystem */
-#define SQUASHFS_CACHED_BLKS		8
+unsigned int squashfs_cached_blks(void);
 
 /* meta index cache */
 #define SQUASHFS_META_INDEXES	(SQUASHFS_METADATA_SIZE / sizeof(unsigned int))
diff --git a/fs/squashfs/super.c b/fs/squashfs/super.c
index 32565dafa7f3..939a5eb017c2 100644
--- a/fs/squashfs/super.c
+++ b/fs/squashfs/super.c
@@ -27,6 +27,7 @@
 #include <linux/pagemap.h>
 #include <linux/init.h>
 #include <linux/module.h>
+#include <linux/moduleparam.h>
 #include <linux/magic.h>
 #include <linux/xattr.h>
 
@@ -85,6 +86,15 @@ static int squashfs_parse_param(struct fs_context *fc, struct fs_parameter *para
 	return 0;
 }
 
+static unsigned int cached_blks = 8;
+module_param(cached_blks, uint, 0644);
+MODULE_PARM_DESC(cached_blks, "Metadata squashfs cache size");
+
+unsigned int squashfs_cached_blks(void)
+{
+	return cached_blks;
+}
+
 static const struct squashfs_decompressor *supported_squashfs_filesystem(
 	struct fs_context *fc,
 	short major, short minor, short id)
@@ -246,7 +256,7 @@ static int squashfs_fill_super(struct super_block *sb, struct fs_context *fc)
 	err = -ENOMEM;
 
 	msblk->block_cache = squashfs_cache_init("metadata",
-			SQUASHFS_CACHED_BLKS, SQUASHFS_METADATA_SIZE);
+			squashfs_cached_blks(), SQUASHFS_METADATA_SIZE);
 	if (msblk->block_cache == NULL)
 		goto failed_mount;
 
-- 
2.37.1.559.g78731f0fdb-goog


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2022-08-08 20:58 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-08-08 20:58 [PATCH] squashfs: Customize squashfs metadata cache size Yury Khmel

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox