mirror of
https://github.com/btcsuite/btcd.git
synced 2025-01-19 05:33:36 +01:00
wire: Don't allocate new readers in benchmarks. (#679)
This modifies the benchmarks in the wire package to avoid creating a new reader for each iteration. This is useful since it means that showing the memory allocations will only show the function under test instead of the allocation for the benchmark setup as well. The following is a before and after comparison of the allocations with the benchmarks that did not change removed: benchmark old allocs new allocs delta ------------------------------------------------------------ ReadVarInt1 2 1 -50.00% ReadVarInt3 2 1 -50.00% ReadVarInt5 2 1 -50.00% ReadVarInt9 2 1 -50.00% ReadVarStr4 4 3 -25.00% ReadVarStr10 4 3 -25.00% ReadOutPoint 2 1 -50.00% ReadTxOut 4 3 -25.00% ReadTxIn 6 5 -16.67% DeserializeTxSmall 16 15 -6.25% DeserializeTxLarge 33430 33428 -0.01% ReadBlockHeader 8 7 -12.50%
This commit is contained in:
parent
27c0f9f8d1
commit
e7ddaa468e
@ -152,8 +152,10 @@ func BenchmarkWriteVarInt9(b *testing.B) {
|
|||||||
// a single byte variable length integer.
|
// a single byte variable length integer.
|
||||||
func BenchmarkReadVarInt1(b *testing.B) {
|
func BenchmarkReadVarInt1(b *testing.B) {
|
||||||
buf := []byte{0x01}
|
buf := []byte{0x01}
|
||||||
|
r := bytes.NewReader(buf)
|
||||||
for i := 0; i < b.N; i++ {
|
for i := 0; i < b.N; i++ {
|
||||||
ReadVarInt(bytes.NewReader(buf), 0)
|
r.Seek(0, 0)
|
||||||
|
ReadVarInt(r, 0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -161,8 +163,10 @@ func BenchmarkReadVarInt1(b *testing.B) {
|
|||||||
// a three byte variable length integer.
|
// a three byte variable length integer.
|
||||||
func BenchmarkReadVarInt3(b *testing.B) {
|
func BenchmarkReadVarInt3(b *testing.B) {
|
||||||
buf := []byte{0x0fd, 0xff, 0xff}
|
buf := []byte{0x0fd, 0xff, 0xff}
|
||||||
|
r := bytes.NewReader(buf)
|
||||||
for i := 0; i < b.N; i++ {
|
for i := 0; i < b.N; i++ {
|
||||||
ReadVarInt(bytes.NewReader(buf), 0)
|
r.Seek(0, 0)
|
||||||
|
ReadVarInt(r, 0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -170,8 +174,10 @@ func BenchmarkReadVarInt3(b *testing.B) {
|
|||||||
// a five byte variable length integer.
|
// a five byte variable length integer.
|
||||||
func BenchmarkReadVarInt5(b *testing.B) {
|
func BenchmarkReadVarInt5(b *testing.B) {
|
||||||
buf := []byte{0xfe, 0xff, 0xff, 0xff, 0xff}
|
buf := []byte{0xfe, 0xff, 0xff, 0xff, 0xff}
|
||||||
|
r := bytes.NewReader(buf)
|
||||||
for i := 0; i < b.N; i++ {
|
for i := 0; i < b.N; i++ {
|
||||||
ReadVarInt(bytes.NewReader(buf), 0)
|
r.Seek(0, 0)
|
||||||
|
ReadVarInt(r, 0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -179,8 +185,10 @@ func BenchmarkReadVarInt5(b *testing.B) {
|
|||||||
// a nine byte variable length integer.
|
// a nine byte variable length integer.
|
||||||
func BenchmarkReadVarInt9(b *testing.B) {
|
func BenchmarkReadVarInt9(b *testing.B) {
|
||||||
buf := []byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}
|
buf := []byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}
|
||||||
|
r := bytes.NewReader(buf)
|
||||||
for i := 0; i < b.N; i++ {
|
for i := 0; i < b.N; i++ {
|
||||||
ReadVarInt(bytes.NewReader(buf), 0)
|
r.Seek(0, 0)
|
||||||
|
ReadVarInt(r, 0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -188,8 +196,10 @@ func BenchmarkReadVarInt9(b *testing.B) {
|
|||||||
// four byte variable length string.
|
// four byte variable length string.
|
||||||
func BenchmarkReadVarStr4(b *testing.B) {
|
func BenchmarkReadVarStr4(b *testing.B) {
|
||||||
buf := []byte{0x04, 't', 'e', 's', 't'}
|
buf := []byte{0x04, 't', 'e', 's', 't'}
|
||||||
|
r := bytes.NewReader(buf)
|
||||||
for i := 0; i < b.N; i++ {
|
for i := 0; i < b.N; i++ {
|
||||||
ReadVarString(bytes.NewReader(buf), 0)
|
r.Seek(0, 0)
|
||||||
|
ReadVarString(r, 0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -197,8 +207,10 @@ func BenchmarkReadVarStr4(b *testing.B) {
|
|||||||
// ten byte variable length string.
|
// ten byte variable length string.
|
||||||
func BenchmarkReadVarStr10(b *testing.B) {
|
func BenchmarkReadVarStr10(b *testing.B) {
|
||||||
buf := []byte{0x0a, 't', 'e', 's', 't', '0', '1', '2', '3', '4', '5'}
|
buf := []byte{0x0a, 't', 'e', 's', 't', '0', '1', '2', '3', '4', '5'}
|
||||||
|
r := bytes.NewReader(buf)
|
||||||
for i := 0; i < b.N; i++ {
|
for i := 0; i < b.N; i++ {
|
||||||
ReadVarString(bytes.NewReader(buf), 0)
|
r.Seek(0, 0)
|
||||||
|
ReadVarString(r, 0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -228,9 +240,11 @@ func BenchmarkReadOutPoint(b *testing.B) {
|
|||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Previous output hash
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Previous output hash
|
||||||
0xff, 0xff, 0xff, 0xff, // Previous output index
|
0xff, 0xff, 0xff, 0xff, // Previous output index
|
||||||
}
|
}
|
||||||
|
r := bytes.NewReader(buf)
|
||||||
var op OutPoint
|
var op OutPoint
|
||||||
for i := 0; i < b.N; i++ {
|
for i := 0; i < b.N; i++ {
|
||||||
readOutPoint(bytes.NewReader(buf), 0, 0, &op)
|
r.Seek(0, 0)
|
||||||
|
readOutPoint(r, 0, 0, &op)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -264,9 +278,11 @@ func BenchmarkReadTxOut(b *testing.B) {
|
|||||||
0xee, // 65-byte signature
|
0xee, // 65-byte signature
|
||||||
0xac, // OP_CHECKSIG
|
0xac, // OP_CHECKSIG
|
||||||
}
|
}
|
||||||
|
r := bytes.NewReader(buf)
|
||||||
var txOut TxOut
|
var txOut TxOut
|
||||||
for i := 0; i < b.N; i++ {
|
for i := 0; i < b.N; i++ {
|
||||||
readTxOut(bytes.NewReader(buf), 0, 0, &txOut)
|
r.Seek(0, 0)
|
||||||
|
readTxOut(r, 0, 0, &txOut)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -292,9 +308,11 @@ func BenchmarkReadTxIn(b *testing.B) {
|
|||||||
0x04, 0xff, 0xff, 0x00, 0x1d, 0x01, 0x04, // Signature script
|
0x04, 0xff, 0xff, 0x00, 0x1d, 0x01, 0x04, // Signature script
|
||||||
0xff, 0xff, 0xff, 0xff, // Sequence
|
0xff, 0xff, 0xff, 0xff, // Sequence
|
||||||
}
|
}
|
||||||
|
r := bytes.NewReader(buf)
|
||||||
var txIn TxIn
|
var txIn TxIn
|
||||||
for i := 0; i < b.N; i++ {
|
for i := 0; i < b.N; i++ {
|
||||||
readTxIn(bytes.NewReader(buf), 0, 0, &txIn)
|
r.Seek(0, 0)
|
||||||
|
readTxIn(r, 0, 0, &txIn)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -337,9 +355,12 @@ func BenchmarkDeserializeTxSmall(b *testing.B) {
|
|||||||
0xac, // OP_CHECKSIG
|
0xac, // OP_CHECKSIG
|
||||||
0x00, 0x00, 0x00, 0x00, // Lock time
|
0x00, 0x00, 0x00, 0x00, // Lock time
|
||||||
}
|
}
|
||||||
|
|
||||||
|
r := bytes.NewReader(buf)
|
||||||
var tx MsgTx
|
var tx MsgTx
|
||||||
for i := 0; i < b.N; i++ {
|
for i := 0; i < b.N; i++ {
|
||||||
tx.Deserialize(bytes.NewReader(buf))
|
r.Seek(0, 0)
|
||||||
|
tx.Deserialize(r)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -358,9 +379,11 @@ func BenchmarkDeserializeTxLarge(b *testing.B) {
|
|||||||
b.Fatalf("Failed to read transaction data: %v", err)
|
b.Fatalf("Failed to read transaction data: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
r := bytes.NewReader(buf)
|
||||||
var tx MsgTx
|
var tx MsgTx
|
||||||
for i := 0; i < b.N; i++ {
|
for i := 0; i < b.N; i++ {
|
||||||
tx.Deserialize(bytes.NewReader(buf))
|
r.Seek(0, 0)
|
||||||
|
tx.Deserialize(r)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -392,9 +415,11 @@ func BenchmarkReadBlockHeader(b *testing.B) {
|
|||||||
0xf3, 0xe0, 0x01, 0x00, // Nonce
|
0xf3, 0xe0, 0x01, 0x00, // Nonce
|
||||||
0x00, // TxnCount Varint
|
0x00, // TxnCount Varint
|
||||||
}
|
}
|
||||||
|
r := bytes.NewReader(buf)
|
||||||
var header BlockHeader
|
var header BlockHeader
|
||||||
for i := 0; i < b.N; i++ {
|
for i := 0; i < b.N; i++ {
|
||||||
readBlockHeader(bytes.NewReader(buf), 0, &header)
|
r.Seek(0, 0)
|
||||||
|
readBlockHeader(r, 0, &header)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user