multiformats / go-multihash

Multihash implementation in Go
MIT License
239 stars 57 forks source link

sha256: drop minio in favor of crypto/sha256 for go1.21 and above #173

Closed Jorropo closed 1 year ago

Jorropo commented 1 year ago

In go1.21 the go std has a new SHANI accelerated rountine (just like minio's sha256). See golang/go#50543. Reduce the code surface by dropping what is now a redondent librairy.

Benchmarks using go1.21 and go1.20 shows no significant difference between minio and the std for sha256:

name                         old time/op    new time/op    delta
SumAllLarge/sha2-256-12        8.63ms ± 3%    8.63ms ± 1%      ~     (p=0.220 n=20+17)
SumAllLarge/sha2-512-12        23.1ms ± 3%    23.0ms ± 3%      ~     (p=0.361 n=18+20)
SumAllLarge/dbl-sha2-256-12    36.0ms ± 4%     8.6ms ± 4%   -76.16%  (p=0.000 n=20+20)

name                         old speed      new speed      delta
SumAllLarge/sha2-256-12      1.94GB/s ± 4%  1.95GB/s ± 1%      ~     (p=0.220 n=20+17)
SumAllLarge/sha2-512-12       725MB/s ± 3%   729MB/s ± 3%      ~     (p=0.350 n=18+20)
SumAllLarge/dbl-sha2-256-12   467MB/s ± 4%  1958MB/s ± 4%  +319.53%  (p=0.000 n=20+20)

dlb-sha2-256 quadrupled in speed because it was never wired to use minio's sha256 implementation and thus was brought back up to speed by crypto/sha256's improvement.

I think we should remove github.com/multiformats/go-multihash/register/miniosha256 one go1.22 is released (~1 year) since it would be purposeless, we could also stub it to github.com/multiformats/go-multihash/register/sha256 for all versions but no one imports it directly.