From 8c6abc0b69b7fbeffa7b807a46856206b9c4eda7 Mon Sep 17 00:00:00 2001 From: Jimmy Chen Date: Mon, 9 Jun 2025 14:41:14 +0200 Subject: [PATCH] Optimise parallelism in compute cells operations by zipping first (#7574) We're seeing slow KZG performance on `fusaka-devnet-0` and looking for optimisations to improve performance. Zipping the list first then `into_par_iter` shows a 10% improvement in performance benchmark, i suspect this might be even more material when running on a beacon node. Before: ``` blobs_to_data_column_sidecars_20 time: [11.583 ms 12.041 ms 12.534 ms] Found 5 outliers among 100 measurements (5.00%) ``` After: ``` blobs_to_data_column_sidecars_20 time: [10.506 ms 10.724 ms 10.982 ms] change: [-14.925% -10.941% -6.5452%] (p = 0.00 < 0.05) Performance has improved. Found 6 outliers among 100 measurements (6.00%) ``` --- beacon_node/beacon_chain/src/kzg_utils.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/beacon_node/beacon_chain/src/kzg_utils.rs b/beacon_node/beacon_chain/src/kzg_utils.rs index 704fb3663f..d2354d5f11 100644 --- a/beacon_node/beacon_chain/src/kzg_utils.rs +++ b/beacon_node/beacon_chain/src/kzg_utils.rs @@ -187,9 +187,9 @@ pub fn blobs_to_data_column_sidecars( .collect::>(); // NOTE: assumes blob sidecars are ordered by index - let blob_cells_and_proofs_vec = blobs + let zipped: Vec<_> = blobs.iter().zip(proof_chunks).collect(); + let blob_cells_and_proofs_vec = zipped .into_par_iter() - .zip(proof_chunks.into_par_iter()) .map(|(blob, proofs)| { let blob = blob .as_ref()