Skip to content
Snippets Groups Projects
  • Klaus Post's avatar
    2becdc33
    Add seekable random reader (#147) · 2becdc33
    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
    ```
    2becdc33
    History
    Add seekable random reader (#147)
    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
    ```