github.com/0chain/gosdk@v1.17.11/zboxcore/sdk/chunked_upload_chunk_reader_bench_test.go (about)

     1  package sdk
     2  
     3  import (
     4  	"bytes"
     5  	"testing"
     6  
     7  	"github.com/0chain/gosdk/zboxcore/encryption"
     8  	"github.com/0chain/gosdk/zboxcore/zboxutil"
     9  	"github.com/klauspost/reedsolomon"
    10  )
    11  
    12  func BenchmarkChunkedUploadChunkReader(b *testing.B) {
    13  
    14  	benchmarks := []struct {
    15  		Name string
    16  		Size int64
    17  
    18  		ChunkSize       int
    19  		DataShards      int
    20  		ParityShards    int
    21  		EncryptOnUpload bool
    22  	}{
    23  		{Name: "1M 1K 2+1", Size: MB * 1, ChunkSize: KB * 1, DataShards: 2, ParityShards: 1, EncryptOnUpload: false},
    24  		{Name: "1M 1K 10+1", Size: MB * 1, ChunkSize: KB * 1, DataShards: 10, ParityShards: 3, EncryptOnUpload: false},
    25  		{Name: "1M 64K 2+1", Size: MB * 1, ChunkSize: KB * 64, DataShards: 2, ParityShards: 1, EncryptOnUpload: false},
    26  		{Name: "1M 64K 10+1", Size: MB * 1, ChunkSize: KB * 64, DataShards: 10, ParityShards: 3, EncryptOnUpload: false},
    27  
    28  		{Name: "10M 64K 2+1", Size: MB * 10, ChunkSize: KB * 64, DataShards: 2, ParityShards: 1, EncryptOnUpload: false},
    29  		{Name: "10M 64K 10+1", Size: MB * 10, ChunkSize: KB * 64, DataShards: 10, ParityShards: 3, EncryptOnUpload: false},
    30  		{Name: "10M 6M 2+1", Size: MB * 10, ChunkSize: MB * 6, DataShards: 2, ParityShards: 1, EncryptOnUpload: false},
    31  		{Name: "10M 6M 10+1", Size: MB * 10, ChunkSize: MB * 6, DataShards: 10, ParityShards: 3, EncryptOnUpload: false},
    32  
    33  		{Name: "100M 64K 2+1", Size: MB * 100, ChunkSize: KB * 64, DataShards: 2, ParityShards: 1, EncryptOnUpload: false},
    34  		{Name: "100M 64K 10+1", Size: MB * 100, ChunkSize: KB * 64, DataShards: 10, ParityShards: 3, EncryptOnUpload: false},
    35  		{Name: "100M 6M 2+1", Size: MB * 100, ChunkSize: MB * 6, DataShards: 2, ParityShards: 1, EncryptOnUpload: false},
    36  		{Name: "100M 6M 10+1", Size: MB * 100, ChunkSize: MB * 6, DataShards: 10, ParityShards: 3, EncryptOnUpload: false},
    37  
    38  		{Name: "500M 64K 2+1", Size: MB * 500, ChunkSize: KB * 64, DataShards: 2, ParityShards: 1, EncryptOnUpload: false},
    39  		{Name: "500M 64K 10+1", Size: MB * 500, ChunkSize: KB * 64, DataShards: 10, ParityShards: 3, EncryptOnUpload: false},
    40  		{Name: "500M 6M 2+1", Size: MB * 500, ChunkSize: MB * 6, DataShards: 2, ParityShards: 1, EncryptOnUpload: false},
    41  		{Name: "500M 6M 10+1", Size: MB * 500, ChunkSize: MB * 6, DataShards: 10, ParityShards: 3, EncryptOnUpload: false},
    42  
    43  		// {Name: "1G 64K 2+1", Size: GB * 1, ChunkSize: KB * 64, DataShards: 2, ParityShards: 1, EncryptOnUpload: false},
    44  		// {Name: "1G 64K 10+1", Size: GB * 1, ChunkSize: KB * 64, DataShards: 10, ParityShards: 3, EncryptOnUpload: false},
    45  		// {Name: "1G 60M 2+1", Size: GB * 1, ChunkSize: MB * 60, DataShards: 2, ParityShards: 1, EncryptOnUpload: false},
    46  		// {Name: "1G 60M 10+1", Size: GB * 1, ChunkSize: MB * 60, DataShards: 10, ParityShards: 3, EncryptOnUpload: false},
    47  	}
    48  
    49  	for _, bm := range benchmarks {
    50  		b.Run(bm.Name, func(b *testing.B) {
    51  
    52  			buf := generateRandomBytes(bm.Size)
    53  			b.ResetTimer()
    54  
    55  			for i := 0; i < b.N; i++ {
    56  
    57  				uploadMask := zboxutil.NewUint128(1).Lsh(uint64(bm.DataShards + bm.ParityShards)).Sub64(1)
    58  				erasureEncoder, _ := reedsolomon.New(bm.DataShards, bm.ParityShards, reedsolomon.WithAutoGoroutines(bm.ChunkSize))
    59  				encscheme := encryption.NewEncryptionScheme()
    60  				_, err := encscheme.Initialize("BenchmarkChunkReader")
    61  				if err != nil {
    62  					b.Fatal(err)
    63  				}
    64  
    65  				encscheme.InitForEncryption("filetype:audio")
    66  				reader, err := createChunkReader(
    67  					bytes.NewReader(buf), int64(bm.Size),
    68  					int64(bm.ChunkSize), bm.DataShards, bm.ParityShards,
    69  					bm.EncryptOnUpload, uploadMask,
    70  					erasureEncoder, encscheme,
    71  					CreateHasher(getShardSize(bm.Size, bm.DataShards, bm.EncryptOnUpload)), 100,
    72  				)
    73  				if err != nil {
    74  					b.Fatal(err)
    75  				}
    76  				for {
    77  					c, err := reader.Next()
    78  					if err != nil {
    79  						b.Fatal(err)
    80  					}
    81  
    82  					if c.IsFinal {
    83  						break
    84  					}
    85  				}
    86  
    87  			}
    88  		})
    89  	}
    90  
    91  }