From 58d8bad99a469989b2a3d9b9a0d8c7d4f444c62c Mon Sep 17 00:00:00 2001 From: JayT106 Date: Sat, 12 Feb 2022 13:43:38 +0800 Subject: [PATCH] mempool: fix benchmark CheckTx for hitting the GetEvictableTxs call (#7796) Based on the discussion in #7723, make the CheckTx benchmark exercise GetEvictableTxs which is one of the critical paths in CheckTx. After profiling the test, the sorting will occupy 90% of the CPU time in CheckTx. In the test it doesn't count the influence of the preCheck, postCheck, and CheckTxAsync when the mempool is full. --- internal/mempool/mempool_bench_test.go | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/internal/mempool/mempool_bench_test.go b/internal/mempool/mempool_bench_test.go index 82848dbfb..088af174a 100644 --- a/internal/mempool/mempool_bench_test.go +++ b/internal/mempool/mempool_bench_test.go @@ -14,8 +14,13 @@ func BenchmarkTxMempool_CheckTx(b *testing.B) { ctx, cancel := context.WithCancel(context.Background()) defer cancel() + // setup the cache and the mempool number for hitting GetEvictableTxs during the + // benchmark. 5000 is the current default mempool size in the TM config. txmp := setup(ctx, b, 10000) + txmp.config.Size = 5000 + rng := rand.New(rand.NewSource(time.Now().UnixNano())) + const peerID = 1 b.ResetTimer() @@ -26,9 +31,11 @@ func BenchmarkTxMempool_CheckTx(b *testing.B) { require.NoError(b, err) priority := int64(rng.Intn(9999-1000) + 1000) - tx := []byte(fmt.Sprintf("%X=%d", prefix, priority)) + tx := []byte(fmt.Sprintf("sender-%d-%d=%X=%d", n, peerID, prefix, priority)) + txInfo := TxInfo{SenderID: uint16(peerID)} + b.StartTimer() - require.NoError(b, txmp.CheckTx(ctx, tx, nil, TxInfo{})) + require.NoError(b, txmp.CheckTx(ctx, tx, nil, txInfo)) } }