-
Klaus Post authored
*Add a (fast) random data reader. `rng.NewReader()` will return a reader that will return an endless stream of pseudo-random data. The Reader supports seeking and arbitrary async reads from io.ReadAt, and stream length limiting. Adds amd64 asm. Speed with asm en/disabled and unsafe en/disabled: ``` λ go test -bench=. -cpu=1 goos: windows goarch: amd64 pkg: github.com/minio/pkg/v3/rng cpu: AMD Ryzen 9 3950X 16-Core Processor BenchmarkReader/1000 23646950 50.32 ns/op 19871.36 MB/s 0 B/op 0 allocs/op BenchmarkReader/1024 42255306 28.23 ns/op 36274.08 MB/s 0 B/op 0 allocs/op BenchmarkReader/16384 4336626 276.9 ns/op 59165.28 MB/s 0 B/op 0 allocs/op BenchmarkReader/1048576 57505 20947 ns/op 50058.47 MB/s 0 B/op 0 allocs/op BenchmarkReaderReadAt/1000 27001666 44.27 ns/op 22588.01 MB/s 0 B/op 0 allocs/op BenchmarkReaderReadAt/1024 44081182 25.72 ns/op 39806.74 MB/s 0 B/op 0 allocs/op BenchmarkReaderReadAt/16384 4428068 270.9 ns/op 60475.56 MB/s 0 B/op 0 allocs/op BenchmarkReaderReadAt/1048576 57236 20838 ns/op 50319.23 MB/s 0 B/op 0 allocs/op λ go test -bench=. -cpu=1 -tags=noasm goos: windows goarch: amd64 pkg: github.com/minio/pkg/v3/rng cpu: AMD Ryzen 9 3950X 16-Core Processor BenchmarkReader/1000 15822158 75.27 ns/op 13285.59 MB/s 0 B/op 0 allocs/op BenchmarkReader/1024 21101349 56.99 ns/op 17968.17 MB/s 0 B/op 0 allocs/op BenchmarkReader/16384 1642585 730.1 ns/op 22441.92 MB/s 0 B/op 0 allocs/op BenchmarkReader/1048576 25862 46759 ns/op 22425.17 MB/s 0 B/op 0 allocs/op BenchmarkReaderReadAt/1000 17435347 67.95 ns/op 14716.80 MB/s 0 B/op 0 allocs/op BenchmarkReaderReadAt/1024 22503600 53.40 ns/op 19175.20 MB/s 0 B/op 0 allocs/op BenchmarkReaderReadAt/16384 1641862 726.3 ns/op 22558.27 MB/s 0 B/op 0 allocs/op BenchmarkReaderReadAt/1048576 25826 46254 ns/op 22669.75 MB/s 0 B/op 0 allocs/op λ go test -bench=. -cpu=1 -tags=noasm,nounsafe goos: windows goarch: amd64 pkg: github.com/minio/pkg/v3/rng cpu: AMD Ryzen 9 3950X 16-Core Processor BenchmarkReader/1000 12971710 92.63 ns/op 10795.93 MB/s 0 B/op 0 allocs/op BenchmarkReader/1024 16066579 74.89 ns/op 13673.14 MB/s 0 B/op 0 allocs/op BenchmarkReader/16384 1000000 1013 ns/op 16180.70 MB/s 0 B/op 0 allocs/op BenchmarkReader/1048576 18326 65635 ns/op 15975.96 MB/s 0 B/op 0 allocs/op BenchmarkReaderReadAt/1000 13763456 85.36 ns/op 11715.42 MB/s 0 B/op 0 allocs/op BenchmarkReaderReadAt/1024 16392904 71.93 ns/op 14235.23 MB/s 0 B/op 0 allocs/op BenchmarkReaderReadAt/16384 1000000 1019 ns/op 16083.23 MB/s 0 B/op 0 allocs/op BenchmarkReaderReadAt/1048576 18481 64762 ns/op 16191.16 MB/s 0 B/op 0 allocs/op ```
Klaus Post authored*Add a (fast) random data reader. `rng.NewReader()` will return a reader that will return an endless stream of pseudo-random data. The Reader supports seeking and arbitrary async reads from io.ReadAt, and stream length limiting. Adds amd64 asm. Speed with asm en/disabled and unsafe en/disabled: ``` λ go test -bench=. -cpu=1 goos: windows goarch: amd64 pkg: github.com/minio/pkg/v3/rng cpu: AMD Ryzen 9 3950X 16-Core Processor BenchmarkReader/1000 23646950 50.32 ns/op 19871.36 MB/s 0 B/op 0 allocs/op BenchmarkReader/1024 42255306 28.23 ns/op 36274.08 MB/s 0 B/op 0 allocs/op BenchmarkReader/16384 4336626 276.9 ns/op 59165.28 MB/s 0 B/op 0 allocs/op BenchmarkReader/1048576 57505 20947 ns/op 50058.47 MB/s 0 B/op 0 allocs/op BenchmarkReaderReadAt/1000 27001666 44.27 ns/op 22588.01 MB/s 0 B/op 0 allocs/op BenchmarkReaderReadAt/1024 44081182 25.72 ns/op 39806.74 MB/s 0 B/op 0 allocs/op BenchmarkReaderReadAt/16384 4428068 270.9 ns/op 60475.56 MB/s 0 B/op 0 allocs/op BenchmarkReaderReadAt/1048576 57236 20838 ns/op 50319.23 MB/s 0 B/op 0 allocs/op λ go test -bench=. -cpu=1 -tags=noasm goos: windows goarch: amd64 pkg: github.com/minio/pkg/v3/rng cpu: AMD Ryzen 9 3950X 16-Core Processor BenchmarkReader/1000 15822158 75.27 ns/op 13285.59 MB/s 0 B/op 0 allocs/op BenchmarkReader/1024 21101349 56.99 ns/op 17968.17 MB/s 0 B/op 0 allocs/op BenchmarkReader/16384 1642585 730.1 ns/op 22441.92 MB/s 0 B/op 0 allocs/op BenchmarkReader/1048576 25862 46759 ns/op 22425.17 MB/s 0 B/op 0 allocs/op BenchmarkReaderReadAt/1000 17435347 67.95 ns/op 14716.80 MB/s 0 B/op 0 allocs/op BenchmarkReaderReadAt/1024 22503600 53.40 ns/op 19175.20 MB/s 0 B/op 0 allocs/op BenchmarkReaderReadAt/16384 1641862 726.3 ns/op 22558.27 MB/s 0 B/op 0 allocs/op BenchmarkReaderReadAt/1048576 25826 46254 ns/op 22669.75 MB/s 0 B/op 0 allocs/op λ go test -bench=. -cpu=1 -tags=noasm,nounsafe goos: windows goarch: amd64 pkg: github.com/minio/pkg/v3/rng cpu: AMD Ryzen 9 3950X 16-Core Processor BenchmarkReader/1000 12971710 92.63 ns/op 10795.93 MB/s 0 B/op 0 allocs/op BenchmarkReader/1024 16066579 74.89 ns/op 13673.14 MB/s 0 B/op 0 allocs/op BenchmarkReader/16384 1000000 1013 ns/op 16180.70 MB/s 0 B/op 0 allocs/op BenchmarkReader/1048576 18326 65635 ns/op 15975.96 MB/s 0 B/op 0 allocs/op BenchmarkReaderReadAt/1000 13763456 85.36 ns/op 11715.42 MB/s 0 B/op 0 allocs/op BenchmarkReaderReadAt/1024 16392904 71.93 ns/op 14235.23 MB/s 0 B/op 0 allocs/op BenchmarkReaderReadAt/16384 1000000 1019 ns/op 16083.23 MB/s 0 B/op 0 allocs/op BenchmarkReaderReadAt/1048576 18481 64762 ns/op 16191.16 MB/s 0 B/op 0 allocs/op ```