Skip to content

Commit 427fd97

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 3d10ddc commit 427fd97

File tree

1 file changed

+20
-20
lines changed

1 file changed

+20
-20
lines changed

tests/integration_tests/performance/test_block_ab.py

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ def prepare_microvm_for_test(microvm):
4545
check_output("echo 3 > /proc/sys/vm/drop_caches")
4646

4747

48-
def run_fio(microvm, mode, block_size, fio_engine="libaio"):
48+
def run_fio(microvm, mode, block_size, test_output_dir, fio_engine="libaio"):
4949
"""Run a fio test in the specified mode with block size bs."""
5050
cmd = (
5151
CmdBuilder("fio")
@@ -71,16 +71,10 @@ def run_fio(microvm, mode, block_size, fio_engine="libaio"):
7171
.with_arg(f"--write_bw_log={mode}")
7272
.with_arg(f"--write_lat_log={mode}")
7373
.with_arg("--log_avg_msec=1000")
74+
.with_arg("--output-format=json+")
7475
.build()
7576
)
7677

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-
8478
prepare_microvm_for_test(microvm)
8579

8680
# Start the CPU load monitor.
@@ -93,21 +87,25 @@ def run_fio(microvm, mode, block_size, fio_engine="libaio"):
9387
)
9488

9589
# Print the fio command in the log and run it
96-
rc, _, stderr = microvm.ssh.run(f"cd /tmp; {cmd}")
90+
rc, stdout, stderr = microvm.ssh.run(f"cd /tmp; {cmd}")
9791
assert rc == 0, stderr
9892
assert stderr == ""
9993

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

103-
return logs_path, cpu_load_future.result()
101+
return cpu_load_future.result()
104102

105103

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

113111
assert data, "no log files found!"
@@ -134,13 +132,13 @@ def process_fio_log_files(logs_glob):
134132

135133
def emit_fio_metrics(logs_dir, metrics):
136134
"""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"):
135+
for bw_read, bw_write in process_fio_log_files(logs_dir, "*_bw.*.log"):
138136
if bw_read:
139137
metrics.put_metric("bw_read", sum(bw_read), "Kilobytes/Second")
140138
if bw_write:
141139
metrics.put_metric("bw_write", sum(bw_write), "Kilobytes/Second")
142140

143-
for lat_read, lat_write in process_fio_log_files(f"{logs_dir}/*_clat.*.log"):
141+
for lat_read, lat_write in process_fio_log_files(logs_dir, "*_clat.*.log"):
144142
# latency values in fio logs are in nanoseconds, but cloudwatch only supports
145143
# microseconds as the more granular unit, so need to divide by 1000.
146144
for value in lat_read:
@@ -164,6 +162,7 @@ def test_block_performance(
164162
fio_engine,
165163
io_engine,
166164
metrics,
165+
test_output_dir,
167166
):
168167
"""
169168
Execute block device emulation benchmarking scenarios.
@@ -192,9 +191,9 @@ def test_block_performance(
192191

193192
vm.pin_threads(0)
194193

195-
logs_dir, cpu_util = run_fio(vm, fio_mode, fio_block_size, fio_engine)
194+
cpu_util = run_fio(vm, fio_mode, fio_block_size, test_output_dir, fio_engine)
196195

197-
emit_fio_metrics(logs_dir, metrics)
196+
emit_fio_metrics(test_output_dir, metrics)
198197

199198
for thread_name, values in cpu_util.items():
200199
for value in values:
@@ -213,6 +212,7 @@ def test_block_vhost_user_performance(
213212
fio_mode,
214213
fio_block_size,
215214
metrics,
215+
test_output_dir,
216216
):
217217
"""
218218
Execute block device emulation benchmarking scenarios.
@@ -242,9 +242,9 @@ def test_block_vhost_user_performance(
242242
next_cpu = vm.pin_threads(0)
243243
vm.disks_vhost_user["scratch"].pin(next_cpu)
244244

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

247-
emit_fio_metrics(logs_dir, metrics)
247+
emit_fio_metrics(test_output_dir, metrics)
248248

249249
for thread_name, values in cpu_util.items():
250250
for value in values:

0 commit comments

Comments
 (0)