SPB Git

spb/localvm-research Public License

Running LLMs larger than memory on a consumer Mac — falsification-driven research: margin-gated deferred refinement, out-of-core verification on Apple Silicon. TR-01 published.

Python 63.2% JavaScript 23.5% CSS 11.8% Shell 0.9% Makefile 0.5%

expH: adaptive per-cell budget (~3s wall) + iostat ground-truth logger

Short cells (~10ms wall) produced impossible throughput readings;
iostat log validates that measured bytes came from the disk controller.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Simon-Pierre Boucher committed 6 h ago (Aug 12, 2026) parent da10e00

Showing 2 changed files with +756 and −4

modified experiments/micro/expH_ssd_feasibility/benchmark.py +50 −4
@@ -133,6 +133,42 @@ def warm_cache(path: Path) -> None:
133 133 pass
134 134
135 135
136 +def adaptive_budget(path: Path, file_size: int, block: int, pattern: str,
137 + nocache: bool, threads: int, floor: int,
138 + target_s: float = 3.0) -> int:
139 + """Choose a per-cell byte budget so each repeat runs ~target_s of wall
140 + time (short cells are dominated by thread-start overhead and timer
141 + granularity — the first quick run produced impossible 48 GB/s cells at
142 + ~10 ms wall)."""
143 + probe = measure(path, file_size, block, pattern, nocache, threads,
144 + budget_bytes=max(floor // 8, 32 << 20), seed=7)
145 + rate = probe["mb_per_s"] * 1e6
146 + budget = int(rate * target_s)
147 + return max(floor, min(budget, 8 << 30))
148 +
149 +
150 +class IostatLogger:
151 + """Log `iostat -d -w 1` for the duration of the run — ground truth for
152 + whether bytes actually came from the disk controller vs the page cache."""
153 +
154 + def __init__(self, out_path: Path) -> None:
155 + self.out_path = out_path
156 + self.proc: object = None
157 +
158 + def __enter__(self) -> "IostatLogger":
159 + import subprocess
160 +
161 + self._fh = open(self.out_path, "w")
162 + self.proc = subprocess.Popen(
163 + ["iostat", "-d", "-w", "1"], stdout=self._fh, stderr=subprocess.DEVNULL
164 + )
165 + return self
166 +
167 + def __exit__(self, *exc: object) -> None:
168 + self.proc.terminate()
169 + self._fh.close()
170 +
171 +
136 172 class GpuLoad:
137 173 """Background MLX matmul loop to contend for unified memory bandwidth."""
138 174
@@ -196,6 +232,12 @@ def main() -> None:
196 232 results: list[dict] = []
197 233 budget = args.budget_mib << 20
198 234
235 + ts = datetime.now(timezone.utc).strftime("%Y%m%dT%H%M%SZ")
236 + out_dir = REPO_ROOT / "results" / "expH_ssd_feasibility" / ts
237 + out_dir.mkdir(parents=True)
238 + iostat = IostatLogger(out_dir / "iostat.log")
239 + iostat.__enter__()
240 +
199 241 def run_cells(gpu_loaded: bool) -> None:
200 242 for nocache in (True, False):
201 243 if not nocache:
@@ -205,9 +247,14 @@ def main() -> None:
205 247 for threads in thread_counts:
206 248 if gpu_loaded and (pattern != "random" or not nocache or threads != 8):
207 249 continue # GPU-load condition: key cells only
250 + cell_budget = (
251 + budget if args.quick else adaptive_budget(
252 + test_file, file_size, block, pattern, nocache,
253 + threads, floor=budget)
254 + )
208 255 runs = [
209 256 measure(test_file, file_size, block, pattern, nocache,
210 threads, budget, seed=1000 + r)
257 + threads, cell_budget, seed=1000 + r)
211 258 for r in range(args.repeats)
212 259 ]
213 260 mbps = [r["mb_per_s"] for r in runs]
@@ -218,6 +265,7 @@ def main() -> None:
218 265 "threads": threads,
219 266 "gpu_load": gpu_loaded,
220 267 "repeats": args.repeats,
268 + "budget_bytes": cell_budget,
221 269 "mb_per_s_mean": statistics.mean(mbps),
222 270 "mb_per_s_median": statistics.median(mbps),
223 271 "mb_per_s_std": statistics.stdev(mbps) if len(mbps) > 1 else 0.0,
@@ -248,9 +296,7 @@ def main() -> None:
248 296 else:
249 297 print("MLX not available — skipping GPU-load condition", flush=True)
250 298
251 ts = datetime.now(timezone.utc).strftime("%Y%m%dT%H%M%SZ")
252 out_dir = REPO_ROOT / "results" / "expH_ssd_feasibility" / ts
253 out_dir.mkdir(parents=True)
299 + iostat.__exit__()
254 300 payload = {
255 301 "experiment": "expH_ssd_feasibility",
256 302 "author": "Simon-Pierre Boucher",
added results/expH_ssd_feasibility/20260812T034204Z/results.json +706 −0
@@ -0,0 +1,706 @@
1 +{
2 + "experiment": "expH_ssd_feasibility",
3 + "author": "Simon-Pierre Boucher",
4 + "contact": "contact@spboucher.ai",
5 + "manifest": {
6 + "author": "Simon-Pierre Boucher",
7 + "contact": "contact@spboucher.ai",
8 + "project": "localvm-research",
9 + "collected_utc": "2026-08-12T03:41:40.574514+00:00",
10 + "chip": {
11 + "brand": "Apple M5 Max",
12 + "arch": "arm64",
13 + "cores_total": 18,
14 + "cores_performance": 6,
15 + "cores_efficiency": 12,
16 + "gpu_cores": 40
17 + },
18 + "memory": {
19 + "unified_bytes": 51539607552,
20 + "unified_gb": 48.0,
21 + "pagesize": 16384
22 + },
23 + "ssd": {
24 + "model": "APPLE SSD AP2048Z",
25 + "size": "2 TB",
26 + "smart_status": "Verified"
27 + },
28 + "os": {
29 + "product": "macOS",
30 + "version": "27.0",
31 + "build": "26A5388g",
32 + "kernel": "27.0.0"
33 + },
34 + "software": {
35 + "python": "3.14.4",
36 + "mlx": "0.32.0",
37 + "mlx_lm": null,
38 + "torch": "2.12.0",
39 + "numpy": "2.4.4"
40 + },
41 + "git": {
42 + "commit": "da10e00f0445ed6fb1d029f52e034038c7259909",
43 + "dirty_tree": false
44 + },
45 + "thermal_level_at_collect": null
46 + },
47 + "config": {
48 + "file_gib": 8.0,
49 + "repeats": 1,
50 + "budget_mib": 512,
51 + "quick": true
52 + },
53 + "test_file_bytes": 8589934592,
54 + "gpu_load_matmul_iterations": 1157,
55 + "thermal_level_after": null,
56 + "cells": [
57 + {
58 + "block_bytes": 4096,
59 + "pattern": "random",
60 + "nocache": true,
61 + "threads": 1,
62 + "gpu_load": false,
63 + "repeats": 1,
64 + "mb_per_s_mean": 68.07234616035791,
65 + "mb_per_s_median": 68.07234616035791,
66 + "mb_per_s_std": 0.0,
67 + "iops_mean": 16619.22513680613
68 + },
69 + {
70 + "block_bytes": 4096,
71 + "pattern": "random",
72 + "nocache": true,
73 + "threads": 8,
74 + "gpu_load": false,
75 + "repeats": 1,
76 + "mb_per_s_mean": 496.3661326173465,
77 + "mb_per_s_median": 496.3661326173465,
78 + "mb_per_s_std": 0.0,
79 + "iops_mean": 121183.13784603187
80 + },
81 + {
82 + "block_bytes": 16384,
83 + "pattern": "random",
84 + "nocache": true,
85 + "threads": 1,
86 + "gpu_load": false,
87 + "repeats": 1,
88 + "mb_per_s_mean": 271.131993548063,
89 + "mb_per_s_median": 271.131993548063,
90 + "mb_per_s_std": 0.0,
91 + "iops_mean": 16548.583590580016
92 + },
93 + {
94 + "block_bytes": 16384,
95 + "pattern": "random",
96 + "nocache": true,
97 + "threads": 8,
98 + "gpu_load": false,
99 + "repeats": 1,
100 + "mb_per_s_mean": 1960.6533223068227,
101 + "mb_per_s_median": 1960.6533223068227,
102 + "mb_per_s_std": 0.0,
103 + "iops_mean": 119668.78187907854
104 + },
105 + {
106 + "block_bytes": 65536,
107 + "pattern": "random",
108 + "nocache": true,
109 + "threads": 1,
110 + "gpu_load": false,
111 + "repeats": 1,
112 + "mb_per_s_mean": 814.5748552576947,
113 + "mb_per_s_median": 814.5748552576947,
114 + "mb_per_s_std": 0.0,
115 + "iops_mean": 12429.425891993633
116 + },
117 + {
118 + "block_bytes": 65536,
119 + "pattern": "random",
120 + "nocache": true,
121 + "threads": 8,
122 + "gpu_load": false,
123 + "repeats": 1,
124 + "mb_per_s_mean": 5491.534145583686,
125 + "mb_per_s_median": 5491.534145583686,
126 + "mb_per_s_std": 0.0,
127 + "iops_mean": 83794.16115697763
128 + },
129 + {
130 + "block_bytes": 262144,
131 + "pattern": "random",
132 + "nocache": true,
133 + "threads": 1,
134 + "gpu_load": false,
135 + "repeats": 1,
136 + "mb_per_s_mean": 2205.196208443168,
137 + "mb_per_s_median": 2205.196208443168,
138 + "mb_per_s_std": 0.0,
139 + "iops_mean": 8412.155946514771
140 + },
141 + {
142 + "block_bytes": 262144,
143 + "pattern": "random",
144 + "nocache": true,
145 + "threads": 8,
146 + "gpu_load": false,
147 + "repeats": 1,
148 + "mb_per_s_mean": 11420.092406740816,
149 + "mb_per_s_median": 11420.092406740816,
150 + "mb_per_s_std": 0.0,
151 + "iops_mean": 43564.19527717902
152 + },
153 + {
154 + "block_bytes": 1048576,
155 + "pattern": "random",
156 + "nocache": true,
157 + "threads": 1,
158 + "gpu_load": false,
159 + "repeats": 1,
160 + "mb_per_s_mean": 4730.353789106931,
161 + "mb_per_s_median": 4730.353789106931,
162 + "mb_per_s_std": 0.0,
163 + "iops_mean": 4511.216916186267
164 + },
165 + {
166 + "block_bytes": 1048576,
167 + "pattern": "random",
168 + "nocache": true,
169 + "threads": 8,
170 + "gpu_load": false,
171 + "repeats": 1,
172 + "mb_per_s_mean": 13297.702575428926,
173 + "mb_per_s_median": 13297.702575428926,
174 + "mb_per_s_std": 0.0,
175 + "iops_mean": 12681.677413395812
176 + },
177 + {
178 + "block_bytes": 4194304,
179 + "pattern": "random",
180 + "nocache": true,
181 + "threads": 1,
182 + "gpu_load": false,
183 + "repeats": 1,
184 + "mb_per_s_mean": 9251.755916950317,
185 + "mb_per_s_median": 9251.755916950317,
186 + "mb_per_s_std": 0.0,
187 + "iops_mean": 2205.790499913768
188 + },
189 + {
190 + "block_bytes": 4194304,
191 + "pattern": "random",
192 + "nocache": true,
193 + "threads": 8,
194 + "gpu_load": false,
195 + "repeats": 1,
196 + "mb_per_s_mean": 48436.56730429854,
197 + "mb_per_s_median": 48436.56730429854,
198 + "mb_per_s_std": 0.0,
199 + "iops_mean": 11548.177553248059
200 + },
201 + {
202 + "block_bytes": 4096,
203 + "pattern": "sequential",
204 + "nocache": true,
205 + "threads": 1,
206 + "gpu_load": false,
207 + "repeats": 1,
208 + "mb_per_s_mean": 209.20906655273933,
209 + "mb_per_s_median": 209.20906655273933,
210 + "mb_per_s_std": 0.0,
211 + "iops_mean": 51076.43226385237
212 + },
213 + {
214 + "block_bytes": 4096,
215 + "pattern": "sequential",
216 + "nocache": true,
217 + "threads": 8,
218 + "gpu_load": false,
219 + "repeats": 1,
220 + "mb_per_s_mean": 506.06101080108255,
221 + "mb_per_s_median": 506.06101080108255,
222 + "mb_per_s_std": 0.0,
223 + "iops_mean": 123550.05146510804
224 + },
225 + {
226 + "block_bytes": 16384,
227 + "pattern": "sequential",
228 + "nocache": true,
229 + "threads": 1,
230 + "gpu_load": false,
231 + "repeats": 1,
232 + "mb_per_s_mean": 758.7813571212968,
233 + "mb_per_s_median": 758.7813571212968,
234 + "mb_per_s_std": 0.0,
235 + "iops_mean": 46312.3386914854
236 + },
237 + {
238 + "block_bytes": 16384,
239 + "pattern": "sequential",
240 + "nocache": true,
241 + "threads": 8,
242 + "gpu_load": false,
243 + "repeats": 1,
244 + "mb_per_s_mean": 2017.8502260046444,
245 + "mb_per_s_median": 2017.8502260046444,
246 + "mb_per_s_std": 0.0,
247 + "iops_mean": 123159.80383329128
248 + },
249 + {
250 + "block_bytes": 65536,
251 + "pattern": "sequential",
252 + "nocache": true,
253 + "threads": 1,
254 + "gpu_load": false,
255 + "repeats": 1,
256 + "mb_per_s_mean": 2106.82095025044,
257 + "mb_per_s_median": 2106.82095025044,
258 + "mb_per_s_std": 0.0,
259 + "iops_mean": 32147.53647232727
260 + },
261 + {
262 + "block_bytes": 65536,
263 + "pattern": "sequential",
264 + "nocache": true,
265 + "threads": 8,
266 + "gpu_load": false,
267 + "repeats": 1,
268 + "mb_per_s_mean": 5736.668564602901,
269 + "mb_per_s_median": 5736.668564602901,
270 + "mb_per_s_std": 0.0,
271 + "iops_mean": 87534.61554875031
272 + },
273 + {
274 + "block_bytes": 262144,
275 + "pattern": "sequential",
276 + "nocache": true,
277 + "threads": 1,
278 + "gpu_load": false,
279 + "repeats": 1,
280 + "mb_per_s_mean": 4853.322654058267,
281 + "mb_per_s_median": 4853.322654058267,
282 + "mb_per_s_std": 0.0,
283 + "iops_mean": 18513.95665763194
284 + },
285 + {
286 + "block_bytes": 262144,
287 + "pattern": "sequential",
288 + "nocache": true,
289 + "threads": 8,
290 + "gpu_load": false,
291 + "repeats": 1,
292 + "mb_per_s_mean": 12770.756964429242,
293 + "mb_per_s_median": 12770.756964429242,
294 + "mb_per_s_std": 0.0,
295 + "iops_mean": 48716.57167216965
296 + },
297 + {
298 + "block_bytes": 1048576,
299 + "pattern": "sequential",
300 + "nocache": true,
301 + "threads": 1,
302 + "gpu_load": false,
303 + "repeats": 1,
304 + "mb_per_s_mean": 6932.3758070335025,
305 + "mb_per_s_median": 6932.3758070335025,
306 + "mb_per_s_std": 0.0,
307 + "iops_mean": 6611.228758843901
308 + },
309 + {
310 + "block_bytes": 1048576,
311 + "pattern": "sequential",
312 + "nocache": true,
313 + "threads": 8,
314 + "gpu_load": false,
315 + "repeats": 1,
316 + "mb_per_s_mean": 13539.766107199002,
317 + "mb_per_s_median": 13539.766107199002,
318 + "mb_per_s_std": 0.0,
319 + "iops_mean": 12912.527186583522
320 + },
321 + {
322 + "block_bytes": 4194304,
323 + "pattern": "sequential",
324 + "nocache": true,
325 + "threads": 1,
326 + "gpu_load": false,
327 + "repeats": 1,
328 + "mb_per_s_mean": 12008.923008092182,
329 + "mb_per_s_median": 12008.923008092182,
330 + "mb_per_s_std": 0.0,
331 + "iops_mean": 2863.1503601294
332 + },
333 + {
334 + "block_bytes": 4194304,
335 + "pattern": "sequential",
336 + "nocache": true,
337 + "threads": 8,
338 + "gpu_load": false,
339 + "repeats": 1,
340 + "mb_per_s_mean": 48118.56971925566,
341 + "mb_per_s_median": 48118.56971925566,
342 + "mb_per_s_std": 0.0,
343 + "iops_mean": 11472.361020864406
344 + },
345 + {
346 + "block_bytes": 4096,
347 + "pattern": "random",
348 + "nocache": false,
349 + "threads": 1,
350 + "gpu_load": false,
351 + "repeats": 1,
352 + "mb_per_s_mean": 4935.67178624295,
353 + "mb_per_s_median": 4935.67178624295,
354 + "mb_per_s_std": 0.0,
355 + "iops_mean": 1204997.99468822
356 + },
357 + {
358 + "block_bytes": 4096,
359 + "pattern": "random",
360 + "nocache": false,
361 + "threads": 8,
362 + "gpu_load": false,
363 + "repeats": 1,
364 + "mb_per_s_mean": 824.4112221360961,
365 + "mb_per_s_median": 824.4112221360961,
366 + "mb_per_s_std": 0.0,
367 + "iops_mean": 201272.2710293203
368 + },
369 + {
370 + "block_bytes": 16384,
371 + "pattern": "random",
372 + "nocache": false,
373 + "threads": 1,
374 + "gpu_load": false,
375 + "repeats": 1,
376 + "mb_per_s_mean": 13950.209889376401,
377 + "mb_per_s_median": 13950.209889376401,
378 + "mb_per_s_std": 0.0,
379 + "iops_mean": 851453.2403183839
380 + },
381 + {
382 + "block_bytes": 16384,
383 + "pattern": "random",
384 + "nocache": false,
385 + "threads": 8,
386 + "gpu_load": false,
387 + "repeats": 1,
388 + "mb_per_s_mean": 3209.6778471057946,
389 + "mb_per_s_median": 3209.6778471057946,
390 + "mb_per_s_std": 0.0,
391 + "iops_mean": 195903.18891026577
392 + },
393 + {
394 + "block_bytes": 65536,
395 + "pattern": "random",
396 + "nocache": false,
397 + "threads": 1,
398 + "gpu_load": false,
399 + "repeats": 1,
400 + "mb_per_s_mean": 27020.64294689821,
401 + "mb_per_s_median": 27020.64294689821,
402 + "mb_per_s_std": 0.0,
403 + "iops_mean": 412302.29105984815
404 + },
405 + {
406 + "block_bytes": 65536,
407 + "pattern": "random",
408 + "nocache": false,
409 + "threads": 8,
410 + "gpu_load": false,
411 + "repeats": 1,
412 + "mb_per_s_mean": 12456.088389795515,
413 + "mb_per_s_median": 12456.088389795515,
414 + "mb_per_s_std": 0.0,
415 + "iops_mean": 190064.82528374504
416 + },
417 + {
418 + "block_bytes": 262144,
419 + "pattern": "random",
420 + "nocache": false,
421 + "threads": 1,
422 + "gpu_load": false,
423 + "repeats": 1,
424 + "mb_per_s_mean": 40575.46917143643,
425 + "mb_per_s_median": 40575.46917143643,
426 + "mb_per_s_std": 0.0,
427 + "iops_mean": 154783.13129973004
428 + },
429 + {
430 + "block_bytes": 262144,
431 + "pattern": "random",
432 + "nocache": false,
433 + "threads": 8,
434 + "gpu_load": false,
435 + "repeats": 1,
436 + "mb_per_s_mean": 42975.88825195316,
437 + "mb_per_s_median": 42975.88825195316,
438 + "mb_per_s_std": 0.0,
439 + "iops_mean": 163940.0034025313
440 + },
441 + {
442 + "block_bytes": 1048576,
443 + "pattern": "random",
444 + "nocache": false,
445 + "threads": 1,
446 + "gpu_load": false,
447 + "repeats": 1,
448 + "mb_per_s_mean": 44945.08365905515,
449 + "mb_per_s_median": 44945.08365905515,
450 + "mb_per_s_std": 0.0,
451 + "iops_mean": 42862.97193437113
452 + },
453 + {
454 + "block_bytes": 1048576,
455 + "pattern": "random",
456 + "nocache": false,
457 + "threads": 8,
458 + "gpu_load": false,
459 + "repeats": 1,
460 + "mb_per_s_mean": 113147.53539277086,
461 + "mb_per_s_median": 113147.53539277086,
462 + "mb_per_s_std": 0.0,
463 + "iops_mean": 107905.89846875273
464 + },
465 + {
466 + "block_bytes": 4194304,
467 + "pattern": "random",
468 + "nocache": false,
469 + "threads": 1,
470 + "gpu_load": false,
471 + "repeats": 1,
472 + "mb_per_s_mean": 41189.77238374518,
473 + "mb_per_s_median": 41189.77238374518,
474 + "mb_per_s_std": 0.0,
475 + "iops_mean": 9820.407005249304
476 + },
477 + {
478 + "block_bytes": 4194304,
479 + "pattern": "random",
480 + "nocache": false,
481 + "threads": 8,
482 + "gpu_load": false,
483 + "repeats": 1,
484 + "mb_per_s_mean": 89062.25289557967,
485 + "mb_per_s_median": 89062.25289557967,
486 + "mb_per_s_std": 0.0,
487 + "iops_mean": 21234.095786948124
488 + },
489 + {
490 + "block_bytes": 4096,
491 + "pattern": "sequential",
492 + "nocache": false,
493 + "threads": 1,
494 + "gpu_load": false,
495 + "repeats": 1,
496 + "mb_per_s_mean": 9917.650078616765,
497 + "mb_per_s_median": 9917.650078616765,
498 + "mb_per_s_std": 0.0,
499 + "iops_mean": 2421301.2887247964
500 + },
501 + {
502 + "block_bytes": 4096,
503 + "pattern": "sequential",
504 + "nocache": false,
505 + "threads": 8,
506 + "gpu_load": false,
507 + "repeats": 1,
508 + "mb_per_s_mean": 869.1974309504308,
509 + "mb_per_s_median": 869.1974309504308,
510 + "mb_per_s_std": 0.0,
511 + "iops_mean": 212206.4040406325
512 + },
513 + {
514 + "block_bytes": 16384,
515 + "pattern": "sequential",
516 + "nocache": false,
517 + "threads": 1,
518 + "gpu_load": false,
519 + "repeats": 1,
520 + "mb_per_s_mean": 22948.963126444007,
521 + "mb_per_s_median": 22948.963126444007,
522 + "mb_per_s_std": 0.0,
523 + "iops_mean": 1400693.5501979985
524 + },
525 + {
526 + "block_bytes": 16384,
527 + "pattern": "sequential",
528 + "nocache": false,
529 + "threads": 8,
530 + "gpu_load": false,
531 + "repeats": 1,
532 + "mb_per_s_mean": 3265.8922507775833,
533 + "mb_per_s_median": 3265.8922507775833,
534 + "mb_per_s_std": 0.0,
535 + "iops_mean": 199334.24382187397
536 + },
537 + {
538 + "block_bytes": 65536,
539 + "pattern": "sequential",
540 + "nocache": false,
541 + "threads": 1,
542 + "gpu_load": false,
543 + "repeats": 1,
544 + "mb_per_s_mean": 32144.830936898197,
545 + "mb_per_s_median": 32144.830936898197,
546 + "mb_per_s_std": 0.0,
547 + "iops_mean": 490491.19471585384
548 + },
549 + {
550 + "block_bytes": 65536,
551 + "pattern": "sequential",
552 + "nocache": false,
553 + "threads": 8,
554 + "gpu_load": false,
555 + "repeats": 1,
556 + "mb_per_s_mean": 12507.318354170413,
557 + "mb_per_s_median": 12507.318354170413,
558 + "mb_per_s_std": 0.0,
559 + "iops_mean": 190846.53250382098
560 + },
561 + {
562 + "block_bytes": 262144,
563 + "pattern": "sequential",
564 + "nocache": false,
565 + "threads": 1,
566 + "gpu_load": false,
567 + "repeats": 1,
568 + "mb_per_s_mean": 42508.15604606725,
569 + "mb_per_s_median": 42508.15604606725,
570 + "mb_per_s_std": 0.0,
571 + "iops_mean": 162155.74663569353
572 + },
573 + {
574 + "block_bytes": 262144,
575 + "pattern": "sequential",
576 + "nocache": false,
577 + "threads": 8,
578 + "gpu_load": false,
579 + "repeats": 1,
580 + "mb_per_s_mean": 42124.31607022188,
581 + "mb_per_s_median": 42124.31607022188,
582 + "mb_per_s_std": 0.0,
583 + "iops_mean": 160691.51332939864
584 + },
585 + {
586 + "block_bytes": 1048576,
587 + "pattern": "sequential",
588 + "nocache": false,
589 + "threads": 1,
590 + "gpu_load": false,
591 + "repeats": 1,
592 + "mb_per_s_mean": 47520.16215601438,
593 + "mb_per_s_median": 47520.16215601438,
594 + "mb_per_s_std": 0.0,
595 + "iops_mean": 45318.758159651166
596 + },
597 + {
598 + "block_bytes": 1048576,
599 + "pattern": "sequential",
600 + "nocache": false,
601 + "threads": 8,
602 + "gpu_load": false,
603 + "repeats": 1,
604 + "mb_per_s_mean": 111891.81440715115,
605 + "mb_per_s_median": 111891.81440715115,
606 + "mb_per_s_std": 0.0,
607 + "iops_mean": 106708.34961619487
608 + },
609 + {
610 + "block_bytes": 4194304,
611 + "pattern": "sequential",
612 + "nocache": false,
613 + "threads": 1,
614 + "gpu_load": false,
615 + "repeats": 1,
616 + "mb_per_s_mean": 44097.23107906072,
617 + "mb_per_s_median": 44097.23107906072,
618 + "mb_per_s_std": 0.0,
619 + "iops_mean": 10513.59917618292
620 + },
621 + {
622 + "block_bytes": 4194304,
623 + "pattern": "sequential",
624 + "nocache": false,
625 + "threads": 8,
626 + "gpu_load": false,
627 + "repeats": 1,
628 + "mb_per_s_mean": 85723.8931130823,
629 + "mb_per_s_median": 85723.8931130823,
630 + "mb_per_s_std": 0.0,
631 + "iops_mean": 20438.168791075303
632 + },
633 + {
634 + "block_bytes": 4096,
635 + "pattern": "random",
636 + "nocache": true,
637 + "threads": 8,
638 + "gpu_load": true,
639 + "repeats": 1,
640 + "mb_per_s_mean": 482.32819455456456,
641 + "mb_per_s_median": 482.32819455456456,
642 + "mb_per_s_std": 0.0,
643 + "iops_mean": 117755.90687367298
644 + },
645 + {
646 + "block_bytes": 16384,
647 + "pattern": "random",
648 + "nocache": true,
649 + "threads": 8,
650 + "gpu_load": true,
651 + "repeats": 1,
652 + "mb_per_s_mean": 1898.0719320705184,
653 + "mb_per_s_median": 1898.0719320705184,
654 + "mb_per_s_std": 0.0,
655 + "iops_mean": 115849.11694766348
656 + },
657 + {
658 + "block_bytes": 65536,
659 + "pattern": "random",
660 + "nocache": true,
661 + "threads": 8,
662 + "gpu_load": true,
663 + "repeats": 1,
664 + "mb_per_s_mean": 5317.859323720137,
665 + "mb_per_s_median": 5317.859323720137,
666 + "mb_per_s_std": 0.0,
667 + "iops_mean": 81144.09368469447
668 + },
669 + {
670 + "block_bytes": 262144,
671 + "pattern": "random",
672 + "nocache": true,
673 + "threads": 8,
674 + "gpu_load": true,
675 + "repeats": 1,
676 + "mb_per_s_mean": 11435.548894125748,
677 + "mb_per_s_median": 11435.548894125748,
678 + "mb_per_s_std": 0.0,
679 + "iops_mean": 43623.15709734248
680 + },
681 + {
682 + "block_bytes": 1048576,
683 + "pattern": "random",
684 + "nocache": true,
685 + "threads": 8,
686 + "gpu_load": true,
687 + "repeats": 1,
688 + "mb_per_s_mean": 13418.907192403985,
689 + "mb_per_s_median": 13418.907192403985,
690 + "mb_per_s_std": 0.0,
691 + "iops_mean": 12797.267143634783
692 + },
693 + {
694 + "block_bytes": 4194304,
695 + "pattern": "random",
696 + "nocache": true,
697 + "threads": 8,
698 + "gpu_load": true,
699 + "repeats": 1,
700 + "mb_per_s_mean": 13800.65849336868,
701 + "mb_per_s_median": 13800.65849336868,
702 + "mb_per_s_std": 0.0,
703 + "iops_mean": 3290.333388654871
704 + }
705 + ]
706 +}
\ No newline at end of file
707