From: Nathan Huckleberry <nhuck@google.com> To: linux-kernel@vger.kernel.org, dm-devel@redhat.com, Alasdair Kergon <agk@redhat.com>, Mike Snitzer <snitzer@kernel.org> Cc: Eric Biggers <ebiggers@kernel.org>, Sami Tolvanen <samitolvanen@google.com>, Nathan Huckleberry <nhuck@google.com> Subject: [PATCH 0/3] dm-verity: optionally use tasklets in dm-verity Date: Fri, 22 Jul 2022 09:38:20 +0000 [thread overview] Message-ID: <20220722093823.4158756-1-nhuck@google.com> (raw) Using tasklets for disk verification can reduce IO latency. When there are accelerated hash instructions it is often better to compute the hash immediately using a tasklet rather than deferring verification to a work-queue. This reduces time spent waiting to schedule work-queue jobs, but requires spending slightly more time in interrupt context. A tasklet can only be used for verification if all the required hashes are already in the dm-bufio cache. If verification cannot be done in a tasklet, we fallback the existing work-queue implementation. To allow tasklets to query the dm-bufio cache, the dm-bufio code must not sleep. This patchset adds a flag to dm-bufio that disallows sleeping. The following shows a speed comparison of random reads on a dm-verity device. The dm-verity device uses a 1G ramdisk for data and a 1G ramdisk for hashes. One test was run using tasklets and one test was run using the existing work-queue solution. Both tests were run when the dm-bufio cache was hot. The tasklet implementation performs significantly better since there is no time waiting for work-queue jobs to be scheduled. # /data/fio /data/tasklet.fio | grep READ READ: bw=181MiB/s (190MB/s), 181MiB/s-181MiB/s (190MB/s-190MB/s), io=512MiB (537MB), run=2827-2827msec # /data/fio /data/workqueue.fio | grep READ READ: bw=23.6MiB/s (24.8MB/s), 23.6MiB/s-23.6MiB/s (24.8MB/s-24.8MB/s), io=512MiB (537MB), run=21688-21688msec Nathan Huckleberry (3): dm-bufio: Add flags for dm_bufio_client_create dm-bufio: Add DM_BUFIO_GET_CANT_SLEEP dm-verity: Add try_verify_in_tasklet drivers/md/dm-bufio.c | 29 +++++-- drivers/md/dm-ebs-target.c | 3 +- drivers/md/dm-integrity.c | 2 +- drivers/md/dm-snap-persistent.c | 2 +- drivers/md/dm-verity-fec.c | 4 +- drivers/md/dm-verity-target.c | 87 ++++++++++++++++--- drivers/md/dm-verity.h | 5 ++ drivers/md/persistent-data/dm-block-manager.c | 3 +- include/linux/dm-bufio.h | 8 +- 9 files changed, 119 insertions(+), 24 deletions(-) -- 2.37.1.359.gd136c6c3e2-goog
WARNING: multiple messages have this Message-ID (diff)
From: Nathan Huckleberry <nhuck@google.com> To: linux-kernel@vger.kernel.org, dm-devel@redhat.com, Alasdair Kergon <agk@redhat.com>, Mike Snitzer <snitzer@kernel.org> Cc: Eric Biggers <ebiggers@kernel.org>, Sami Tolvanen <samitolvanen@google.com>, Nathan Huckleberry <nhuck@google.com> Subject: [dm-devel] [PATCH 0/3] dm-verity: optionally use tasklets in dm-verity Date: Fri, 22 Jul 2022 09:38:20 +0000 [thread overview] Message-ID: <20220722093823.4158756-1-nhuck@google.com> (raw) Using tasklets for disk verification can reduce IO latency. When there are accelerated hash instructions it is often better to compute the hash immediately using a tasklet rather than deferring verification to a work-queue. This reduces time spent waiting to schedule work-queue jobs, but requires spending slightly more time in interrupt context. A tasklet can only be used for verification if all the required hashes are already in the dm-bufio cache. If verification cannot be done in a tasklet, we fallback the existing work-queue implementation. To allow tasklets to query the dm-bufio cache, the dm-bufio code must not sleep. This patchset adds a flag to dm-bufio that disallows sleeping. The following shows a speed comparison of random reads on a dm-verity device. The dm-verity device uses a 1G ramdisk for data and a 1G ramdisk for hashes. One test was run using tasklets and one test was run using the existing work-queue solution. Both tests were run when the dm-bufio cache was hot. The tasklet implementation performs significantly better since there is no time waiting for work-queue jobs to be scheduled. # /data/fio /data/tasklet.fio | grep READ READ: bw=181MiB/s (190MB/s), 181MiB/s-181MiB/s (190MB/s-190MB/s), io=512MiB (537MB), run=2827-2827msec # /data/fio /data/workqueue.fio | grep READ READ: bw=23.6MiB/s (24.8MB/s), 23.6MiB/s-23.6MiB/s (24.8MB/s-24.8MB/s), io=512MiB (537MB), run=21688-21688msec Nathan Huckleberry (3): dm-bufio: Add flags for dm_bufio_client_create dm-bufio: Add DM_BUFIO_GET_CANT_SLEEP dm-verity: Add try_verify_in_tasklet drivers/md/dm-bufio.c | 29 +++++-- drivers/md/dm-ebs-target.c | 3 +- drivers/md/dm-integrity.c | 2 +- drivers/md/dm-snap-persistent.c | 2 +- drivers/md/dm-verity-fec.c | 4 +- drivers/md/dm-verity-target.c | 87 ++++++++++++++++--- drivers/md/dm-verity.h | 5 ++ drivers/md/persistent-data/dm-block-manager.c | 3 +- include/linux/dm-bufio.h | 8 +- 9 files changed, 119 insertions(+), 24 deletions(-) -- 2.37.1.359.gd136c6c3e2-goog -- dm-devel mailing list dm-devel@redhat.com https://listman.redhat.com/mailman/listinfo/dm-devel
next reply other threads:[~2022-07-22 9:44 UTC|newest] Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top 2022-07-22 9:38 Nathan Huckleberry [this message] 2022-07-22 9:38 ` [dm-devel] [PATCH 0/3] dm-verity: optionally use tasklets in dm-verity Nathan Huckleberry 2022-07-22 9:38 ` [PATCH 1/3] dm-bufio: Add flags for dm_bufio_client_create Nathan Huckleberry 2022-07-22 9:38 ` [dm-devel] " Nathan Huckleberry 2022-07-22 9:38 ` [PATCH 2/3] dm-bufio: Add DM_BUFIO_GET_CANT_SLEEP Nathan Huckleberry 2022-07-22 9:38 ` [dm-devel] " Nathan Huckleberry 2022-07-22 9:38 ` [PATCH 3/3] dm-verity: Add try_verify_in_tasklet Nathan Huckleberry 2022-07-22 9:38 ` [dm-devel] " Nathan Huckleberry 2022-07-26 1:58 ` Mike Snitzer 2022-07-26 1:58 ` [dm-devel] " Mike Snitzer 2022-07-26 3:06 ` Eric Biggers 2022-07-26 3:06 ` [dm-devel] " Eric Biggers 2022-07-26 4:13 ` Mike Snitzer 2022-07-26 4:13 ` [dm-devel] " Mike Snitzer 2022-07-22 16:41 ` [PATCH 0/3] dm-verity: optionally use tasklets in dm-verity Christoph Hellwig 2022-07-22 16:41 ` [dm-devel] " Christoph Hellwig 2022-07-22 17:12 ` Mike Snitzer 2022-07-22 17:12 ` [dm-devel] " Mike Snitzer 2022-08-15 11:35 ` Sebastian Andrzej Siewior 2022-07-22 18:12 ` [dm-devel] " Bart Van Assche 2022-07-22 18:12 ` Bart Van Assche 2022-07-22 18:33 ` Mike Snitzer 2022-07-22 18:33 ` [dm-devel] " Mike Snitzer
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20220722093823.4158756-1-nhuck@google.com \ --to=nhuck@google.com \ --cc=agk@redhat.com \ --cc=dm-devel@redhat.com \ --cc=ebiggers@kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=samitolvanen@google.com \ --cc=snitzer@kernel.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
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.