Skip to content

Commit 463063a

Browse files
add support for prject_number and config-file arguments in output-parsers
1 parent df8c014 commit 463063a

File tree

3 files changed

+63
-13
lines changed

3 files changed

+63
-13
lines changed

perfmetrics/scripts/testing_on_gke/examples/dlio/parse_logs.py

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
# See the License for the specific language governing permissions and
1616
# limitations under the License.
1717

18+
import argparse
1819
import json, os, pprint, subprocess
1920
import sys
2021
import dlio_workload
@@ -64,6 +65,26 @@ def downloadDlioOutputs(dlioWorkloads):
6465

6566

6667
if __name__ == "__main__":
68+
parser = argparse.ArgumentParser(
69+
prog="DLIO Unet3d test output parser",
70+
description=(
71+
"This program takes in a json test-config file and parses it for"
72+
" output buckets. From each output bucket, it downloads all the dlio"
73+
" output logs from gs://<bucket>/logs/ localy to"
74+
f" {LOCAL_LOGS_LOCATION} and parses them for dlio test runs and their"
75+
" output metrics."
76+
),
77+
)
78+
parser.add_argument("--workload-config")
79+
parser.add_argument(
80+
"--project-number",
81+
help=(
82+
"project-number (e.g. 93817472919) is needed to fetch the cpu/memory"
83+
" utilization data from GCP."
84+
),
85+
)
86+
args = parser.parse_args()
87+
6788
try:
6889
os.makedirs(LOCAL_LOGS_LOCATION)
6990
except FileExistsError:
@@ -155,10 +176,16 @@ def downloadDlioOutputs(dlioWorkloads):
155176
r["end"] = standard_timestamp(per_epoch_stats_data[str(i + 1)]["end"])
156177
if r["scenario"] != "local-ssd" and mash_installed:
157178
r["lowest_memory"], r["highest_memory"] = get_memory(
158-
r["pod_name"], r["start"], r["end"]
179+
r["pod_name"],
180+
r["start"],
181+
r["end"],
182+
project_number=args.project_number,
159183
)
160184
r["lowest_cpu"], r["highest_cpu"] = get_cpu(
161-
r["pod_name"], r["start"], r["end"]
185+
r["pod_name"],
186+
r["start"],
187+
r["end"],
188+
project_number=args.project_number,
162189
)
163190
pass
164191

