It might make sense to split this benchmark into "labeled" and "unlabeled" variants in order to also get a feeling how overhead the labels scanning causes, with something like e.g.:
<details>
<summary>diff</summary>
diff --git a/src/modules/silentpayments/bench_impl.h b/src/modules/silentpayments/bench_impl.h
index 1dd1e5a..366d172 100644
--- a/src/modules/silentpayments/bench_impl.h
+++ b/src/modules/silentpayments/bench_impl.h
@@ -108,7 +108,7 @@ static void bench_silentpayments_output_scan(void* arg, int iters) {
}
}
-static void bench_silentpayments_full_tx_scan(void* arg, int iters) {
+static void bench_silentpayments_full_tx_scan(void* arg, int iters, int use_labels) {
int i;
size_t n_found = 0;
secp256k1_silentpayments_found_output *found_output_ptrs[2];
@@ -116,6 +116,8 @@ static void bench_silentpayments_full_tx_scan(void* arg, int iters) {
const secp256k1_xonly_pubkey *tx_input_ptrs[2];
bench_silentpayments_data *data = (bench_silentpayments_data*)arg;
secp256k1_silentpayments_recipient_public_data public_data;
+ const secp256k1_silentpayments_label_lookup label_lookup_fn = use_labels ? label_lookup : NULL;
+ const void *label_context = use_labels ? label_cache : NULL;
for (i = 0; i < 2; i++) {
found_output_ptrs[i] = &data->found_outputs[i];
@@ -135,11 +137,19 @@ static void bench_silentpayments_full_tx_scan(void* arg, int iters) {
data->scan_key,
&public_data,
&data->spend_pubkey,
- label_lookup, label_cache)
+ label_lookup_fn, label_context)
);
}
}
+static void bench_silentpayments_full_tx_scan_unlabeled(void *arg, int iters) {
+ bench_silentpayments_full_tx_scan(arg, iters, 0);
+}
+
+static void bench_silentpayments_full_tx_scan_labeled(void *arg, int iters) {
+ bench_silentpayments_full_tx_scan(arg, iters, 1);
+}
+
static void run_silentpayments_bench(int iters, int argc, char** argv) {
bench_silentpayments_data data;
int d = argc == 1;
@@ -147,7 +157,8 @@ static void run_silentpayments_bench(int iters, int argc, char** argv) {
/* create a context with no capabilities */
data.ctx = secp256k1_context_create(SECP256K1_FLAGS_TYPE_CONTEXT);
- if (d || have_flag(argc, argv, "silentpayments")) run_benchmark("silentpayments_full_tx_scan", bench_silentpayments_full_tx_scan, bench_silentpayments_scan_setup, NULL, &data, 10, iters);
+ if (d || have_flag(argc, argv, "silentpayments")) run_benchmark("silentpayments_full_tx_scan_labeled", bench_silentpayments_full_tx_scan_labeled, bench_silentpayments_scan_setup, NULL, &data, 10, iters);
+ if (d || have_flag(argc, argv, "silentpayments")) run_benchmark("silentpayments_full_tx_scan_unlabeled", bench_silentpayments_full_tx_scan_unlabeled, bench_silentpayments_scan_setup, NULL, &data, 10, iters);
if (d || have_flag(argc, argv, "silentpayments")) run_benchmark("silentpayments_output_scan", bench_silentpayments_output_scan, bench_silentpayments_scan_setup, NULL, &data, 10, iters);
secp256k1_context_destroy(data.ctx);
</details>
Results on my machine:
Benchmark , Min(us) , Avg(us) , Max(us)
silentpayments_full_tx_scan_labeled, 94.6 , 96.6 , 101.0
silentpayments_full_tx_scan_unlabeled, 82.7 , 84.2 , 85.9
silentpayments_output_scan , 85.3 , 87.5 , 90.7