Messages in this thread Patch in this message | | | Date | Fri, 10 Mar 2023 11:33:25 -0800 | Subject | [PATCH v2] fsverity: Remove WQ_UNBOUND from fsverity read workqueue | From | Nathan Huckleberry <> |
| |
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> --- 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
| |