core: types: less allocations when hashing and tx handling (#21265)
* core, crypto: various allocation savings regarding tx handling
* core: reduce allocs for gas price comparison
This change reduces the allocations needed for comparing different transactions to each other.
A call to `tx.GasPrice()` copies the gas price as it has to be safe against modifications and
also needs to be threadsafe. For comparing and ordering different transactions we don't need
these guarantees
* core: added tx.GasPriceIntCmp for comparison without allocation
adds a method to remove unneeded allocation in comparison to tx.gasPrice
* core/types: pool legacykeccak256 objects in rlpHash
rlpHash is by far the most used function in core that allocates a legacyKeccak256 object on each call.
Since it is so widely used it makes sense to add pooling here so we relieve the GC.
On my machine these changes result in > 100 MILLION less allocations and > 30 GB less allocated memory.
* reverted some changes
* reverted some changes
* trie: use crypto.KeccakState instead of replicating code
Co-authored-by:
Martin Holst Swende <martin@swende.se>
Showing
- core/tx_list.go 4 additions, 4 deletionscore/tx_list.go
- core/tx_list_test.go 19 additions, 0 deletionscore/tx_list_test.go
- core/tx_pool.go 4 additions, 4 deletionscore/tx_pool.go
- core/types/block.go 14 additions, 3 deletionscore/types/block.go
- core/types/transaction.go 9 additions, 3 deletionscore/types/transaction.go
- crypto/crypto.go 15 additions, 4 deletionscrypto/crypto.go
- eth/gasprice/gasprice.go 1 addition, 1 deletioneth/gasprice/gasprice.go
- trie/committer.go 3 additions, 2 deletionstrie/committer.go
- trie/hasher.go 3 additions, 11 deletionstrie/hasher.go
Loading
Please register or sign in to comment