mirror of
https://gitea.com/Lydanne/buildx.git
synced 2025-05-30 01:15:45 +08:00

Removes gogo/protobuf from buildx and updates to a version of moby/buildkit where gogo is removed. This also changes how the proto files are generated. This is because newer versions of protobuf are more strict about name conflicts. If two files have the same name (even if they are relative paths) and are used in different protoc commands, they'll conflict in the registry. Since protobuf file generation doesn't work very well with `paths=source_relative`, this removes the `go:generate` expression and just relies on the dockerfile to perform the generation. Signed-off-by: Jonathan A. Sternberg <jonathan.sternberg@docker.com>
75 lines
2.4 KiB
Markdown
75 lines
2.4 KiB
Markdown
# xxhash
|
|
|
|
[](https://pkg.go.dev/github.com/cespare/xxhash/v2)
|
|
[](https://github.com/cespare/xxhash/actions/workflows/test.yml)
|
|
|
|
xxhash is a Go implementation of the 64-bit [xxHash] algorithm, XXH64. This is a
|
|
high-quality hashing algorithm that is much faster than anything in the Go
|
|
standard library.
|
|
|
|
This package provides a straightforward API:
|
|
|
|
```
|
|
func Sum64(b []byte) uint64
|
|
func Sum64String(s string) uint64
|
|
type Digest struct{ ... }
|
|
func New() *Digest
|
|
```
|
|
|
|
The `Digest` type implements hash.Hash64. Its key methods are:
|
|
|
|
```
|
|
func (*Digest) Write([]byte) (int, error)
|
|
func (*Digest) WriteString(string) (int, error)
|
|
func (*Digest) Sum64() uint64
|
|
```
|
|
|
|
The package is written with optimized pure Go and also contains even faster
|
|
assembly implementations for amd64 and arm64. If desired, the `purego` build tag
|
|
opts into using the Go code even on those architectures.
|
|
|
|
[xxHash]: http://cyan4973.github.io/xxHash/
|
|
|
|
## Compatibility
|
|
|
|
This package is in a module and the latest code is in version 2 of the module.
|
|
You need a version of Go with at least "minimal module compatibility" to use
|
|
github.com/cespare/xxhash/v2:
|
|
|
|
* 1.9.7+ for Go 1.9
|
|
* 1.10.3+ for Go 1.10
|
|
* Go 1.11 or later
|
|
|
|
I recommend using the latest release of Go.
|
|
|
|
## Benchmarks
|
|
|
|
Here are some quick benchmarks comparing the pure-Go and assembly
|
|
implementations of Sum64.
|
|
|
|
| input size | purego | asm |
|
|
| ---------- | --------- | --------- |
|
|
| 4 B | 1.3 GB/s | 1.2 GB/s |
|
|
| 16 B | 2.9 GB/s | 3.5 GB/s |
|
|
| 100 B | 6.9 GB/s | 8.1 GB/s |
|
|
| 4 KB | 11.7 GB/s | 16.7 GB/s |
|
|
| 10 MB | 12.0 GB/s | 17.3 GB/s |
|
|
|
|
These numbers were generated on Ubuntu 20.04 with an Intel Xeon Platinum 8252C
|
|
CPU using the following commands under Go 1.19.2:
|
|
|
|
```
|
|
benchstat <(go test -tags purego -benchtime 500ms -count 15 -bench 'Sum64$')
|
|
benchstat <(go test -benchtime 500ms -count 15 -bench 'Sum64$')
|
|
```
|
|
|
|
## Projects using this package
|
|
|
|
- [InfluxDB](https://github.com/influxdata/influxdb)
|
|
- [Prometheus](https://github.com/prometheus/prometheus)
|
|
- [VictoriaMetrics](https://github.com/VictoriaMetrics/VictoriaMetrics)
|
|
- [FreeCache](https://github.com/coocood/freecache)
|
|
- [FastCache](https://github.com/VictoriaMetrics/fastcache)
|
|
- [Ristretto](https://github.com/dgraph-io/ristretto)
|
|
- [Badger](https://github.com/dgraph-io/badger)
|