Skip to content

Commit 6527099

Browse files
committed
feat: save block perf tests data
Save logs and json files for block perf tests. Signed-off-by: Egor Lazarchuk <yegorlz@amazon.co.uk>
1 parent dc09011 commit 6527099

File tree

1 file changed

+20
-21
lines changed

1 file changed

+20
-21
lines changed

tests/integration_tests/performance/test_block_ab.py

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import concurrent
66
import glob
77
import os
8-
import shutil
98
from pathlib import Path
109

1110
import pytest
@@ -45,7 +44,7 @@ def prepare_microvm_for_test(microvm):
4544
check_output("echo 3 > /proc/sys/vm/drop_caches")
4645

4746

48-
def run_fio(microvm, mode, block_size, fio_engine="libaio"):
47+
def run_fio(microvm, mode, block_size, test_output_dir, fio_engine="libaio"):
4948
"""Run a fio test in the specified mode with block size bs."""
5049
cmd = (
5150
CmdBuilder("fio")
@@ -71,16 +70,10 @@ def run_fio(microvm, mode, block_size, fio_engine="libaio"):
7170
.with_arg(f"--write_bw_log={mode}")
7271
.with_arg(f"--write_lat_log={mode}")
7372
.with_arg("--log_avg_msec=1000")
73+
.with_arg("--output-format=json+")
7474
.build()
7575
)
7676

77-
logs_path = Path(microvm.jailer.chroot_base_with_id()) / "fio_output"
78-
79-
if logs_path.is_dir():
80-
shutil.rmtree(logs_path)
81-
82-
logs_path.mkdir()
83-
8477
prepare_microvm_for_test(microvm)
8578

8679
# Start the CPU load monitor.
@@ -93,21 +86,25 @@ def run_fio(microvm, mode, block_size, fio_engine="libaio"):
9386
)
9487

9588
# Print the fio command in the log and run it
96-
rc, _, stderr = microvm.ssh.run(f"cd /tmp; {cmd}")
89+
rc, stdout, stderr = microvm.ssh.run(f"cd /tmp; {cmd}")
9790
assert rc == 0, stderr
9891
assert stderr == ""
9992

100-
microvm.ssh.scp_get("/tmp/*.log", logs_path)
93+
fio_json_path = Path(test_output_dir / "fio.json")
94+
with open(fio_json_path, "w", encoding="utf-8") as f:
95+
f.write(stdout)
96+
97+
microvm.ssh.scp_get("/tmp/*.log", test_output_dir)
10198
microvm.ssh.check_output("rm /tmp/*.log")
10299

103-
return logs_path, cpu_load_future.result()
100+
return cpu_load_future.result()
104101

105102

106-
def process_fio_log_files(logs_glob):
103+
def process_fio_log_files(root_dir, logs_glob):
107104
"""Parses all fio log files matching the given glob and yields tuples of same-timestamp read and write metrics"""
108105
data = [
109-
Path(pathname).read_text("UTF-8").splitlines()
110-
for pathname in glob.glob(logs_glob)
106+
Path(root_dir / pathname).read_text("UTF-8").splitlines()
107+
for pathname in glob.glob(logs_glob, root_dir=root_dir)
111108
]
112109

113110
assert data, "no log files found!"
@@ -134,13 +131,13 @@ def process_fio_log_files(logs_glob):
134131

135132
def emit_fio_metrics(logs_dir, metrics):
136133
"""Parses the fio logs in `{logs_dir}/*_[clat|bw].*.log and emits their contents as CloudWatch metrics"""
137-
for bw_read, bw_write in process_fio_log_files(f"{logs_dir}/*_bw.*.log"):
134+
for bw_read, bw_write in process_fio_log_files(logs_dir, "*_bw.*.log"):
138135
if bw_read:
139136
metrics.put_metric("bw_read", sum(bw_read), "Kilobytes/Second")
140137
if bw_write:
141138
metrics.put_metric("bw_write", sum(bw_write), "Kilobytes/Second")
142139

143-
for lat_read, lat_write in process_fio_log_files(f"{logs_dir}/*_clat.*.log"):
140+
for lat_read, lat_write in process_fio_log_files(logs_dir, "*_clat.*.log"):
144141
# latency values in fio logs are in nanoseconds, but cloudwatch only supports
145142
# microseconds as the more granular unit, so need to divide by 1000.
146143
for value in lat_read:
@@ -164,6 +161,7 @@ def test_block_performance(
164161
fio_engine,
165162
io_engine,
166163
metrics,
164+
results_dir,
167165
):
168166
"""
169167
Execute block device emulation benchmarking scenarios.
@@ -192,9 +190,9 @@ def test_block_performance(
192190

193191
vm.pin_threads(0)
194192

195-
logs_dir, cpu_util = run_fio(vm, fio_mode, fio_block_size, fio_engine)
193+
cpu_util = run_fio(vm, fio_mode, fio_block_size, results_dir, fio_engine)
196194

197-
emit_fio_metrics(logs_dir, metrics)
195+
emit_fio_metrics(results_dir, metrics)
198196

199197
for thread_name, values in cpu_util.items():
200198
for value in values:
@@ -213,6 +211,7 @@ def test_block_vhost_user_performance(
213211
fio_mode,
214212
fio_block_size,
215213
metrics,
214+
test_output_dir,
216215
):
217216
"""
218217
Execute block device emulation benchmarking scenarios.
@@ -242,9 +241,9 @@ def test_block_vhost_user_performance(
242241
next_cpu = vm.pin_threads(0)
243242
vm.disks_vhost_user["scratch"].pin(next_cpu)
244243

245-
logs_dir, cpu_util = run_fio(vm, fio_mode, fio_block_size)
244+
cpu_util = run_fio(vm, fio_mode, fio_block_size, test_output_dir)
246245

247-
emit_fio_metrics(logs_dir, metrics)
246+
emit_fio_metrics(test_output_dir, metrics)
248247

249248
for thread_name, values in cpu_util.items():
250249
for value in values:

0 commit comments

Comments
 (0)