Maximum sector size of dm-crypt is currently limited to 4096 bytes. On systems where PAGE_SIZE is larger than 4096 bytes, using larger sectors can be beneficial for performance reasons. This patch changes maximum sector size from 4096 bytes to PAGE_SIZE, and in addition it changes the type of sector_size in struct crypt_config from 'unsigned short int' to 'unsigned int', in order to be able to represent larger values. On a prototype system which has PAGE_SIZE of 65536 bytes, I saw about x2 performance improvement in sequential read throughput benchmark while using only about half of the CPU usage, after simply increasing sector size from 4096 to 65536 bytes. I used ext4 filesystem for that benchmark, which supports 64KiB sectors. Note: A small change should be made in cryptsetup in order to add support for sectors larger than 4096 bytes. Signed-off-by: Itai Handler <itai.handler@xxxxxxxxx> --- drivers/md/dm-crypt.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/md/dm-crypt.c b/drivers/md/dm-crypt.c index 916b7da16de2..78c239443bd5 100644 --- a/drivers/md/dm-crypt.c +++ b/drivers/md/dm-crypt.c @@ -168,7 +168,7 @@ struct crypt_config { } iv_gen_private; u64 iv_offset; unsigned int iv_size; - unsigned short int sector_size; + unsigned int sector_size; unsigned char sector_shift; union { @@ -3115,9 +3115,9 @@ static int crypt_ctr_optional(struct dm_target *ti, unsigned int argc, char **ar cc->cipher_auth = kstrdup(sval, GFP_KERNEL); if (!cc->cipher_auth) return -ENOMEM; - } else if (sscanf(opt_string, "sector_size:%hu%c", &cc->sector_size, &dummy) == 1) { + } else if (sscanf(opt_string, "sector_size:%u%c", &cc->sector_size, &dummy) == 1) { if (cc->sector_size < (1 << SECTOR_SHIFT) || - cc->sector_size > 4096 || + cc->sector_size > PAGE_SIZE || (cc->sector_size & (cc->sector_size - 1))) { ti->error = "Invalid feature value for sector_size"; return -EINVAL; -- 2.17.1 -- dm-devel mailing list dm-devel@xxxxxxxxxx https://listman.redhat.com/mailman/listinfo/dm-devel