Skip to content

Commit

Permalink
tests: Add zstd Reset and NewReader benchmarks. (#676)
Browse files Browse the repository at this point in the history
Output:

```
goos: windows
goarch: amd64
pkg: github.com/klauspost/compress/zstd
cpu: AMD Ryzen 9 3950X 16-Core Processor
BenchmarkDecoder_DecoderReset/kppkn.gtb.zst/stream-32  	    7342	    139579 ns/op	   0.01 MB/s	   93922 B/op	      16 allocs/op
BenchmarkDecoder_DecoderReset/kppkn.gtb.zst/stream-single-32         	29215276	        38.96 ns/op	  25.67 MB/s	       0 B/op	       0 allocs/op
BenchmarkDecoder_DecoderReset/kppkn.gtb.zst/buffer-32                	    4060	    280503 ns/op	   0.00 MB/s	       2 B/op	       0 allocs/op
BenchmarkDecoder_DecoderReset/kppkn.gtb.zst/buffer-single-32         	    4202	    280597 ns/op	   0.00 MB/s	       2 B/op	       0 allocs/op
BenchmarkDecoder_DecoderReset/geo.protodata.zst/stream-32            	   20731	     57093 ns/op	   0.02 MB/s	   61110 B/op	      16 allocs/op
BenchmarkDecoder_DecoderReset/geo.protodata.zst/stream-single-32     	30301192	        39.27 ns/op	  25.46 MB/s	       0 B/op	       0 allocs/op
BenchmarkDecoder_DecoderReset/geo.protodata.zst/buffer-32            	   16564	     71993 ns/op	   0.01 MB/s	       0 B/op	       0 allocs/op
BenchmarkDecoder_DecoderReset/geo.protodata.zst/buffer-single-32     	   16620	     72548 ns/op	   0.01 MB/s	       0 B/op	       0 allocs/op
BenchmarkDecoder_DecoderReset/plrabn12.txt.zst/stream-32             	    4443	    251523 ns/op	   0.00 MB/s	  248747 B/op	      16 allocs/op
BenchmarkDecoder_DecoderReset/plrabn12.txt.zst/stream-single-32      	28945444	        38.59 ns/op	  25.91 MB/s	       0 B/op	       0 allocs/op
BenchmarkDecoder_DecoderReset/plrabn12.txt.zst/buffer-32             	    1296	    915978 ns/op	   0.00 MB/s	       6 B/op	       0 allocs/op
BenchmarkDecoder_DecoderReset/plrabn12.txt.zst/buffer-single-32      	    1286	    914266 ns/op	   0.00 MB/s	       6 B/op	       0 allocs/op
BenchmarkDecoder_DecoderReset/lcet10.txt.zst/stream-32               	    5703	    213168 ns/op	   0.00 MB/s	  211389 B/op	      16 allocs/op
BenchmarkDecoder_DecoderReset/lcet10.txt.zst/stream-single-32        	29227872	        38.88 ns/op	  25.72 MB/s	       0 B/op	       0 allocs/op
BenchmarkDecoder_DecoderReset/lcet10.txt.zst/buffer-32               	    1737	    680258 ns/op	   0.00 MB/s	       4 B/op	       0 allocs/op
BenchmarkDecoder_DecoderReset/lcet10.txt.zst/buffer-single-32        	    1764	    678171 ns/op	   0.00 MB/s	       4 B/op	       0 allocs/op
BenchmarkDecoder_DecoderReset/asyoulik.txt.zst/stream-32             	    9230	    126437 ns/op	   0.01 MB/s	   65765 B/op	      16 allocs/op
BenchmarkDecoder_DecoderReset/asyoulik.txt.zst/stream-single-32      	28616192	        39.14 ns/op	  25.55 MB/s	       0 B/op	       0 allocs/op
BenchmarkDecoder_DecoderReset/asyoulik.txt.zst/buffer-32             	    4788	    243991 ns/op	   0.00 MB/s	       1 B/op	       0 allocs/op
BenchmarkDecoder_DecoderReset/asyoulik.txt.zst/buffer-single-32      	    4995	    243551 ns/op	   0.00 MB/s	       1 B/op	       0 allocs/op
BenchmarkDecoder_DecoderReset/alice29.txt.zst/stream-32              	    7500	    150852 ns/op	   0.01 MB/s	   81302 B/op	      16 allocs/op
BenchmarkDecoder_DecoderReset/alice29.txt.zst/stream-single-32       	30316350	        38.84 ns/op	  25.75 MB/s	       0 B/op	       0 allocs/op
BenchmarkDecoder_DecoderReset/alice29.txt.zst/buffer-32              	    4132	    283894 ns/op	   0.00 MB/s	       6 B/op	       0 allocs/op
BenchmarkDecoder_DecoderReset/alice29.txt.zst/buffer-single-32       	    4282	    283968 ns/op	   0.00 MB/s	       3 B/op	       0 allocs/op
BenchmarkDecoder_DecoderReset/html_x_4.zst/stream-32                 	   14912	     79797 ns/op	   0.01 MB/s	  209031 B/op	      16 allocs/op
BenchmarkDecoder_DecoderReset/html_x_4.zst/stream-single-32          	29216841	        39.40 ns/op	  25.38 MB/s	       0 B/op	       0 allocs/op
BenchmarkDecoder_DecoderReset/html_x_4.zst/buffer-32                 	    5308	    225698 ns/op	   0.00 MB/s	       2 B/op	       0 allocs/op
BenchmarkDecoder_DecoderReset/html_x_4.zst/buffer-single-32          	    5151	    224095 ns/op	   0.00 MB/s	       1 B/op	       0 allocs/op
BenchmarkDecoder_DecoderReset/paper-100k.pdf.zst/stream-32           	   41679	     28677 ns/op	   0.03 MB/s	   52505 B/op	      15 allocs/op
BenchmarkDecoder_DecoderReset/paper-100k.pdf.zst/stream-single-32    	29281075	        39.03 ns/op	  25.62 MB/s	       0 B/op	       0 allocs/op
BenchmarkDecoder_DecoderReset/paper-100k.pdf.zst/buffer-32           	   69525	     17038 ns/op	   0.06 MB/s	       0 B/op	       0 allocs/op
BenchmarkDecoder_DecoderReset/paper-100k.pdf.zst/buffer-single-32    	   70429	     17058 ns/op	   0.06 MB/s	       0 B/op	       0 allocs/op
BenchmarkDecoder_DecoderReset/fireworks.jpeg.zst/stream-32           	   50344	     24352 ns/op	   0.04 MB/s	   64293 B/op	      15 allocs/op
BenchmarkDecoder_DecoderReset/fireworks.jpeg.zst/stream-single-32    	28991318	        40.39 ns/op	  24.76 MB/s	       0 B/op	       0 allocs/op
BenchmarkDecoder_DecoderReset/fireworks.jpeg.zst/buffer-32           	  125324	      9517 ns/op	   0.11 MB/s	       0 B/op	       0 allocs/op
BenchmarkDecoder_DecoderReset/fireworks.jpeg.zst/buffer-single-32    	  125260	      9473 ns/op	   0.11 MB/s	       0 B/op	       0 allocs/op
BenchmarkDecoder_DecoderReset/urls.10K.zst/stream-32                 	    6666	    175583 ns/op	   0.01 MB/s	  351143 B/op	      16 allocs/op
BenchmarkDecoder_DecoderReset/urls.10K.zst/stream-single-32          	29149278	        38.66 ns/op	  25.87 MB/s	       0 B/op	       0 allocs/op
BenchmarkDecoder_DecoderReset/urls.10K.zst/buffer-32                 	    1369	    866145 ns/op	   0.00 MB/s	       6 B/op	       0 allocs/op
BenchmarkDecoder_DecoderReset/urls.10K.zst/buffer-single-32          	    1376	    867065 ns/op	   0.00 MB/s	       6 B/op	       0 allocs/op
BenchmarkDecoder_DecoderReset/html.zst/stream-32                     	   22653	     52693 ns/op	   0.02 MB/s	   52617 B/op	      16 allocs/op
BenchmarkDecoder_DecoderReset/html.zst/stream-single-32              	29974896	        39.97 ns/op	  25.02 MB/s	       0 B/op	       0 allocs/op
BenchmarkDecoder_DecoderReset/html.zst/buffer-32                     	   15141	     78948 ns/op	   0.01 MB/s	       0 B/op	       0 allocs/op
BenchmarkDecoder_DecoderReset/html.zst/buffer-single-32              	   15177	     78995 ns/op	   0.01 MB/s	       0 B/op	       0 allocs/op
BenchmarkDecoder_DecoderReset/comp-data.bin.zst/stream-32            	   79095	     15288 ns/op	   0.07 MB/s	    3212 B/op	      15 allocs/op
BenchmarkDecoder_DecoderReset/comp-data.bin.zst/stream-single-32     	29901622	        38.82 ns/op	  25.76 MB/s	       0 B/op	       0 allocs/op
BenchmarkDecoder_DecoderReset/comp-data.bin.zst/buffer-32            	  163027	      7268 ns/op	   0.14 MB/s	       0 B/op	       0 allocs/op
BenchmarkDecoder_DecoderReset/comp-data.bin.zst/buffer-single-32     	  166342	      7244 ns/op	   0.14 MB/s	       0 B/op	       0 allocs/op
PASS
ok  	github.com/klauspost/compress/zstd	64.425s
goos: windows
goarch: amd64
pkg: github.com/klauspost/compress/zstd
cpu: AMD Ryzen 9 3950X 16-Core Processor
BenchmarkDecoder_DecoderNewNoRead/kppkn.gtb.zst/stream-32  	    7988	    195894 ns/op	   0.01 MB/s	  515545 B/op	      37 allocs/op
BenchmarkDecoder_DecoderNewNoRead/kppkn.gtb.zst/stream-single-32         	 1000000	      1047 ns/op	   0.96 MB/s	    1896 B/op	       8 allocs/op
BenchmarkDecoder_DecoderNewNoRead/kppkn.gtb.zst/buffer-32                	    3194	    369579 ns/op	   0.00 MB/s	  401324 B/op	      30 allocs/op
BenchmarkDecoder_DecoderNewNoRead/kppkn.gtb.zst/buffer-single-32         	    3249	    367261 ns/op	   0.00 MB/s	  398799 B/op	      24 allocs/op
BenchmarkDecoder_DecoderNewNoRead/geo.protodata.zst/stream-32            	   12852	     88637 ns/op	   0.01 MB/s	  237922 B/op	      35 allocs/op
BenchmarkDecoder_DecoderNewNoRead/geo.protodata.zst/stream-single-32     	 1000000	      1079 ns/op	   0.93 MB/s	    1896 B/op	       8 allocs/op
BenchmarkDecoder_DecoderNewNoRead/geo.protodata.zst/buffer-32            	    8000	    133408 ns/op	   0.01 MB/s	  303786 B/op	      30 allocs/op
BenchmarkDecoder_DecoderNewNoRead/geo.protodata.zst/buffer-single-32     	    9230	    130159 ns/op	   0.01 MB/s	  301251 B/op	      24 allocs/op
BenchmarkDecoder_DecoderNewNoRead/plrabn12.txt.zst/stream-32             	    3632	    296785 ns/op	   0.00 MB/s	 1049748 B/op	      37 allocs/op
BenchmarkDecoder_DecoderNewNoRead/plrabn12.txt.zst/stream-single-32      	 1263639	       945.8 ns/op	   1.06 MB/s	    1896 B/op	       8 allocs/op
BenchmarkDecoder_DecoderNewNoRead/plrabn12.txt.zst/buffer-32             	    1108	   1051663 ns/op	   0.00 MB/s	  740722 B/op	      30 allocs/op
BenchmarkDecoder_DecoderNewNoRead/plrabn12.txt.zst/buffer-single-32      	    1128	   1042940 ns/op	   0.00 MB/s	  738178 B/op	      24 allocs/op
BenchmarkDecoder_DecoderNewNoRead/lcet10.txt.zst/stream-32               	    4212	    264847 ns/op	   0.00 MB/s	  973559 B/op	      37 allocs/op
BenchmarkDecoder_DecoderNewNoRead/lcet10.txt.zst/stream-single-32        	 1324858	       898.7 ns/op	   1.11 MB/s	    1896 B/op	       8 allocs/op
BenchmarkDecoder_DecoderNewNoRead/lcet10.txt.zst/buffer-32               	    1470	    801395 ns/op	   0.00 MB/s	  677042 B/op	      30 allocs/op
BenchmarkDecoder_DecoderNewNoRead/lcet10.txt.zst/buffer-single-32        	    1501	    795344 ns/op	   0.00 MB/s	  674519 B/op	      24 allocs/op
BenchmarkDecoder_DecoderNewNoRead/asyoulik.txt.zst/stream-32             	    8235	    157740 ns/op	   0.01 MB/s	  417782 B/op	      35 allocs/op
BenchmarkDecoder_DecoderNewNoRead/asyoulik.txt.zst/stream-single-32      	 1314586	       911.5 ns/op	   1.10 MB/s	    1896 B/op	       8 allocs/op
BenchmarkDecoder_DecoderNewNoRead/asyoulik.txt.zst/buffer-32             	    3868	    306632 ns/op	   0.00 MB/s	  379500 B/op	      30 allocs/op
BenchmarkDecoder_DecoderNewNoRead/asyoulik.txt.zst/buffer-single-32      	    3829	    303607 ns/op	   0.00 MB/s	  376967 B/op	      24 allocs/op
BenchmarkDecoder_DecoderNewNoRead/alice29.txt.zst/stream-32              	    7500	    179613 ns/op	   0.01 MB/s	  534965 B/op	      36 allocs/op
BenchmarkDecoder_DecoderNewNoRead/alice29.txt.zst/stream-single-32       	 1324558	       908.0 ns/op	   1.10 MB/s	    1896 B/op	       8 allocs/op
BenchmarkDecoder_DecoderNewNoRead/alice29.txt.zst/buffer-32              	    3234	    355589 ns/op	   0.00 MB/s	  402568 B/op	      32 allocs/op
BenchmarkDecoder_DecoderNewNoRead/alice29.txt.zst/buffer-single-32       	    3325	    351937 ns/op	   0.00 MB/s	  400027 B/op	      26 allocs/op
BenchmarkDecoder_DecoderNewNoRead/html_x_4.zst/stream-32                 	    9224	    131240 ns/op	   0.01 MB/s	  612563 B/op	      36 allocs/op
BenchmarkDecoder_DecoderNewNoRead/html_x_4.zst/stream-single-32          	 1297621	       914.3 ns/op	   1.09 MB/s	    1896 B/op	       8 allocs/op
BenchmarkDecoder_DecoderNewNoRead/html_x_4.zst/buffer-32                 	    3514	    317832 ns/op	   0.00 MB/s	  601999 B/op	      27 allocs/op
BenchmarkDecoder_DecoderNewNoRead/html_x_4.zst/buffer-single-32          	    3790	    314895 ns/op	   0.00 MB/s	  599501 B/op	      22 allocs/op
BenchmarkDecoder_DecoderNewNoRead/paper-100k.pdf.zst/stream-32           	   21548	     55774 ns/op	   0.02 MB/s	  218649 B/op	      33 allocs/op
BenchmarkDecoder_DecoderNewNoRead/paper-100k.pdf.zst/stream-single-32    	 1258678	       950.9 ns/op	   1.05 MB/s	    1896 B/op	       8 allocs/op
BenchmarkDecoder_DecoderNewNoRead/paper-100k.pdf.zst/buffer-32           	   20197	     60585 ns/op	   0.02 MB/s	  323397 B/op	      21 allocs/op
BenchmarkDecoder_DecoderNewNoRead/paper-100k.pdf.zst/buffer-single-32    	   21322	     57519 ns/op	   0.02 MB/s	  320867 B/op	      15 allocs/op
BenchmarkDecoder_DecoderNewNoRead/fireworks.jpeg.zst/stream-32           	   26732	     44428 ns/op	   0.02 MB/s	  199431 B/op	      31 allocs/op
BenchmarkDecoder_DecoderNewNoRead/fireworks.jpeg.zst/stream-single-32    	 1252455	       942.8 ns/op	   1.06 MB/s	    1896 B/op	       8 allocs/op
BenchmarkDecoder_DecoderNewNoRead/fireworks.jpeg.zst/buffer-32           	   28455	     43892 ns/op	   0.02 MB/s	  266064 B/op	      16 allocs/op
BenchmarkDecoder_DecoderNewNoRead/fireworks.jpeg.zst/buffer-single-32    	   27884	     40087 ns/op	   0.02 MB/s	  263544 B/op	      10 allocs/op
BenchmarkDecoder_DecoderNewNoRead/urls.10K.zst/stream-32                 	    4940	    235695 ns/op	   0.00 MB/s	 1056938 B/op	      37 allocs/op
BenchmarkDecoder_DecoderNewNoRead/urls.10K.zst/stream-single-32          	 1315772	       906.6 ns/op	   1.10 MB/s	    1896 B/op	       8 allocs/op
BenchmarkDecoder_DecoderNewNoRead/urls.10K.zst/buffer-32                 	    1176	   1010317 ns/op	   0.00 MB/s	  953690 B/op	      30 allocs/op
BenchmarkDecoder_DecoderNewNoRead/urls.10K.zst/buffer-single-32          	    1196	   1003813 ns/op	   0.00 MB/s	  951174 B/op	      24 allocs/op
BenchmarkDecoder_DecoderNewNoRead/html.zst/stream-32                     	   14635	     82833 ns/op	   0.01 MB/s	  222690 B/op	      34 allocs/op
BenchmarkDecoder_DecoderNewNoRead/html.zst/stream-single-32              	 1286979	       924.4 ns/op	   1.08 MB/s	    1896 B/op	       8 allocs/op
BenchmarkDecoder_DecoderNewNoRead/html.zst/buffer-32                     	    9231	    126209 ns/op	   0.01 MB/s	  272812 B/op	      30 allocs/op
BenchmarkDecoder_DecoderNewNoRead/html.zst/buffer-single-32              	    9384	    124360 ns/op	   0.01 MB/s	  270286 B/op	      24 allocs/op
BenchmarkDecoder_DecoderNewNoRead/comp-data.bin.zst/stream-32            	   56230	     21039 ns/op	   0.05 MB/s	   16200 B/op	      31 allocs/op
BenchmarkDecoder_DecoderNewNoRead/comp-data.bin.zst/stream-single-32     	 1240980	       948.6 ns/op	   1.05 MB/s	    1896 B/op	       8 allocs/op
BenchmarkDecoder_DecoderNewNoRead/comp-data.bin.zst/buffer-32            	   63855	     18989 ns/op	   0.05 MB/s	   46079 B/op	      29 allocs/op
BenchmarkDecoder_DecoderNewNoRead/comp-data.bin.zst/buffer-single-32     	   69026	     17481 ns/op	   0.06 MB/s	   43553 B/op	      23 allocs/op
PASS
ok  	github.com/klauspost/compress/zstd	74.269s
```
  • Loading branch information
klauspost committed Sep 25, 2022
1 parent d8bd841 commit c8492d6
Showing 1 changed file with 133 additions and 0 deletions.
133 changes: 133 additions & 0 deletions zstd/decoder_test.go
Expand Up @@ -1239,6 +1239,139 @@ func BenchmarkDecoder_DecoderSmall(b *testing.B) {
}
}

func BenchmarkDecoder_DecoderReset(b *testing.B) {
zr := testCreateZipReader("testdata/benchdecoder.zip", b)
dec, err := NewReader(nil, WithDecodeBuffersBelow(0))
if err != nil {
b.Fatal(err)
return
}
defer dec.Close()
bench := func(name string, b *testing.B, opts []DOption, in, want []byte) {
b.Helper()
buf := &bytesReader{Reader: bytes.NewReader(in), buf: in}
dec, err := NewReader(nil, opts...)
if err != nil {
b.Fatal(err)
return
}
defer dec.Close()
b.Run(name, func(b *testing.B) {
b.SetBytes(1)
b.ReportAllocs()
b.ResetTimer()
for i := 0; i < b.N; i++ {
buf.Reset(in)
err = dec.Reset(buf)
if err != nil {
b.Fatal(err)
}
}
})
}
for _, tt := range zr.File {
if !strings.HasSuffix(tt.Name, ".zst") {
continue
}
b.Run(tt.Name, func(b *testing.B) {
r, err := tt.Open()
if err != nil {
b.Fatal(err)
}
defer r.Close()
in, err := io.ReadAll(r)
if err != nil {
b.Fatal(err)
}

got, err := dec.DecodeAll(in, nil)
if err != nil {
b.Fatal(err)
}
// Disable buffers:
bench("stream", b, []DOption{WithDecodeBuffersBelow(0)}, in, got)
bench("stream-single", b, []DOption{WithDecodeBuffersBelow(0), WithDecoderConcurrency(1)}, in, got)
// Force buffers:
bench("buffer", b, []DOption{WithDecodeBuffersBelow(1 << 30)}, in, got)
bench("buffer-single", b, []DOption{WithDecodeBuffersBelow(1 << 30), WithDecoderConcurrency(1)}, in, got)
})
}
}

