[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20230310193325.620493-1-nhuck@google.com>
Date: Fri, 10 Mar 2023 11:33:25 -0800
From: Nathan Huckleberry <nhuck@...gle.com>
To: unlisted-recipients:; (no To-header on input)
Cc: Nathan Huckleberry <nhuck@...gle.com>,
Eric Biggers <ebiggers@...nel.org>,
"Theodore Y. Ts'o" <tytso@....edu>, fsverity@...ts.linux.dev,
linux-kernel@...r.kernel.org
Subject: [PATCH v2] 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/20230202012348.885402-1-nhuck@google.com/
Signed-off-by: Nathan Huckleberry <nhuck@...gle.com>
---
Changelog:
v1 -> v2:
- Added comment about WQ_UNBOUND
- Added info about related dm-verity patches in commit message
fs/verity/verify.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/fs/verity/verify.c b/fs/verity/verify.c
index f50e3b5b52c9..782b8b4a24c1 100644
--- a/fs/verity/verify.c
+++ b/fs/verity/verify.c
@@ -387,15 +387,15 @@ EXPORT_SYMBOL_GPL(fsverity_enqueue_verify_work);
int __init fsverity_init_workqueue(void)
{
/*
- * Use an unbound workqueue to allow bios to be verified in parallel
- * even when they happen to complete on the same CPU. This sacrifices
- * locality, but it's worthwhile since hashing is CPU-intensive.
- *
* Also use a high-priority workqueue to prioritize verification work,
* which blocks reads from completing, over regular application tasks.
+ *
+ * This workqueue is not marked as unbound for performance reasons.
+ * Using an unbound workqueue for crypto operations causes excessive
+ * scheduler latency on ARM64.
*/
fsverity_read_workqueue = alloc_workqueue("fsverity_read_queue",
- WQ_UNBOUND | WQ_HIGHPRI,
+ WQ_HIGHPRI,
num_online_cpus());
if (!fsverity_read_workqueue)
return -ENOMEM;
--
2.40.0.rc1.284.g88254d51c5-goog
Powered by blists - more mailing lists