aboutsummaryrefslogtreecommitdiffstats
path: root/resources/libraries
diff options
context:
space:
mode:
authorJay Wang <jay.wang2@arm.com>2024-12-18 16:07:31 +0000
committerJay Wang <jay.wang2@arm.com>2025-01-05 10:59:15 +0000
commit40c1735233e4346abb6802d990d3d99f313d8954 (patch)
tree3f56f22dfc61d229571dfdad3d479a68e113ca14 /resources/libraries
parent6a7b3bab2ca79b728f11d0e82cbcea621d45c8d0 (diff)
fix(telemetry): fix perfmon issues on Arm
To enable perfmon plugin on AArch64, users have to set kernel/perf_user_access to 1 to allow userspace applications to directly access PMU counters. Additionally, replace bundle cache-hierarchy with bundle cache-data as it is the correct bundle name on AArch64. Signed-off-by: Jay Wang <jay.wang2@arm.com> Change-Id: I67b86e255c8e62d3672a8f52db88eed3daf6ff59
Diffstat (limited to 'resources/libraries')
-rw-r--r--resources/libraries/python/TelemetryUtil.py9
-rw-r--r--resources/libraries/robot/performance/performance_actions.robot12
2 files changed, 16 insertions, 5 deletions
diff --git a/resources/libraries/python/TelemetryUtil.py b/resources/libraries/python/TelemetryUtil.py
index 63d0bf60a7..1dbb2d45a3 100644
--- a/resources/libraries/python/TelemetryUtil.py
+++ b/resources/libraries/python/TelemetryUtil.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2022 Cisco and/or its affiliates.
+# Copyright (c) 2025 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -16,7 +16,8 @@
from resources.libraries.python.model.ExportResult import append_telemetry
from resources.libraries.python.Constants import Constants
from resources.libraries.python.ssh import exec_cmd_no_error
-from resources.libraries.python.topology import NodeType
+from resources.libraries.python.topology import Topology, NodeType
+from resources.libraries.python.SysctlUtil import SysctlUtil
__all__ = ["TelemetryUtil"]
@@ -51,6 +52,10 @@ class TelemetryUtil:
cd_cmd += f"sh -c \"cd {Constants.REMOTE_FW_DIR}/"
cd_cmd += f"{Constants.RESOURCES_TOOLS}"
+ # Allow userspace to directly access perf counters on aarch64
+ if Topology.get_node_arch(node) == u"aarch64":
+ SysctlUtil.set_sysctl_value(node, u"kernel/perf_user_access", 1)
+
if spath:
bin_cmd = f"python3 -m telemetry --config {config} --hook {spath}\""
else:
diff --git a/resources/libraries/robot/performance/performance_actions.robot b/resources/libraries/robot/performance/performance_actions.robot
index d588bc9f83..df520e0757 100644
--- a/resources/libraries/robot/performance/performance_actions.robot
+++ b/resources/libraries/robot/performance/performance_actions.robot
@@ -1,4 +1,4 @@
-# Copyright (c) 2023 Cisco and/or its affiliates.
+# Copyright (c) 2025 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -110,6 +110,9 @@
| | ${transaction_scale} = | Get Transaction Scale
| | ${transaction_type} = | Get Transaction Type
| | ${use_latency} = | Get Use Latency
+| | ${node_arch} = | Get Node Arch | ${nodes[u'DUT1']}
+| | ${profile} = | Set Variable If | "${node_arch}" == "aarch64"
+| | ... | vppctl_runtime_arm.yaml | vppctl_runtime.yaml
| | Send traffic on tg
| | ... | duration=${-1}
| | ... | rate=${runtime_rate}
@@ -126,7 +129,7 @@
| | ... | ramp_up_duration=${ramp_up_duration}
| | ... | ramp_up_rate=${ramp_up_rate}
| | Run Telemetry On All DUTs
-| | ... | ${nodes} | profile=vppctl_runtime.yaml
+| | ... | ${nodes} | profile=${profile}
| | ... | rate=${telemetry_rate} | export=${telemetry_export}
| | Stop traffic on tg
@@ -212,6 +215,9 @@
| | ... | See documentation of the called keyword for required test variables.
| |
| | ${runtime_duration} = | Get Runtime Duration
+| | ${node_arch} = | Get Node Arch | ${nodes['${iperf_server_node}']}
+| | ${profile} = | Set Variable If | "${node_arch}" == "aarch64"
+| | ... | vppctl_runtime_arm.yaml | vppctl_runtime.yaml
| | ${pids}= | iPerf Client Start Remote Exec
| | | ... | ${nodes['${iperf_client_node}']}
| | | ... | duration=${-1}
@@ -226,7 +232,7 @@
| | | ... | bind=${iperf_client_bind}
| | | ... | affinity=${iperf_client_affinity}
| | Run Telemetry On All DUTs
-| | ... | ${nodes} | profile=vppctl_runtime.yaml
+| | ... | ${nodes} | profile=${profile}
| | ... | rate=${telemetry_rate} | export=${telemetry_export}
| | iPerf Client Stop Remote Exec | ${nodes['${iperf_client_node}']} | ${pids}