William Kurkian | ea86948 | 2019-04-09 15:16:11 -0400 | [diff] [blame^] | 1 | The Snappy compression format in the Go programming language. |
| 2 | |
| 3 | To download and install from source: |
| 4 | $ go get github.com/golang/snappy |
| 5 | |
| 6 | Unless otherwise noted, the Snappy-Go source files are distributed |
| 7 | under the BSD-style license found in the LICENSE file. |
| 8 | |
| 9 | |
| 10 | |
| 11 | Benchmarks. |
| 12 | |
| 13 | The golang/snappy benchmarks include compressing (Z) and decompressing (U) ten |
| 14 | or so files, the same set used by the C++ Snappy code (github.com/google/snappy |
| 15 | and note the "google", not "golang"). On an "Intel(R) Core(TM) i7-3770 CPU @ |
| 16 | 3.40GHz", Go's GOARCH=amd64 numbers as of 2016-05-29: |
| 17 | |
| 18 | "go test -test.bench=." |
| 19 | |
| 20 | _UFlat0-8 2.19GB/s ± 0% html |
| 21 | _UFlat1-8 1.41GB/s ± 0% urls |
| 22 | _UFlat2-8 23.5GB/s ± 2% jpg |
| 23 | _UFlat3-8 1.91GB/s ± 0% jpg_200 |
| 24 | _UFlat4-8 14.0GB/s ± 1% pdf |
| 25 | _UFlat5-8 1.97GB/s ± 0% html4 |
| 26 | _UFlat6-8 814MB/s ± 0% txt1 |
| 27 | _UFlat7-8 785MB/s ± 0% txt2 |
| 28 | _UFlat8-8 857MB/s ± 0% txt3 |
| 29 | _UFlat9-8 719MB/s ± 1% txt4 |
| 30 | _UFlat10-8 2.84GB/s ± 0% pb |
| 31 | _UFlat11-8 1.05GB/s ± 0% gaviota |
| 32 | |
| 33 | _ZFlat0-8 1.04GB/s ± 0% html |
| 34 | _ZFlat1-8 534MB/s ± 0% urls |
| 35 | _ZFlat2-8 15.7GB/s ± 1% jpg |
| 36 | _ZFlat3-8 740MB/s ± 3% jpg_200 |
| 37 | _ZFlat4-8 9.20GB/s ± 1% pdf |
| 38 | _ZFlat5-8 991MB/s ± 0% html4 |
| 39 | _ZFlat6-8 379MB/s ± 0% txt1 |
| 40 | _ZFlat7-8 352MB/s ± 0% txt2 |
| 41 | _ZFlat8-8 396MB/s ± 1% txt3 |
| 42 | _ZFlat9-8 327MB/s ± 1% txt4 |
| 43 | _ZFlat10-8 1.33GB/s ± 1% pb |
| 44 | _ZFlat11-8 605MB/s ± 1% gaviota |
| 45 | |
| 46 | |
| 47 | |
| 48 | "go test -test.bench=. -tags=noasm" |
| 49 | |
| 50 | _UFlat0-8 621MB/s ± 2% html |
| 51 | _UFlat1-8 494MB/s ± 1% urls |
| 52 | _UFlat2-8 23.2GB/s ± 1% jpg |
| 53 | _UFlat3-8 1.12GB/s ± 1% jpg_200 |
| 54 | _UFlat4-8 4.35GB/s ± 1% pdf |
| 55 | _UFlat5-8 609MB/s ± 0% html4 |
| 56 | _UFlat6-8 296MB/s ± 0% txt1 |
| 57 | _UFlat7-8 288MB/s ± 0% txt2 |
| 58 | _UFlat8-8 309MB/s ± 1% txt3 |
| 59 | _UFlat9-8 280MB/s ± 1% txt4 |
| 60 | _UFlat10-8 753MB/s ± 0% pb |
| 61 | _UFlat11-8 400MB/s ± 0% gaviota |
| 62 | |
| 63 | _ZFlat0-8 409MB/s ± 1% html |
| 64 | _ZFlat1-8 250MB/s ± 1% urls |
| 65 | _ZFlat2-8 12.3GB/s ± 1% jpg |
| 66 | _ZFlat3-8 132MB/s ± 0% jpg_200 |
| 67 | _ZFlat4-8 2.92GB/s ± 0% pdf |
| 68 | _ZFlat5-8 405MB/s ± 1% html4 |
| 69 | _ZFlat6-8 179MB/s ± 1% txt1 |
| 70 | _ZFlat7-8 170MB/s ± 1% txt2 |
| 71 | _ZFlat8-8 189MB/s ± 1% txt3 |
| 72 | _ZFlat9-8 164MB/s ± 1% txt4 |
| 73 | _ZFlat10-8 479MB/s ± 1% pb |
| 74 | _ZFlat11-8 270MB/s ± 1% gaviota |
| 75 | |
| 76 | |
| 77 | |
| 78 | For comparison (Go's encoded output is byte-for-byte identical to C++'s), here |
| 79 | are the numbers from C++ Snappy's |
| 80 | |
| 81 | make CXXFLAGS="-O2 -DNDEBUG -g" clean snappy_unittest.log && cat snappy_unittest.log |
| 82 | |
| 83 | BM_UFlat/0 2.4GB/s html |
| 84 | BM_UFlat/1 1.4GB/s urls |
| 85 | BM_UFlat/2 21.8GB/s jpg |
| 86 | BM_UFlat/3 1.5GB/s jpg_200 |
| 87 | BM_UFlat/4 13.3GB/s pdf |
| 88 | BM_UFlat/5 2.1GB/s html4 |
| 89 | BM_UFlat/6 1.0GB/s txt1 |
| 90 | BM_UFlat/7 959.4MB/s txt2 |
| 91 | BM_UFlat/8 1.0GB/s txt3 |
| 92 | BM_UFlat/9 864.5MB/s txt4 |
| 93 | BM_UFlat/10 2.9GB/s pb |
| 94 | BM_UFlat/11 1.2GB/s gaviota |
| 95 | |
| 96 | BM_ZFlat/0 944.3MB/s html (22.31 %) |
| 97 | BM_ZFlat/1 501.6MB/s urls (47.78 %) |
| 98 | BM_ZFlat/2 14.3GB/s jpg (99.95 %) |
| 99 | BM_ZFlat/3 538.3MB/s jpg_200 (73.00 %) |
| 100 | BM_ZFlat/4 8.3GB/s pdf (83.30 %) |
| 101 | BM_ZFlat/5 903.5MB/s html4 (22.52 %) |
| 102 | BM_ZFlat/6 336.0MB/s txt1 (57.88 %) |
| 103 | BM_ZFlat/7 312.3MB/s txt2 (61.91 %) |
| 104 | BM_ZFlat/8 353.1MB/s txt3 (54.99 %) |
| 105 | BM_ZFlat/9 289.9MB/s txt4 (66.26 %) |
| 106 | BM_ZFlat/10 1.2GB/s pb (19.68 %) |
| 107 | BM_ZFlat/11 527.4MB/s gaviota (37.72 %) |