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 }