Skip to content

Commit 6258118

Browse files
nhukcsmb49
authored andcommitted
fsverity: Remove WQ_UNBOUND from fsverity read workqueue
BugLink: https://bugs.launchpad.net/bugs/2023230 commit f959325 upstream. WQ_UNBOUND causes significant scheduler latency on ARM64/Android. This is problematic for latency sensitive workloads, like I/O post-processing. Removing WQ_UNBOUND gives a 96% reduction in fsverity workqueue related scheduler latency and improves app cold startup times by ~30ms. WQ_UNBOUND was also removed from the dm-verity workqueue for the same reason [1]. This code was tested by running Android app startup benchmarks and measuring how long the fsverity workqueue spent in the runnable state. Before Total workqueue scheduler latency: 553800us After Total workqueue scheduler latency: 18962us [1]: https://lore.kernel.org/all/20230202012348.885402-1-nhuck@google.com/ Signed-off-by: Nathan Huckleberry <nhuck@google.com> Fixes: 8a1d0f9 ("fs-verity: add data verification hooks for ->readpages()") Cc: stable@vger.kernel.org Link: https://lore.kernel.org/r/20230310193325.620493-1-nhuck@google.com Signed-off-by: Eric Biggers <ebiggers@google.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Signed-off-by: Kamal Mostafa <kamal@canonical.com> Signed-off-by: Luke Nowakowski-Krijger <luke.nowakowskikrijger@canonical.com>
1 parent 80e0161 commit 6258118

File tree

1 file changed

+6
-6
lines changed

1 file changed

+6
-6
lines changed

fs/verity/verify.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -279,15 +279,15 @@ EXPORT_SYMBOL_GPL(fsverity_enqueue_verify_work);
279279
int __init fsverity_init_workqueue(void)
280280
{
281281
/*
282-
* Use an unbound workqueue to allow bios to be verified in parallel
283-
* even when they happen to complete on the same CPU. This sacrifices
284-
* locality, but it's worthwhile since hashing is CPU-intensive.
282+
* Use a high-priority workqueue to prioritize verification work, which
283+
* blocks reads from completing, over regular application tasks.
285284
*
286-
* Also use a high-priority workqueue to prioritize verification work,
287-
* which blocks reads from completing, over regular application tasks.
285+
* For performance reasons, don't use an unbound workqueue. Using an
286+
* unbound workqueue for crypto operations causes excessive scheduler
287+
* latency on ARM64.
288288
*/
289289
fsverity_read_workqueue = alloc_workqueue("fsverity_read_queue",
290-
WQ_UNBOUND | WQ_HIGHPRI,
290+
WQ_HIGHPRI,
291291
num_online_cpus());
292292
if (!fsverity_read_workqueue)
293293
return -ENOMEM;

0 commit comments

Comments
 (0)