diff --git a/ml_samples/lmdb/lmdb_read_pattern.py b/ml_samples/lmdb/lmdb_read_pattern.py new file mode 100644 index 0000000..cf50e12 --- /dev/null +++ b/ml_samples/lmdb/lmdb_read_pattern.py @@ -0,0 +1,111 @@ +import lmdb +import numpy as np +import time +import os +import random + +DB_DIR = '/home/princer_google_com/gcs/lmdb_test_env' +full_path = os.path.abspath(DB_DIR) +NUM_SAMPLES = 1000 +SAMPLE_SIZE = 128 * 1024 # 128KB data block + +def create_lmdb_db(): + """Creates an LMDB database, storing data as key-value pairs.""" + if os.path.exists(DB_DIR): + # Clean up previous run + import shutil + # shutil.rmtree(DB_DIR) + + print(f"Creating LMDB database with {NUM_SAMPLES} samples...") + # map_size is crucial, must be large enough for all data + env = lmdb.open(DB_DIR, map_size=NUM_SAMPLES * SAMPLE_SIZE * 2) + + with env.begin(write=True) as txn: + for i in range(NUM_SAMPLES): + # Key is the index (needs to be bytes) + key = str(i).encode('ascii') + + # Value is the image/feature data + label (serialized) + label = str(i % 10).encode('ascii') + data_block = os.urandom(SAMPLE_SIZE) + value = label + b'_' + data_block + + txn.put(key, value) + + env.close() + print(f"Database created: {DB_DIR}") + +def run_random_read(): + """Simulates a DataLoader requesting a batch of random indices.""" + print("\n--- Running LMDB Random Read Pattern (simulate batching) ---") + env = lmdb.open(DB_DIR, readonly=True, lock=False) + + # Simulate reading a batch of 100 random samples 100 times (10,0 lookups total) + NUM_BATCHES = 10 + BATCH_SIZE = 5 + + start_time = time.time() + + with env.begin() as txn: + for _ in range(NUM_BATCHES): + # --- The LMDBDataset pattern: Random access by key (index) --- + random_indices = random.sample(range(NUM_SAMPLES), BATCH_SIZE) + + batch_data = [] + for idx in random_indices: + key = str(idx).encode('ascii') + value = txn.get(key) + + # Simulate deserialization (getting the actual data) + label, data = value.split(b'_', 1) + batch_data.append((label, data)) + + # The model consumes the batch_data here + pass + + end_time = time.time() + read_duration = end_time - start_time + print(f"Total read time (10,000 random samples): {read_duration:.4f} seconds") + + env.close() + +def run_sequential_read(): + """Reads all samples sequentially using an LMDB cursor.""" + if not os.path.exists(DB_DIR): + print(f"Error: LMDB environment directory '{DB_DIR}' not found. Please run the creation script first.") + return + + print("\n--- Running LMDB Sequential Read Pattern (Cursor) ---") + env = lmdb.open(DB_DIR, readonly=True, lock=False) + + count = 0 + start_time = time.time() + + with env.begin() as txn: + # Create a cursor to iterate through the database + cursor = txn.cursor() + + # Iterate over all key-value pairs sequentially + # The .iternext() method is highly efficient + for key, value in cursor: + # Simulate processing the data (e.g., deserializing an image) + # label, data = value.split(b'_', 1) + count += 1 + if count >= NUM_SAMPLES: + break # Ensure we don't go past the expected number of samples + + end_time = time.time() + read_duration = end_time - start_time + + print(f"Total read time ({count} samples sequentially): {read_duration:.4f} seconds") + + env.close() + +if __name__ == '__main__': + # create_lmdb_db() + # run_random_read() + run_sequential_read() + + # # Cleanup + # import shutil + # shutil.rmtree(DB_DIR) \ No newline at end of file diff --git a/ml_samples/lmdb/rand_read_pattern.txt b/ml_samples/lmdb/rand_read_pattern.txt new file mode 100644 index 0000000..e85f7ca --- /dev/null +++ b/ml_samples/lmdb/rand_read_pattern.txt @@ -0,0 +1,75 @@ + +Reader: lmdb_test_env/data.mdb +Total ranges added: 151 +Final ranges (after merge): 60 +Max offset: 215359488 bytes (210312.00 KB) + +Range# | 0 21031.2K 42062.4K 63093.6K 84124.8K 105156.0K 126187.2K 147218.4K 168249.6K 189280.8K +-------------------------------------------------------------------------------------------------------------- + 0 | █ | [0, 49152) (len: 49152) + 1 | █ | [81104896, 81235968) (len: 131072) + 2 | █ | [95862784, 96256000) (len: 393216) + 3 | █ | [81383424, 81514496) (len: 131072) + 4 | █ | [106270720, 106663936) (len: 393216) + 5 | █ | [81661952, 81793024) (len: 131072) + 6 | █ | [130600960, 130994176) (len: 393216) + 7 | █ | [171831296, 171962368) (len: 131072) + 8 | █ | [168316928, 168710144) (len: 393216) + 9 | █ | [81522688, 81653760) (len: 131072) + 10 | █ | [120868864, 121262080) (len: 393216) + 11 | █ | [184541184, 184672256) (len: 131072) + 12 | █ | [182648832, 183042048) (len: 393216) + 13 | █ | [158986240, 159117312) (len: 131072) + 14 | █ | [159395840, 159789056) (len: 393216) + 15 | █ | [130994176, 131321856) (len: 327680) + 16 | █ | [197251072, 197382144) (len: 131072) + 17 | █ | [188059648, 188452864) (len: 393216) + 18 | █ | [115056640, 115449856) (len: 393216) + 19 | █ | [139792384, 140185600) (len: 393216) + 20 | █ | [181702656, 182095872) (len: 393216) + 21 | █ | [189681664, 190074880) (len: 393216) + 22 | █ | [117895168, 118288384) (len: 393216) + 23 | █ | [166154240, 166547456) (len: 393216) + 24 | █ | [92078080, 92471296) (len: 393216) + 25 | █ | [160882688, 161275904) (len: 393216) + 26 | █ | [81653760, 81661952) (len: 8192) + 27 | █ | [81793024, 81915904) (len: 122880) + 28 | █ | [178458624, 178851840) (len: 393216) + 29 | █ | [104108032, 104501248) (len: 393216) + 30 | █ | [175890432, 176283648) (len: 393216) + 31 | █ | [209825792, 209956864) (len: 131072) + 32 | █ | [214966272, 215359488) (len: 393216) + 33 | █ | [108568576, 108961792) (len: 393216) + 34 | █ | [198877184, 199270400) (len: 393216) + 35 | █ | [205905920, 206299136) (len: 393216) + 36 | █ | [208068608, 208461824) (len: 393216) + 37 | █ | [127086592, 127479808) (len: 393216) + 38 | █ | [133439488, 133832704) (len: 393216) + 39 | █ | [90456064, 90849280) (len: 393216) + 40 | █ | [156553216, 156946432) (len: 393216) + 41 | █ | [163991552, 164384768) (len: 393216) + 42 | █ | [90849280, 90980352) (len: 131072) + 43 | █ | [101675008, 102068224) (len: 393216) + 44 | █ | [190074880, 190205952) (len: 131072) + 45 | █ | [190357504, 190750720) (len: 393216) + 46 | █ | [94375936, 94769152) (len: 393216) + 47 | █ | [208461824, 208592896) (len: 131072) + 48 | █ | [196304896, 196698112) (len: 393216) + 49 | █ | [174809088, 175202304) (len: 393216) + 50 | █ | [201445376, 201838592) (len: 393216) + 51 | █ | [129654784, 130048000) (len: 393216) + 52 | █ | [162369536, 162762752) (len: 393216) + 53 | █ | [197931008, 198324224) (len: 393216) + 54 | █ | [170344448, 170737664) (len: 393216) + 55 | █ | [203067392, 203460608) (len: 393216) + 56 | █ | [110460928, 110854144) (len: 393216) + 57 | █ | [93159424, 93552640) (len: 393216) + 58 | █ | [188870656, 189263872) (len: 393216) + 59 | █ | [111001600, 111394816) (len: 393216) + +Summary Statistics: + Total bytes read: 19382272 (18928.00 KB) + Average range size: 323037 bytes + Min range size: 8192 bytes + Max range size: 393216 bytes + Read pattern analysis: Random (gaps: 52) diff --git a/ml_samples/lmdb/requirements.txt b/ml_samples/lmdb/requirements.txt new file mode 100644 index 0000000..d65e5c4 --- /dev/null +++ b/ml_samples/lmdb/requirements.txt @@ -0,0 +1,2 @@ +numpy 2.2.6 +lmdb 1.7.3 \ No newline at end of file diff --git a/ml_samples/parquet_read/read_pattern.txt b/ml_samples/parquet_read/read_pattern.txt new file mode 100644 index 0000000..fc75a50 --- /dev/null +++ b/ml_samples/parquet_read/read_pattern.txt @@ -0,0 +1,441 @@ +{"timestamp":{"seconds":1758479872,"nanos":491062535},"severity":"INFO","message":"Falling back to staged write for 'parq2'. Streaming write is limited to sequential writes on new/empty files."} +{"timestamp":{"seconds":1758479874,"nanos":529786521},"severity":"INFO","message":"Falling back to staged write for 'parq2'. Streaming write is limited to sequential writes on new/empty files."} +{"timestamp":{"seconds":1758479876,"nanos":516245075},"severity":"INFO","message":"Falling back to staged write for 'parq2'. Streaming write is limited to sequential writes on new/empty files."} +{"timestamp":{"seconds":1758479878,"nanos":360940649},"severity":"INFO","message":"Falling back to staged write for 'parq2'. Streaming write is limited to sequential writes on new/empty files."} +Reader: parq2 +Total ranges added: 3 +Final ranges (after merge): 1 +Max offset: 52858880 bytes (51620.00 KB) + +Range# | 0 5162.0K 10324.0K 15486.0K 20648.0K 25810.0K 30972.0K 36134.0K 41296.0K 46458.0K +-------------------------------------------------------------------------------------------------------------- + 0 | █ | [52723712, 52858880) (len: 135168) + +Summary Statistics: + Total bytes read: 135168 (132.00 KB) + Average range size: 135168 bytes + Min range size: 135168 bytes + Max range size: 135168 bytes + Read pattern analysis: Sequential (merged) + +Reader: parq2 +Total ranges added: 407 +Final ranges (after merge): 407 +Max offset: 52723712 bytes (51488.00 KB) + +Range# | 0 5148.8K 10297.6K 15446.4K 20595.2K 25744.0K 30892.8K 36041.6K 41190.4K 46339.2K +-------------------------------------------------------------------------------------------------------------- + 0 | █ | [26423296, 26554368) (len: 131072) + 1 | █ | [13213696, 13344768) (len: 131072) + 2 | █ | [0, 131072) (len: 131072) + 3 | █ | [39636992, 39768064) (len: 131072) + 4 | █ | [131072, 196608) (len: 65536) + 5 | █ | [13344768, 13410304) (len: 65536) + 6 | █ | [26554368, 26619904) (len: 65536) + 7 | █ | [39768064, 39833600) (len: 65536) + 8 | █ | [196608, 327680) (len: 131072) + 9 | █ | [13410304, 13541376) (len: 131072) + 10 | █ | [26619904, 26750976) (len: 131072) + 11 | █ | [39833600, 39964672) (len: 131072) + 12 | █ | [327680, 458752) (len: 131072) + 13 | █ | [13541376, 13672448) (len: 131072) + 14 | █ | [26750976, 26882048) (len: 131072) + 15 | █ | [39964672, 40095744) (len: 131072) + 16 | █ | [458752, 589824) (len: 131072) + 17 | █ | [13672448, 13803520) (len: 131072) + 18 | █ | [26882048, 27013120) (len: 131072) + 19 | █ | [40095744, 40226816) (len: 131072) + 20 | █ | [589824, 720896) (len: 131072) + 21 | █ | [13803520, 13934592) (len: 131072) + 22 | █ | [27013120, 27144192) (len: 131072) + 23 | █ | [40226816, 40357888) (len: 131072) + 24 | █ | [720896, 851968) (len: 131072) + 25 | █ | [13934592, 14065664) (len: 131072) + 26 | █ | [27144192, 27275264) (len: 131072) + 27 | █ | [40357888, 40488960) (len: 131072) + 28 | █ | [851968, 983040) (len: 131072) + 29 | █ | [14065664, 14196736) (len: 131072) + 30 | █ | [27275264, 27406336) (len: 131072) + 31 | █ | [40488960, 40620032) (len: 131072) + 32 | █ | [983040, 1114112) (len: 131072) + 33 | █ | [14196736, 14327808) (len: 131072) + 34 | █ | [27406336, 27537408) (len: 131072) + 35 | █ | [40620032, 40751104) (len: 131072) + 36 | █ | [1114112, 1245184) (len: 131072) + 37 | █ | [14327808, 14458880) (len: 131072) + 38 | █ | [27537408, 27668480) (len: 131072) + 39 | █ | [40751104, 40882176) (len: 131072) + 40 | █ | [1245184, 1376256) (len: 131072) + 41 | █ | [14458880, 14589952) (len: 131072) + 42 | █ | [27668480, 27799552) (len: 131072) + 43 | █ | [40882176, 41013248) (len: 131072) + 44 | █ | [1376256, 1507328) (len: 131072) + 45 | █ | [14589952, 14721024) (len: 131072) + 46 | █ | [27799552, 27930624) (len: 131072) + 47 | █ | [41013248, 41144320) (len: 131072) + 48 | █ | [1507328, 1638400) (len: 131072) + 49 | █ | [14721024, 14852096) (len: 131072) + 50 | █ | [27930624, 28061696) (len: 131072) + 51 | █ | [41144320, 41275392) (len: 131072) + 52 | █ | [1638400, 1769472) (len: 131072) + 53 | █ | [14852096, 14983168) (len: 131072) + 54 | █ | [28061696, 28192768) (len: 131072) + 55 | █ | [41275392, 41406464) (len: 131072) + 56 | █ | [1769472, 1900544) (len: 131072) + 57 | █ | [14983168, 15114240) (len: 131072) + 58 | █ | [28192768, 28323840) (len: 131072) + 59 | █ | [41406464, 41537536) (len: 131072) + 60 | █ | [1900544, 2031616) (len: 131072) + 61 | █ | [15114240, 15245312) (len: 131072) + 62 | █ | [28323840, 28454912) (len: 131072) + 63 | █ | [41537536, 41668608) (len: 131072) + 64 | █ | [2031616, 2162688) (len: 131072) + 65 | █ | [15245312, 15376384) (len: 131072) + 66 | █ | [28454912, 28585984) (len: 131072) + 67 | █ | [41668608, 41799680) (len: 131072) + 68 | █ | [2162688, 2293760) (len: 131072) + 69 | █ | [15376384, 15507456) (len: 131072) + 70 | █ | [28585984, 28717056) (len: 131072) + 71 | █ | [41799680, 41930752) (len: 131072) + 72 | █ | [2293760, 2424832) (len: 131072) + 73 | █ | [15507456, 15638528) (len: 131072) + 74 | █ | [28717056, 28848128) (len: 131072) + 75 | █ | [41930752, 42061824) (len: 131072) + 76 | █ | [2424832, 2555904) (len: 131072) + 77 | █ | [15638528, 15769600) (len: 131072) + 78 | █ | [28848128, 28979200) (len: 131072) + 79 | █ | [42061824, 42192896) (len: 131072) + 80 | █ | [2555904, 2686976) (len: 131072) + 81 | █ | [15769600, 15900672) (len: 131072) + 82 | █ | [28979200, 29110272) (len: 131072) + 83 | █ | [42192896, 42323968) (len: 131072) + 84 | █ | [2686976, 2818048) (len: 131072) + 85 | █ | [15900672, 16031744) (len: 131072) + 86 | █ | [29110272, 29241344) (len: 131072) + 87 | █ | [42323968, 42455040) (len: 131072) + 88 | █ | [2818048, 2949120) (len: 131072) + 89 | █ | [16031744, 16162816) (len: 131072) + 90 | █ | [29241344, 29372416) (len: 131072) + 91 | █ | [42455040, 42586112) (len: 131072) + 92 | █ | [2949120, 3080192) (len: 131072) + 93 | █ | [16162816, 16293888) (len: 131072) + 94 | █ | [29372416, 29503488) (len: 131072) + 95 | █ | [42586112, 42717184) (len: 131072) + 96 | █ | [3080192, 3211264) (len: 131072) + 97 | █ | [16293888, 16424960) (len: 131072) + 98 | █ | [29503488, 29634560) (len: 131072) + 99 | █ | [42717184, 42848256) (len: 131072) + 100 | █ | [3211264, 3342336) (len: 131072) + 101 | █ | [16424960, 16556032) (len: 131072) + 102 | █ | [29634560, 29765632) (len: 131072) + 103 | █ | [42848256, 42979328) (len: 131072) + 104 | █ | [3342336, 3473408) (len: 131072) + 105 | █ | [16556032, 16687104) (len: 131072) + 106 | █ | [29765632, 29896704) (len: 131072) + 107 | █ | [42979328, 43110400) (len: 131072) + 108 | █ | [3473408, 3604480) (len: 131072) + 109 | █ | [16687104, 16818176) (len: 131072) + 110 | █ | [29896704, 30027776) (len: 131072) + 111 | █ | [43110400, 43241472) (len: 131072) + 112 | █ | [3604480, 3735552) (len: 131072) + 113 | █ | [16818176, 16949248) (len: 131072) + 114 | █ | [30027776, 30158848) (len: 131072) + 115 | █ | [43241472, 43372544) (len: 131072) + 116 | █ | [3735552, 3866624) (len: 131072) + 117 | █ | [16949248, 17080320) (len: 131072) + 118 | █ | [30158848, 30289920) (len: 131072) + 119 | █ | [43372544, 43503616) (len: 131072) + 120 | █ | [3866624, 3997696) (len: 131072) + 121 | █ | [17080320, 17211392) (len: 131072) + 122 | █ | [30289920, 30420992) (len: 131072) + 123 | █ | [43503616, 43634688) (len: 131072) + 124 | █ | [3997696, 4128768) (len: 131072) + 125 | █ | [17211392, 17342464) (len: 131072) + 126 | █ | [30420992, 30552064) (len: 131072) + 127 | █ | [43634688, 43765760) (len: 131072) + 128 | █ | [4128768, 4259840) (len: 131072) + 129 | █ | [17342464, 17473536) (len: 131072) + 130 | █ | [30552064, 30683136) (len: 131072) + 131 | █ | [43765760, 43896832) (len: 131072) + 132 | █ | [4259840, 4390912) (len: 131072) + 133 | █ | [17473536, 17604608) (len: 131072) + 134 | █ | [30683136, 30814208) (len: 131072) + 135 | █ | [43896832, 44027904) (len: 131072) + 136 | █ | [4390912, 4521984) (len: 131072) + 137 | █ | [17604608, 17735680) (len: 131072) + 138 | █ | [30814208, 30945280) (len: 131072) + 139 | █ | [44027904, 44158976) (len: 131072) + 140 | █ | [4521984, 4653056) (len: 131072) + 141 | █ | [17735680, 17866752) (len: 131072) + 142 | █ | [30945280, 31076352) (len: 131072) + 143 | █ | [44158976, 44290048) (len: 131072) + 144 | █ | [4653056, 4784128) (len: 131072) + 145 | █ | [17866752, 17997824) (len: 131072) + 146 | █ | [31076352, 31207424) (len: 131072) + 147 | █ | [44290048, 44421120) (len: 131072) + 148 | █ | [4784128, 4915200) (len: 131072) + 149 | █ | [17997824, 18128896) (len: 131072) + 150 | █ | [31207424, 31338496) (len: 131072) + 151 | █ | [44421120, 44552192) (len: 131072) + 152 | █ | [4915200, 5046272) (len: 131072) + 153 | █ | [18128896, 18259968) (len: 131072) + 154 | █ | [31338496, 31469568) (len: 131072) + 155 | █ | [44552192, 44683264) (len: 131072) + 156 | █ | [5046272, 5177344) (len: 131072) + 157 | █ | [18259968, 18391040) (len: 131072) + 158 | █ | [31469568, 31600640) (len: 131072) + 159 | █ | [44683264, 44814336) (len: 131072) + 160 | █ | [5177344, 5308416) (len: 131072) + 161 | █ | [18391040, 18522112) (len: 131072) + 162 | █ | [31600640, 31731712) (len: 131072) + 163 | █ | [44814336, 44945408) (len: 131072) + 164 | █ | [5308416, 5439488) (len: 131072) + 165 | █ | [18522112, 18653184) (len: 131072) + 166 | █ | [31731712, 31862784) (len: 131072) + 167 | █ | [44945408, 45076480) (len: 131072) + 168 | █ | [5439488, 5570560) (len: 131072) + 169 | █ | [18653184, 18784256) (len: 131072) + 170 | █ | [31862784, 31993856) (len: 131072) + 171 | █ | [45076480, 45207552) (len: 131072) + 172 | █ | [5570560, 5701632) (len: 131072) + 173 | █ | [18784256, 18915328) (len: 131072) + 174 | █ | [31993856, 32124928) (len: 131072) + 175 | █ | [45207552, 45338624) (len: 131072) + 176 | █ | [5701632, 5832704) (len: 131072) + 177 | █ | [18915328, 19046400) (len: 131072) + 178 | █ | [32124928, 32256000) (len: 131072) + 179 | █ | [45338624, 45469696) (len: 131072) + 180 | █ | [5832704, 5963776) (len: 131072) + 181 | █ | [19046400, 19177472) (len: 131072) + 182 | █ | [32256000, 32387072) (len: 131072) + 183 | █ | [45469696, 45600768) (len: 131072) + 184 | █ | [5963776, 6094848) (len: 131072) + 185 | █ | [19177472, 19308544) (len: 131072) + 186 | █ | [32387072, 32518144) (len: 131072) + 187 | █ | [45600768, 45731840) (len: 131072) + 188 | █ | [6094848, 6225920) (len: 131072) + 189 | █ | [19308544, 19439616) (len: 131072) + 190 | █ | [32518144, 32649216) (len: 131072) + 191 | █ | [45731840, 45862912) (len: 131072) + 192 | █ | [6225920, 6356992) (len: 131072) + 193 | █ | [19439616, 19570688) (len: 131072) + 194 | █ | [32649216, 32780288) (len: 131072) + 195 | █ | [45862912, 45993984) (len: 131072) + 196 | █ | [6356992, 6488064) (len: 131072) + 197 | █ | [19570688, 19701760) (len: 131072) + 198 | █ | [32780288, 32911360) (len: 131072) + 199 | █ | [45993984, 46125056) (len: 131072) + 200 | █ | [6488064, 6619136) (len: 131072) + 201 | █ | [19701760, 19832832) (len: 131072) + 202 | █ | [32911360, 33042432) (len: 131072) + 203 | █ | [46125056, 46256128) (len: 131072) + 204 | █ | [6619136, 6750208) (len: 131072) + 205 | █ | [19832832, 19963904) (len: 131072) + 206 | █ | [33042432, 33173504) (len: 131072) + 207 | █ | [46256128, 46387200) (len: 131072) + 208 | █ | [6750208, 6881280) (len: 131072) + 209 | █ | [19963904, 20094976) (len: 131072) + 210 | █ | [33173504, 33304576) (len: 131072) + 211 | █ | [46387200, 46518272) (len: 131072) + 212 | █ | [6881280, 7012352) (len: 131072) + 213 | █ | [20094976, 20226048) (len: 131072) + 214 | █ | [33304576, 33435648) (len: 131072) + 215 | █ | [46518272, 46649344) (len: 131072) + 216 | █ | [7012352, 7143424) (len: 131072) + 217 | █ | [20226048, 20357120) (len: 131072) + 218 | █ | [33435648, 33566720) (len: 131072) + 219 | █ | [46649344, 46780416) (len: 131072) + 220 | █ | [7143424, 7274496) (len: 131072) + 221 | █ | [20357120, 20488192) (len: 131072) + 222 | █ | [33566720, 33697792) (len: 131072) + 223 | █ | [46780416, 46911488) (len: 131072) + 224 | █ | [7274496, 7405568) (len: 131072) + 225 | █ | [20488192, 20619264) (len: 131072) + 226 | █ | [33697792, 33828864) (len: 131072) + 227 | █ | [46911488, 47042560) (len: 131072) + 228 | █ | [7405568, 7536640) (len: 131072) + 229 | █ | [20619264, 20750336) (len: 131072) + 230 | █ | [33828864, 33959936) (len: 131072) + 231 | █ | [47042560, 47173632) (len: 131072) + 232 | █ | [7536640, 7667712) (len: 131072) + 233 | █ | [20750336, 20881408) (len: 131072) + 234 | █ | [33959936, 34091008) (len: 131072) + 235 | █ | [47173632, 47304704) (len: 131072) + 236 | █ | [7667712, 7798784) (len: 131072) + 237 | █ | [20881408, 21012480) (len: 131072) + 238 | █ | [34091008, 34222080) (len: 131072) + 239 | █ | [47304704, 47435776) (len: 131072) + 240 | █ | [7798784, 7929856) (len: 131072) + 241 | █ | [21012480, 21143552) (len: 131072) + 242 | █ | [34222080, 34353152) (len: 131072) + 243 | █ | [47435776, 47566848) (len: 131072) + 244 | █ | [7929856, 8060928) (len: 131072) + 245 | █ | [21143552, 21274624) (len: 131072) + 246 | █ | [34353152, 34484224) (len: 131072) + 247 | █ | [47566848, 47697920) (len: 131072) + 248 | █ | [8060928, 8192000) (len: 131072) + 249 | █ | [21274624, 21405696) (len: 131072) + 250 | █ | [34484224, 34615296) (len: 131072) + 251 | █ | [47697920, 47828992) (len: 131072) + 252 | █ | [8192000, 8323072) (len: 131072) + 253 | █ | [21405696, 21536768) (len: 131072) + 254 | █ | [34615296, 34746368) (len: 131072) + 255 | █ | [47828992, 47960064) (len: 131072) + 256 | █ | [8323072, 8454144) (len: 131072) + 257 | █ | [21536768, 21667840) (len: 131072) + 258 | █ | [34746368, 34877440) (len: 131072) + 259 | █ | [47960064, 48091136) (len: 131072) + 260 | █ | [8454144, 8585216) (len: 131072) + 261 | █ | [21667840, 21798912) (len: 131072) + 262 | █ | [34877440, 35008512) (len: 131072) + 263 | █ | [48091136, 48222208) (len: 131072) + 264 | █ | [8585216, 8716288) (len: 131072) + 265 | █ | [21798912, 21929984) (len: 131072) + 266 | █ | [35008512, 35139584) (len: 131072) + 267 | █ | [48222208, 48353280) (len: 131072) + 268 | █ | [8716288, 8847360) (len: 131072) + 269 | █ | [21929984, 22061056) (len: 131072) + 270 | █ | [35139584, 35270656) (len: 131072) + 271 | █ | [48353280, 48484352) (len: 131072) + 272 | █ | [8847360, 8978432) (len: 131072) + 273 | █ | [22061056, 22192128) (len: 131072) + 274 | █ | [35270656, 35401728) (len: 131072) + 275 | █ | [48484352, 48615424) (len: 131072) + 276 | █ | [8978432, 9109504) (len: 131072) + 277 | █ | [22192128, 22323200) (len: 131072) + 278 | █ | [35401728, 35532800) (len: 131072) + 279 | █ | [48615424, 48746496) (len: 131072) + 280 | █ | [9109504, 9240576) (len: 131072) + 281 | █ | [22323200, 22454272) (len: 131072) + 282 | █ | [35532800, 35663872) (len: 131072) + 283 | █ | [48746496, 48877568) (len: 131072) + 284 | █ | [9240576, 9371648) (len: 131072) + 285 | █ | [22454272, 22585344) (len: 131072) + 286 | █ | [35663872, 35794944) (len: 131072) + 287 | █ | [48877568, 49008640) (len: 131072) + 288 | █ | [9371648, 9502720) (len: 131072) + 289 | █ | [22585344, 22716416) (len: 131072) + 290 | █ | [35794944, 35926016) (len: 131072) + 291 | █ | [49008640, 49139712) (len: 131072) + 292 | █ | [9502720, 9633792) (len: 131072) + 293 | █ | [22716416, 22847488) (len: 131072) + 294 | █ | [35926016, 36057088) (len: 131072) + 295 | █ | [49139712, 49270784) (len: 131072) + 296 | █ | [9633792, 9764864) (len: 131072) + 297 | █ | [22847488, 22978560) (len: 131072) + 298 | █ | [36057088, 36188160) (len: 131072) + 299 | █ | [49270784, 49401856) (len: 131072) + 300 | █ | [9764864, 9895936) (len: 131072) + 301 | █ | [22978560, 23109632) (len: 131072) + 302 | █ | [36188160, 36319232) (len: 131072) + 303 | █ | [49401856, 49532928) (len: 131072) + 304 | █ | [9895936, 10027008) (len: 131072) + 305 | █ | [23109632, 23240704) (len: 131072) + 306 | █ | [36319232, 36450304) (len: 131072) + 307 | █ | [49532928, 49664000) (len: 131072) + 308 | █ | [10027008, 10158080) (len: 131072) + 309 | █ | [23240704, 23371776) (len: 131072) + 310 | █ | [36450304, 36581376) (len: 131072) + 311 | █ | [49664000, 49795072) (len: 131072) + 312 | █ | [10158080, 10289152) (len: 131072) + 313 | █ | [23371776, 23502848) (len: 131072) + 314 | █ | [36581376, 36712448) (len: 131072) + 315 | █ | [49795072, 49926144) (len: 131072) + 316 | █ | [10289152, 10420224) (len: 131072) + 317 | █ | [23502848, 23633920) (len: 131072) + 318 | █ | [36712448, 36843520) (len: 131072) + 319 | █ | [49926144, 50057216) (len: 131072) + 320 | █ | [10420224, 10551296) (len: 131072) + 321 | █ | [23633920, 23764992) (len: 131072) + 322 | █ | [36843520, 36974592) (len: 131072) + 323 | █ | [50057216, 50188288) (len: 131072) + 324 | █ | [10551296, 10682368) (len: 131072) + 325 | █ | [23764992, 23896064) (len: 131072) + 326 | █ | [36974592, 37105664) (len: 131072) + 327 | █ | [50188288, 50319360) (len: 131072) + 328 | █ | [10682368, 10813440) (len: 131072) + 329 | █ | [23896064, 24027136) (len: 131072) + 330 | █ | [37105664, 37236736) (len: 131072) + 331 | █ | [50319360, 50450432) (len: 131072) + 332 | █ | [10813440, 10944512) (len: 131072) + 333 | █ | [24027136, 24158208) (len: 131072) + 334 | █ | [37236736, 37367808) (len: 131072) + 335 | █ | [50450432, 50581504) (len: 131072) + 336 | █ | [10944512, 11075584) (len: 131072) + 337 | █ | [24158208, 24289280) (len: 131072) + 338 | █ | [37367808, 37498880) (len: 131072) + 339 | █ | [50581504, 50712576) (len: 131072) + 340 | █ | [11075584, 11206656) (len: 131072) + 341 | █ | [24289280, 24420352) (len: 131072) + 342 | █ | [37498880, 37629952) (len: 131072) + 343 | █ | [50712576, 50843648) (len: 131072) + 344 | █ | [11206656, 11337728) (len: 131072) + 345 | █ | [24420352, 24551424) (len: 131072) + 346 | █ | [37629952, 37761024) (len: 131072) + 347 | █ | [50843648, 50974720) (len: 131072) + 348 | █ | [11337728, 11468800) (len: 131072) + 349 | █ | [24551424, 24682496) (len: 131072) + 350 | █ | [37761024, 37892096) (len: 131072) + 351 | █ | [50974720, 51105792) (len: 131072) + 352 | █ | [11468800, 11599872) (len: 131072) + 353 | █ | [24682496, 24813568) (len: 131072) + 354 | █ | [37892096, 38023168) (len: 131072) + 355 | █ | [51105792, 51236864) (len: 131072) + 356 | █ | [11599872, 11730944) (len: 131072) + 357 | █ | [24813568, 24944640) (len: 131072) + 358 | █ | [38023168, 38154240) (len: 131072) + 359 | █ | [51236864, 51367936) (len: 131072) + 360 | █ | [11730944, 11862016) (len: 131072) + 361 | █ | [24944640, 25075712) (len: 131072) + 362 | █ | [38154240, 38285312) (len: 131072) + 363 | █ | [51367936, 51499008) (len: 131072) + 364 | █ | [11862016, 11993088) (len: 131072) + 365 | █ | [25075712, 25206784) (len: 131072) + 366 | █ | [38285312, 38416384) (len: 131072) + 367 | █ | [51499008, 51630080) (len: 131072) + 368 | █ | [11993088, 12124160) (len: 131072) + 369 | █ | [25206784, 25337856) (len: 131072) + 370 | █ | [38416384, 38547456) (len: 131072) + 371 | █ | [51630080, 51761152) (len: 131072) + 372 | █ | [12124160, 12255232) (len: 131072) + 373 | █ | [25337856, 25468928) (len: 131072) + 374 | █ | [38547456, 38678528) (len: 131072) + 375 | █ | [51761152, 51892224) (len: 131072) + 376 | █ | [12255232, 12386304) (len: 131072) + 377 | █ | [25468928, 25600000) (len: 131072) + 378 | █ | [38678528, 38809600) (len: 131072) + 379 | █ | [51892224, 52023296) (len: 131072) + 380 | █ | [12386304, 12517376) (len: 131072) + 381 | █ | [25600000, 25731072) (len: 131072) + 382 | █ | [38809600, 38940672) (len: 131072) + 383 | █ | [52023296, 52154368) (len: 131072) + 384 | █ | [12517376, 12648448) (len: 131072) + 385 | █ | [25731072, 25862144) (len: 131072) + 386 | █ | [38940672, 39071744) (len: 131072) + 387 | █ | [52154368, 52285440) (len: 131072) + 388 | █ | [12648448, 12779520) (len: 131072) + 389 | █ | [25862144, 25993216) (len: 131072) + 390 | █ | [39071744, 39202816) (len: 131072) + 391 | █ | [52285440, 52416512) (len: 131072) + 392 | █ | [12779520, 12910592) (len: 131072) + 393 | █ | [25993216, 26124288) (len: 131072) + 394 | █ | [39202816, 39333888) (len: 131072) + 395 | █ | [52416512, 52547584) (len: 131072) + 396 | █ | [12910592, 13041664) (len: 131072) + 397 | █ | [26124288, 26255360) (len: 131072) + 398 | █ | [39333888, 39464960) (len: 131072) + 399 | █ | [52547584, 52678656) (len: 131072) + 400 | █ | [13041664, 13172736) (len: 131072) + 401 | █ | [26255360, 26386432) (len: 131072) + 402 | █ | [39464960, 39596032) (len: 131072) + 403 | █ | [52678656, 52723712) (len: 45056) + 404 | █ | [13172736, 13213696) (len: 40960) + 405 | █ | [26386432, 26423296) (len: 36864) + 406 | █ | [39596032, 39636992) (len: 40960) + +Summary Statistics: + Total bytes read: 52723712 (51488.00 KB) + Average range size: 129542 bytes + Min range size: 36864 bytes + Max range size: 131072 bytes + Read pattern analysis: Random (gaps: 0) \ No newline at end of file