All of lore.kernel.org
 help / color / mirror / Atom feed
* [dm-devel] [RFC PATCH 1/1] dm crypt: change maximum sector size to PAGE_SIZE
@ 2021-11-10 17:43 Itai Handler
  2021-11-11 13:07 ` Milan Broz
  0 siblings, 1 reply; 8+ messages in thread
From: Itai Handler @ 2021-11-10 17:43 UTC (permalink / raw)
  To: dm-devel; +Cc: snitzer, agk

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@gmail.com>
---
 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@redhat.com
https://listman.redhat.com/mailman/listinfo/dm-devel


^ permalink raw reply related	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2022-03-13 14:54 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-11-10 17:43 [dm-devel] [RFC PATCH 1/1] dm crypt: change maximum sector size to PAGE_SIZE Itai Handler
2021-11-11 13:07 ` Milan Broz
2021-11-12 15:32   ` Mike Snitzer
2021-11-14 11:56   ` Itai Handler
2021-11-25 16:28     ` Itai Handler
2021-11-27 11:19       ` Milan Broz
2021-11-28 15:33         ` Itai Handler
2022-03-13 14:53           ` Itai Handler

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.