Skip to content

Commit f959325

Browse files
nhukcebiggers
authored andcommitted
fsverity: Remove WQ_UNBOUND from fsverity read workqueue
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/[email protected]/ Signed-off-by: Nathan Huckleberry <[email protected]> Fixes: 8a1d0f9 ("fs-verity: add data verification hooks for ->readpages()") Cc: [email protected] Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Eric Biggers <[email protected]>
1 parent eeac8ed commit f959325

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
@@ -387,15 +387,15 @@ EXPORT_SYMBOL_GPL(fsverity_enqueue_verify_work);
387387
int __init fsverity_init_workqueue(void)
388388
{
389389
/*
390-
* Use an unbound workqueue to allow bios to be verified in parallel
391-
* even when they happen to complete on the same CPU. This sacrifices
392-
* locality, but it's worthwhile since hashing is CPU-intensive.
390+
* Use a high-priority workqueue to prioritize verification work, which
391+
* blocks reads from completing, over regular application tasks.
393392
*
394-
* Also use a high-priority workqueue to prioritize verification work,
395-
* which blocks reads from completing, over regular application tasks.
393+
* For performance reasons, don't use an unbound workqueue. Using an
394+
* unbound workqueue for crypto operations causes excessive scheduler
395+
* latency on ARM64.
396396
*/
397397
fsverity_read_workqueue = alloc_workqueue("fsverity_read_queue",
398-
WQ_UNBOUND | WQ_HIGHPRI,
398+
WQ_HIGHPRI,
399399
num_online_cpus());
400400
if (!fsverity_read_workqueue)
401401
return -ENOMEM;

0 commit comments

Comments
 (0)