perfmetrics/scripts/testing_on_gke/examples/fio/parse_logs.py

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,6 @@
1818
import argparse
1919
from collections.abc import Sequence
2020
import json, os, pprint, subprocess
21-
import json
22-
import os
23-
import subprocess
24-
import subprocess
2521
import sys
2622
from absl import app
2723
import fio_workload
@@ -59,7 +55,8 @@ def downloadFioOutputs(fioWorkloads):
5955
os.makedirs(LOCAL_LOGS_LOCATION + "/" + fioWorkload.fileSize)
6056
except FileExistsError:
6157
pass
62-
print(f"Download FIO output from the folder {fioWorkload.bucket}...")
58+
59+
print(f"Downloading FIO outputs from {fioWorkload.bucket}...")
6360
result = subprocess.run(
6461
[
6562
"gsutil",
@@ -78,6 +75,26 @@ def downloadFioOutputs(fioWorkloads):
7875

7976

8077
if __name__ == "__main__":
78+
parser = argparse.ArgumentParser(
79+
prog="DLIO Unet3d test output parser",
80+
description=(
81+
"This program takes in a json test-config file and parses it for"
82+
" output buckets.From each output bucket, it downloads all the dlio"
83+
" output logs from gs://<bucket>/logs/ locally to"
84+
f" {LOCAL_LOGS_LOCATION} and parses them for dlio test runs and their"
85+
" output metrics."
86+
),
87+
)
88+
parser.add_argument("--workload-config")
89+
parser.add_argument(
90+
"--project-number",
91+
help=(
92+
"project-number (93817472919) is needed to fetch the cpu/memory"
93+
" utilization data from GCP."
94+
),
95+
)
96+
args = parser.parse_args()
97+
8198
try:
8299
os.makedirs(LOCAL_LOGS_LOCATION)
83100
except FileExistsError:
@@ -168,10 +185,16 @@ def downloadFioOutputs(fioWorkloads):
168185
r["end"] = unix_to_timestamp(per_epoch_output_data["timestamp_ms"])
169186
if r["scenario"] != "local-ssd" and mash_installed:
170187
r["lowest_memory"], r["highest_memory"] = get_memory(
171-
r["pod_name"], r["start"], r["end"]
188+
r["pod_name"],
189+
r["start"],
190+
r["end"],
191+
project_number=args.project_number,
172192
)
173193
r["lowest_cpu"], r["highest_cpu"] = get_cpu(
174-
r["pod_name"], r["start"], r["end"]
194+
r["pod_name"],
195+
r["start"],
196+
r["end"],
197+
project_number=args.project_number,
175198
)
176199
pass
177200
r["gcsfuse_mount_options"] = gcsfuse_mount_options

perfmetrics/scripts/testing_on_gke/examples/utils/utils.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,10 @@ def is_mash_installed() -> bool:
2525
except subprocess.CalledProcessError:
2626
return False
2727

28-
def get_memory(pod_name: str, start: str, end: str) -> Tuple[int, int]:
28+
def get_memory(pod_name: str, start: str, end: str, project_number: int) -> Tuple[int, int]:
2929
# for some reason, the mash filter does not always work, so we fetch all the metrics for all the pods and filter later.
3030
result = subprocess.run(["mash", "--namespace=cloud_prod", "--output=csv",
31-
f"Query(Fetch(Raw('cloud.kubernetes.K8sContainer', 'kubernetes.io/container/memory/used_bytes'), {{'project': '927584127901', 'metric:memory_type': 'non-evictable'}})| Window(Align('10m'))| GroupBy(['pod_name', 'container_name'], Max()), TimeInterval('{start}', '{end}'), '5s')"],
31+
f"Query(Fetch(Raw('cloud.kubernetes.K8sContainer', 'kubernetes.io/container/memory/used_bytes'), {{'project': '{project_number}', 'metric:memory_type': 'non-evictable'}})| Window(Align('10m'))| GroupBy(['pod_name', 'container_name'], Max()), TimeInterval('{start}', '{end}'), '5s')"],
3232
capture_output=True, text=True)
3333

3434
data_points_int = []
@@ -48,10 +48,10 @@ def get_memory(pod_name: str, start: str, end: str) -> Tuple[int, int]:
4848

4949
return int(min(data_points_int) / 1024 ** 2) , int(max(data_points_int) / 1024 ** 2)
5050

51-
def get_cpu(pod_name: str, start: str, end: str) -> Tuple[float, float]:
51+
def get_cpu(pod_name: str, start: str, end: str, project_number: int) -> Tuple[float, float]:
5252
# for some reason, the mash filter does not always work, so we fetch all the metrics for all the pods and filter later.
5353
result = subprocess.run(["mash", "--namespace=cloud_prod", "--output=csv",
54-
f"Query(Fetch(Raw('cloud.kubernetes.K8sContainer', 'kubernetes.io/container/cpu/core_usage_time'), {{'project': '927584127901'}})| Window(Rate('10m'))| GroupBy(['pod_name', 'container_name'], Max()), TimeInterval('{start}', '{end}'), '5s')"],
54+
f"Query(Fetch(Raw('cloud.kubernetes.K8sContainer', 'kubernetes.io/container/cpu/core_usage_time'), {{'project': '{project_number}'}})| Window(Rate('10m'))| GroupBy(['pod_name', 'container_name'], Max()), TimeInterval('{start}', '{end}'), '5s')"],
5555
capture_output=True, text=True)
5656

5757
data_points_float = []

0 commit comments

Comments
 (0)