]> git.openfabrics.org - ~shefty/rdma-dev.git/commitdiff
Squashfs: Add an option to set dev block size to 4K
authorPhillip Lougher <phillip@squashfs.org.uk>
Sat, 22 Oct 2011 00:34:48 +0000 (01:34 +0100)
committerPhillip Lougher <phillip@squashfs.org.uk>
Wed, 2 Nov 2011 17:25:50 +0000 (17:25 +0000)
This commit adds an option to set the device block size used to 4K.

By default Squashfs sets the device block size (sb_min_blocksize) to 1K
or the smallest block size supported by the block device (if larger).
This, because blocks are packed together and unaligned in Squashfs,
should reduce latency.

This, however, gives poor performance on MTD NAND devices where
the optimal I/O size is 4K (even though the devices can support
smaller block sizes).

Using a 4K device block size may also improve overall I/O
performance for some file access patterns (e.g. sequential
accesses of files in filesystem order) on all media.

Signed-off-by: Phillip Lougher <phillip@squashfs.org.uk>
fs/squashfs/Kconfig
fs/squashfs/squashfs_fs.h
fs/squashfs/super.c

index 1360d4f88f410646e0d0268f22e5c76149488494..5586011b6a38332a684395ef9154134b9d461c84 100644 (file)
@@ -78,6 +78,28 @@ config SQUASHFS_XZ
 
          If unsure, say N.
 
+config SQUASHFS_4K_DEVBLK_SIZE
+       bool "Use 4K device block size?"
+       depends on SQUASHFS
+       help
+         By default Squashfs sets the dev block size (sb_min_blocksize)
+         to 1K or the smallest block size supported by the block device
+         (if larger).  This, because blocks are packed together and
+         unaligned in Squashfs, should reduce latency.
+
+         This, however, gives poor performance on MTD NAND devices where
+         the optimal I/O size is 4K (even though the devices can support
+         smaller block sizes).
+
+         Using a 4K device block size may also improve overall I/O
+         performance for some file access patterns (e.g. sequential
+         accesses of files in filesystem order) on all media.
+
+         Setting this option will force Squashfs to use a 4K device block
+         size by default.
+
+         If unsure, say N.
+
 config SQUASHFS_EMBEDDED
        bool "Additional option for memory-constrained systems"
        depends on SQUASHFS
index b4a4e539a08ca99846979777e738279962779568..e8e14645de9a8107f6aa573e7392e7f95fae53bb 100644 (file)
 #define SQUASHFS_FILE_SIZE             131072
 #define SQUASHFS_FILE_LOG              17
 
+/* default size of block device I/O */
+#ifdef CONFIG_SQUASHFS_4K_DEVBLK_SIZE
+#define SQUASHFS_DEVBLK_SIZE 4096
+#else
+#define SQUASHFS_DEVBLK_SIZE 1024
+#endif
+
 #define SQUASHFS_FILE_MAX_SIZE         1048576
 #define SQUASHFS_FILE_MAX_LOG          20
 
index 7438850c62d0ad538b61455bbed423569e3ac692..2da1715452aca604f13b030d0d7b5e28817ac5d7 100644 (file)
@@ -95,7 +95,7 @@ static int squashfs_fill_super(struct super_block *sb, void *data, int silent)
        }
        msblk = sb->s_fs_info;
 
-       msblk->devblksize = sb_min_blocksize(sb, BLOCK_SIZE);
+       msblk->devblksize = sb_min_blocksize(sb, SQUASHFS_DEVBLK_SIZE);
        msblk->devblksize_log2 = ffz(~msblk->devblksize);
 
        mutex_init(&msblk->read_data_mutex);