Skip to content

Instantly share code, notes, and snippets.

@gbbr
Created August 6, 2020 06:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gbbr/f2502b4e81633daec10459c0036c4e0c to your computer and use it in GitHub Desktop.
Save gbbr/f2502b4e81633daec10459c0036c4e0c to your computer and use it in GitHub Desktop.
Benchmarking LZ4 vs GZIP
package main
import (
"bytes"
"compress/gzip"
"io"
"io/ioutil"
"testing"
"github.com/pierrec/lz4"
)
func BenchmarkPacking(b *testing.B) {
var buf bytes.Buffer
slurp, err := ioutil.ReadFile("out.pb")
if err != nil {
b.Fatal(err)
}
b.Run("gzip", func(b *testing.B) {
gzipw, err := gzip.NewWriterLevel(&buf, gzip.BestSpeed)
if err != nil {
b.Fatal(err)
}
b.ResetTimer()
b.ReportAllocs()
var sz int
for i := 0; i < b.N; i++ {
buf.Reset()
gzipw.Reset(&buf)
if _, err := gzipw.Write(slurp); err != nil {
b.Fatal(err)
}
if err := gzipw.Flush(); err != nil {
b.Fatal(err)
}
if sz == 0 {
sz = buf.Len()
}
}
//fmt.Println("\ngzip: ", float64(sz)/float64(len(slurp))*100, "%")
})
b.Run("lz4", func(b *testing.B) {
lz4w := lz4.NewWriter(&buf)
b.ResetTimer()
b.ReportAllocs()
var sz int
for i := 0; i < b.N; i++ {
buf.Reset()
lz4w.Reset(&buf)
if _, err := lz4w.Write(slurp); err != nil {
b.Fatal(err)
}
if err := lz4w.Flush(); err != nil {
b.Fatal(err)
}
if sz == 0 {
sz = buf.Len()
}
}
//fmt.Println("\nlz4: ", float64(sz)/float64(len(slurp))*100, "%")
})
}
func BenchmarkUnpacking(b *testing.B) {
var out bytes.Buffer
slurp, err := ioutil.ReadFile("out.pb")
if err != nil {
b.Fatal(err)
}
b.Run("gzip", func(b *testing.B) {
var packed bytes.Buffer
gzipw, err := gzip.NewWriterLevel(&packed, gzip.BestSpeed)
if err != nil {
b.Fatal(err)
}
if _, err := gzipw.Write(slurp); err != nil {
b.Fatal(err)
}
if err := gzipw.Close(); err != nil {
b.Fatal(err)
}
gzipr, err := gzip.NewReader(bytes.NewBuffer(packed.Bytes()))
if err != nil {
b.Fatal(err)
}
defer gzipr.Close()
b.ResetTimer()
b.ReportAllocs()
for i := 0; i < b.N; i++ {
gzipr.Reset(bytes.NewBuffer(packed.Bytes()))
out.Reset()
_, err := io.Copy(&out, gzipr)
if err != nil {
b.Fatal(err)
}
}
})
b.Run("lz4", func(b *testing.B) {
var packed bytes.Buffer
lz4w := lz4.NewWriter(&packed)
if _, err := lz4w.Write(slurp); err != nil {
b.Fatal(err)
}
if err := lz4w.Close(); err != nil {
b.Fatal(err)
}
lz4r := lz4.NewReader(bytes.NewBuffer(packed.Bytes()))
b.ResetTimer()
b.ReportAllocs()
for i := 0; i < b.N; i++ {
lz4r.Reset(bytes.NewBuffer(packed.Bytes()))
out.Reset()
_, err := io.Copy(&out, lz4r)
if err != nil {
b.Fatal(err)
}
}
})
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment