@@ -132,7 +132,17 @@ def timer(cmd):
132
132
133
133
class RunArgs :
134
134
def __init__ (
135
- self , env = {}, arg = "" , stdin = "" , stdin_sh = "sh" , waitline = "" , mount = [], waitURL = "" , runtime = "" , shmSize = "" , workDir = ""
135
+ self ,
136
+ env = {},
137
+ arg = "" ,
138
+ stdin = "" ,
139
+ stdin_sh = "sh" ,
140
+ waitline = "" ,
141
+ mount = [],
142
+ waitURL = "" ,
143
+ runtime = "" ,
144
+ shmSize = "" ,
145
+ workDir = "" ,
136
146
):
137
147
self .env = env
138
148
self .arg = arg
@@ -235,6 +245,14 @@ def set_tag(self, tag):
235
245
self .name = f"{ self .name } :{ tag } "
236
246
237
247
248
+ class BenchResult :
249
+ def __init__ (self , pull_elapsed , create_elapsed , run_elapsed , size ):
250
+ self .pull_elapsed = pull_elapsed
251
+ self .create_elapsed = create_elapsed
252
+ self .run_elapsed = run_elapsed
253
+ self .size = size
254
+
255
+
238
256
class BenchRunner :
239
257
def __init__ (
240
258
self ,
@@ -284,7 +302,9 @@ def load_bench_config(self):
284
302
args = line ["bench_args" ]
285
303
print (f"CMD_ARG_WAIT image: { name } , args: { args } " )
286
304
cmd_arg_wait_runner [name ] = RunArgs (
287
- env = dict ([(item ["key" ], item ["value" ]) for item in args ["envs" ]]) if "envs" in args else {},
305
+ env = dict ([(item ["key" ], item ["value" ]) for item in args ["envs" ]])
306
+ if "envs" in args
307
+ else {},
288
308
waitline = args ["wait_line" ] if "wait_line" in args else "" ,
289
309
mount = [(m ["host_path" ], m ["container_path" ]) for m in args ["mount" ]]
290
310
if "mount" in args
@@ -306,7 +326,9 @@ def load_bench_config(self):
306
326
args = line ["bench_args" ]
307
327
print (f"CMD_STDIN image: { name } , args: { args } " )
308
328
cmd_stdin_runner [name ] = RunArgs (
309
- env = dict ([(item ["key" ], item ["value" ]) for item in args ["envs" ]]) if "envs" in args else {},
329
+ env = dict ([(item ["key" ], item ["value" ]) for item in args ["envs" ]])
330
+ if "envs" in args
331
+ else {},
310
332
mount = [(m ["host_path" ], m ["container_path" ]) for m in args ["mount" ]]
311
333
if "mount" in args
312
334
else [],
@@ -327,7 +349,9 @@ def load_bench_config(self):
327
349
args = line ["bench_args" ]
328
350
print (f"CMD_ARG image: { name } , args: { args } " )
329
351
cmd_arg_runner [name ] = RunArgs (
330
- env = dict ([(item ["key" ], item ["value" ]) for item in args ["envs" ]]) if "envs" in args else {},
352
+ env = dict ([(item ["key" ], item ["value" ]) for item in args ["envs" ]])
353
+ if "envs" in args
354
+ else {},
331
355
mount = [(m ["host_path" ], m ["container_path" ]) for m in args ["mount" ]]
332
356
if "mount" in args
333
357
else [],
@@ -348,7 +372,9 @@ def load_bench_config(self):
348
372
args = line ["bench_args" ]
349
373
print (f"CMD_URL_WAIT image: { name } , args: { args } " )
350
374
cmd_url_wait_runner [name ] = RunArgs (
351
- env = dict ([(item ["key" ], item ["value" ]) for item in args ["envs" ]]) if "envs" in args else {},
375
+ env = dict ([(item ["key" ], item ["value" ]) for item in args ["envs" ]])
376
+ if "envs" in args
377
+ else {},
352
378
waitURL = args ["wait_url" ] if "wait_url" in args else "" ,
353
379
mount = [(m ["host_path" ], m ["container_path" ]) for m in args ["mount" ]]
354
380
if "mount" in args
@@ -387,6 +413,8 @@ def run_echo_hello(self, repo: str):
387
413
with timer (pull_cmd ) as t :
388
414
pull_elapsed = t
389
415
416
+ size = self .image_size (image_ref )
417
+
390
418
create_cmd = self .create_echo_hello_cmd (image_ref , container_name )
391
419
print (create_cmd )
392
420
@@ -403,7 +431,7 @@ def run_echo_hello(self, repo: str):
403
431
if self .cleanup :
404
432
self .clean_up (image_ref , container_name )
405
433
406
- return pull_elapsed , create_elapsed , run_elapsed
434
+ return BenchResult ( pull_elapsed , create_elapsed , run_elapsed , size )
407
435
408
436
def run_cmd_arg (self , repo , runargs ):
409
437
image_ref = self .image_ref (repo )
@@ -416,6 +444,8 @@ def run_cmd_arg(self, repo, runargs):
416
444
with timer (pull_cmd ) as t :
417
445
pull_elapsed = t
418
446
447
+ size = self .image_size (image_ref )
448
+
419
449
create_cmd = self .create_cmd_arg_cmd (image_ref , container_name , runargs )
420
450
print (create_cmd )
421
451
@@ -432,7 +462,7 @@ def run_cmd_arg(self, repo, runargs):
432
462
if self .cleanup :
433
463
self .clean_up (image_ref , container_name )
434
464
435
- return pull_elapsed , create_elapsed , run_elapsed
465
+ return BenchResult ( pull_elapsed , create_elapsed , run_elapsed , size )
436
466
437
467
def run_cmd_arg_wait (self , repo , runargs ):
438
468
image_ref = self .image_ref (repo )
@@ -445,6 +475,8 @@ def run_cmd_arg_wait(self, repo, runargs):
445
475
with timer (pull_cmd ) as t :
446
476
pull_elapsed = t
447
477
478
+ size = self .image_size (image_ref )
479
+
448
480
create_cmd = self .create_cmd_arg_wait_cmd (image_ref , container_name , runargs )
449
481
print (create_cmd )
450
482
@@ -482,7 +514,7 @@ def run_cmd_arg_wait(self, repo, runargs):
482
514
if self .cleanup :
483
515
self .clean_up (image_ref , container_name )
484
516
485
- return pull_elapsed , create_elapsed , run_elapsed
517
+ return BenchResult ( pull_elapsed , create_elapsed , run_elapsed , size )
486
518
487
519
def run_cmd_stdin (self , repo , runargs ):
488
520
image_ref = self .image_ref (repo )
@@ -495,6 +527,8 @@ def run_cmd_stdin(self, repo, runargs):
495
527
with timer (pull_cmd ) as t :
496
528
pull_elapsed = t
497
529
530
+ size = self .image_size (image_ref )
531
+
498
532
create_cmd = self .create_cmd_stdin_cmd (image_ref , container_name , runargs )
499
533
print (create_cmd )
500
534
@@ -530,7 +564,7 @@ def run_cmd_stdin(self, repo, runargs):
530
564
if self .cleanup :
531
565
self .clean_up (image_ref , container_name )
532
566
533
- return pull_elapsed , create_elapsed , run_elapsed
567
+ return BenchResult ( pull_elapsed , create_elapsed , run_elapsed , size )
534
568
535
569
def run_cmd_url_wait (self , repo , runargs ):
536
570
image_ref = self .image_ref (repo )
@@ -543,6 +577,8 @@ def run_cmd_url_wait(self, repo, runargs):
543
577
with timer (pull_cmd ) as t :
544
578
pull_elapsed = t
545
579
580
+ size = self .image_size (image_ref )
581
+
546
582
create_cmd = self .create_cmd_url_wait_cmd (image_ref , container_id , runargs )
547
583
print (create_cmd )
548
584
@@ -574,7 +610,7 @@ def run_cmd_url_wait(self, repo, runargs):
574
610
if self .cleanup :
575
611
self .clean_up (image_ref , container_id )
576
612
577
- return pull_elapsed , create_elapsed , run_elapsed
613
+ return BenchResult ( pull_elapsed , create_elapsed , run_elapsed , size )
578
614
579
615
def run (self , bench ):
580
616
repo = image_repo (bench .name )
@@ -602,6 +638,12 @@ def pull_cmd(self, image_ref):
602
638
f"nerdctl --snapshotter { self .snapshotter } pull { insecure_flag } { image_ref } "
603
639
)
604
640
641
+ def image_size (self , image_ref ):
642
+ cmd = f"nerdctl images { str (image_ref )} "
643
+ p = subprocess .Popen (cmd , shell = True , stdout = subprocess .PIPE )
644
+ out = p .communicate ()[0 ].decode ("utf-8" )
645
+ return " " .join (out .split ()[- 2 :])
646
+
605
647
def create_echo_hello_cmd (self , image_ref , container_id ):
606
648
return f"nerdctl --snapshotter { self .snapshotter } create --net=host --name={ container_id } { image_ref } -- echo hello"
607
649
@@ -886,13 +928,19 @@ def main():
886
928
f = open (outpath + "." + output_format , "w" )
887
929
888
930
if output_format == "csv" :
889
- csv_headers = "timestamp,repo,bench,pull_elapsed(s),create_elapsed(s),run_elapsed(s),total_elapsed(s)"
931
+ csv_headers = "timestamp,repo,bench,pull_elapsed(s),create_elapsed(s),run_elapsed(s),total_elapsed(s),image_size "
890
932
f .writelines (csv_headers + "\n " )
891
933
f .flush ()
892
934
893
935
for bench in benches :
894
936
for _ in range (bench_times ):
895
- pull_elapsed , create_elapsed , run_elapsed = runner .operation (op , bench )
937
+ bench_result = runner .operation (op , bench )
938
+ pull_elapsed , create_elapsed , run_elapsed , size = (
939
+ bench_result .pull_elapsed ,
940
+ bench_result .create_elapsed ,
941
+ bench_result .run_elapsed ,
942
+ bench_result .size ,
943
+ )
896
944
897
945
total_elapsed = f"{ pull_elapsed + create_elapsed + run_elapsed : .6f} "
898
946
timetamp = int (time .time () * 1000 )
@@ -909,10 +957,11 @@ def main():
909
957
"create_elapsed" : create_elapsed ,
910
958
"run_elapsed" : run_elapsed ,
911
959
"total_elapsed" : total_elapsed ,
960
+ "image_size" : size ,
912
961
}
913
962
line = json .dumps (row )
914
963
elif output_format == "csv" :
915
- line = f"{ timetamp } ,{ bench .repo } ,{ bench .name } ,{ pull_elapsed } ,{ create_elapsed } ,{ run_elapsed } ,{ total_elapsed } "
964
+ line = f"{ timetamp } ,{ bench .repo } ,{ bench .name } ,{ pull_elapsed } ,{ create_elapsed } ,{ run_elapsed } ,{ total_elapsed } , { size } "
916
965
917
966
print (line )
918
967
f .writelines (line + "\n " )
0 commit comments