type bytesReader struct {
*bytes.Reader
buf []byte
}

func (b *bytesReader) Bytes() []byte {
n := b.Reader.Len()
if n > len(b.buf) {
panic("buffer mismatch")
}
return b.buf[len(b.buf)-n:]
}

func (b *bytesReader) Reset(data []byte) {
b.buf = data
b.Reader.Reset(data)
}

func BenchmarkDecoder_DecoderNewNoRead(b *testing.B) {
zr := testCreateZipReader("testdata/benchdecoder.zip", b)
dec, err := NewReader(nil)
if err != nil {
b.Fatal(err)
return
}
defer dec.Close()

bench := func(name string, b *testing.B, opts []DOption, in, want []byte) {
b.Helper()
b.Run(name, func(b *testing.B) {
buf := &bytesReader{Reader: bytes.NewReader(in), buf: in}
b.SetBytes(1)
b.ReportAllocs()
b.ResetTimer()
for i := 0; i < b.N; i++ {
buf.Reset(in)
dec, err := NewReader(buf, opts...)
if err != nil {
b.Fatal(err)
return
}
dec.Close()
}
})
}
for _, tt := range zr.File {
if !strings.HasSuffix(tt.Name, ".zst") {
continue
}
b.Run(tt.Name, func(b *testing.B) {
r, err := tt.Open()
if err != nil {
b.Fatal(err)
}
defer r.Close()
in, err := io.ReadAll(r)
if err != nil {
b.Fatal(err)
}

got, err := dec.DecodeAll(in, nil)
if err != nil {
b.Fatal(err)
}
// Disable buffers:
bench("stream", b, []DOption{WithDecodeBuffersBelow(0)}, in, got)
bench("stream-single", b, []DOption{WithDecodeBuffersBelow(0), WithDecoderConcurrency(1)}, in, got)
// Force buffers:
bench("buffer", b, []DOption{WithDecodeBuffersBelow(1 << 30)}, in, got)
bench("buffer-single", b, []DOption{WithDecodeBuffersBelow(1 << 30), WithDecoderConcurrency(1)}, in, got)
})
}
}

func BenchmarkDecoder_DecodeAll(b *testing.B) {
zr := testCreateZipReader("testdata/benchdecoder.zip", b)
dec, err := NewReader(nil, WithDecoderConcurrency(1))
Expand Down

0 comments on commit c8492d6

Please sign in to comment.