From 4428805500a3ae26df57d8e48a3a648c4b980323 Mon Sep 17 00:00:00 2001 From: fanxiaotong Date: Fri, 11 Aug 2023 17:14:59 +0800 Subject: [PATCH 1/3] fix --- ...opyl.sh => cluster_profiling_data_copy.sh} | 0 .../distribute_modify_hostname.bash | 49 --- .../merge_profiling_timeline/trace_processor | 309 ------------------ 3 files changed, 358 deletions(-) rename profiler/distribute_tools/{cluster_profiling_data_copyl.sh => cluster_profiling_data_copy.sh} (100%) delete mode 100644 profiler/distribute_tools/distribute_modify_hostname.bash delete mode 100644 profiler/merge_profiling_timeline/trace_processor diff --git a/profiler/distribute_tools/cluster_profiling_data_copyl.sh b/profiler/distribute_tools/cluster_profiling_data_copy.sh similarity index 100% rename from profiler/distribute_tools/cluster_profiling_data_copyl.sh rename to profiler/distribute_tools/cluster_profiling_data_copy.sh diff --git a/profiler/distribute_tools/distribute_modify_hostname.bash b/profiler/distribute_tools/distribute_modify_hostname.bash deleted file mode 100644 index c835ea51dc..0000000000 --- a/profiler/distribute_tools/distribute_modify_hostname.bash +++ /dev/null @@ -1,49 +0,0 @@ -#!/bin/bash - -SSH="ssh -o StrictHostKeyChecking=no" - -# Modify hostname -change_hostname() -{ - local node="$1" - local user="$2" - local passwd="$3" - sshpass -p "${passwd}" ${SSH} ${user}@${node} hostname "${user}-${node}" -} - -# Get node list in the cluster. -get_cluster_list() -{ - local cluster_config=$1 - cat ${cluster_config} | python3 -c 'import sys,json;[print(node) for node in json.load(sys.stdin)["cluster"].keys()]' -} - -# Get the user from node -get_node_user() -{ - local cluster_config=$1 - local node=$2 - cat ${cluster_config} | python3 -c 'import sys,json;print(json.load(sys.stdin)["cluster"]['\"${node}\"']["user"])' -} - -# Get the password from node -get_node_passwd() -{ - local cluster_config=$1 - local node=$2 - cat ${cluster_config} | python3 -c 'import sys,json;print(json.load(sys.stdin)["cluster"]['\"${node}\"']["passwd"])' -} - -cluster_account_config_path=$1 - -node_list=$(get_cluster_list ${cluster_account_config_path}) -echo "-------begin--------" - -for node in ${node_list} -do - user=$(get_node_user ${cluster_account_config_path} ${node}) - passwd=$(get_node_passwd ${cluster_account_config_path} ${node}) - echo "--------------${user}@${node}----------------" - $(change_hostname ${node} ${user} ${passwd}) - echo "---" -done \ No newline at end of file diff --git a/profiler/merge_profiling_timeline/trace_processor b/profiler/merge_profiling_timeline/trace_processor deleted file mode 100644 index 201d8a8d8f..0000000000 --- a/profiler/merge_profiling_timeline/trace_processor +++ /dev/null @@ -1,309 +0,0 @@ -#!/usr/bin/env python3 -# Copyright (C) 2021 The Android Open Source Project -# -# 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 -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -# DO NOT EDIT. Auto-generated by tools/gen_amalgamated_python_tools -# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -# This file should do the same thing when being invoked in any of these ways: -# ./trace_processor -# python trace_processor -# bash trace_processor -# cat ./trace_processor | bash -# cat ./trace_processor | python - - -BASH_FALLBACK=""" " -exec python3 - "$@" <<'#'EOF -#""" # yapf: disable - - -# ----- Amalgamator: begin of python/perfetto/prebuilts/manifests/trace_processor_shell.py -# This file has been generated by: /Users/hjd/src/perfetto/tools/roll-prebuilts v34.0 -TRACE_PROCESSOR_SHELL_MANIFEST = [{ - 'arch': - 'mac-amd64', - 'file_name': - 'trace_processor_shell', - 'file_size': - 8714576, - 'url': - #'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v34.0/mac-amd64/trace_processor_shell', - "http://aisbench.obs.cn-north-4.myhuaweicloud.com/packet/perfetto/v34.0/mac-amd64/trace_processor_shell.exe", - 'sha256': - '9bdb89493f0f00db5d3a73166450ac2f6ee830de16415e79c5a0234990caa644', - 'platform': - 'darwin', - 'machine': ['x86_64'] -}, { - 'arch': - 'mac-arm64', - 'file_name': - 'trace_processor_shell', - 'file_size': - 7286968, - 'url': - #'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v34.0/mac-arm64/trace_processor_shell', - "http://aisbench.obs.cn-north-4.myhuaweicloud.com/packet/perfetto/v34.0/mac-arm64/trace_processor_shell.exe", - 'sha256': - '948536035fbe680b47b94a99d320ff459450738e4aeeb16cef18364f0023622b', - 'platform': - 'darwin', - 'machine': ['arm64'] -}, { - 'arch': - 'linux-amd64', - 'file_name': - 'trace_processor_shell', - 'file_size': - 8576688, - 'url': - #'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v34.0/linux-amd64/trace_processor_shell', - "http://aisbench.obs.cn-north-4.myhuaweicloud.com/packet/perfetto/v34.0/linux-amd64/trace_processor_shell.exe", - 'sha256': - '493698c81fffcabc340c72831b175962dba5a31dfe8572a6d5af083a116af4f8', - 'platform': - 'linux', - 'machine': ['x86_64'] -}, { - 'arch': - 'linux-arm', - 'file_name': - 'trace_processor_shell', - 'file_size': - 6125384, - 'url': - #'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v34.0/linux-arm/trace_processor_shell', - "http://aisbench.obs.cn-north-4.myhuaweicloud.com/packet/perfetto/v34.0/linux-arm/trace_processor_shell.exe", - - 'sha256': - '53f1e27603695cf92d22519993b6eafa9c60957d9cb33bd0b300df8573b87ebb', - 'platform': - 'linux', - 'machine': ['armv6l', 'armv7l', 'armv8l'] -}, { - 'arch': - 'linux-arm64', - 'file_name': - 'trace_processor_shell', - 'file_size': - 8036288, - 'url': - #'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v34.0/linux-arm64/trace_processor_shell', - "http://aisbench.obs.cn-north-4.myhuaweicloud.com/packet/perfetto/v34.0/linux-arm64/trace_processor_shell.exe", - - 'sha256': - '2a2cda222c9d5e18b638057688babb00a3a975ccd4b7dd65f26211c2cb7767f9', - 'platform': - 'linux', - 'machine': ['aarch64'] -}, { - 'arch': - 'android-arm', - 'file_name': - 'trace_processor_shell', - 'file_size': - 5813384, - 'url': - #'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v34.0/android-arm/trace_processor_shell', - "http://aisbench.obs.cn-north-4.myhuaweicloud.com/packet/perfetto/v34.0/android-arm/trace_processor_shell.exe", - - 'sha256': - 'f3ec4c194d0b06af5b296c1c479e6b29090e6b7cc7e58fbd55ca2919a126f0ee' -}, { - 'arch': - 'android-arm64', - 'file_name': - 'trace_processor_shell', - 'file_size': - 7294768, - 'url': - #'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v34.0/android-arm64/trace_processor_shell', - "http://aisbench.obs.cn-north-4.myhuaweicloud.com/packet/perfetto/v34.0/android-arm64/trace_processor_shell.exe", - 'sha256': - 'f44f47d4b873ec68b6fa4f4c69a3e5a13d58b4d9cb2ec591fa687d4480c1950b' -}, { - 'arch': - 'android-x86', - 'file_name': - 'trace_processor_shell', - 'file_size': - 8090716, - 'url': - #'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v34.0/android-x86/trace_processor_shell', - "http://aisbench.obs.cn-north-4.myhuaweicloud.com/packet/perfetto/v34.0/android-x86/trace_processor_shell.exe", - 'sha256': - '5636d8251747376787640bc3a4894ecf3091e4bf3d38b007003e1992fc5792df' -}, { - 'arch': - 'android-x64', - 'file_name': - 'trace_processor_shell', - 'file_size': - 8359784, - 'url': - #'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v34.0/android-x64/trace_processor_shell', - "http://aisbench.obs.cn-north-4.myhuaweicloud.com/packet/perfetto/v34.0/android-x64/trace_processor_shell.exe", - 'sha256': - '50440fa055ab998f6cf24f9a9a7388520cc854708735521505e10291bc52f3d0' -}, { - 'arch': - 'windows-amd64', - 'file_name': - 'trace_processor_shell.exe', - 'file_size': - 8130560, - 'url': - #'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v34.0/windows-amd64/trace_processor_shell.exe', - "http://aisbench.obs.cn-north-4.myhuaweicloud.com/packet/perfetto/v34.0/windows-amd64/trace_processor_shell.exe", - 'sha256': - '5cbcf98e29a2d989523235e11e4e0dade692a295ebf47a6c93a09a050ce9bc91', - 'platform': - 'win32', - 'machine': ['amd64'] -}] - -# ----- Amalgamator: end of python/perfetto/prebuilts/manifests/trace_processor_shell.py - -# ----- Amalgamator: begin of python/perfetto/prebuilts/perfetto_prebuilts.py -# Copyright (C) 2021 The Android Open Source Project -# -# 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 -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -""" -Functions to fetch pre-pinned Perfetto prebuilts. - -This function is used in different places: -- Into the //tools/{trace_processor, traceconv} scripts, which are just plain - wrappers around executables. -- Into the //tools/{heap_profiler, record_android_trace} scripts, which contain - some other hand-written python code. - -The manifest argument looks as follows: -TRACECONV_MANIFEST = [ - { - 'arch': 'mac-amd64', - 'file_name': 'traceconv', - 'file_size': 7087080, - 'url': https://commondatastorage.googleapis.com/.../trace_to_text', - 'sha256': 7d957c005b0dc130f5bd855d6cec27e060d38841b320d04840afc569f9087490', - 'platform': 'darwin', - 'machine': 'x86_64' - }, - ... -] - -The intended usage is: - - from perfetto.prebuilts.manifests.traceconv import TRACECONV_MANIFEST - bin_path = get_perfetto_prebuilt(TRACECONV_MANIFEST) - subprocess.call(bin_path, ...) -""" - -import hashlib -import os -import platform -import subprocess -import sys - - -def download_or_get_cached(file_name, url, sha256): - """ Downloads a prebuilt or returns a cached version - - The first time this is invoked, it downloads the |url| and caches it into - ~/.local/share/perfetto/prebuilts/$tool_name. On subsequent invocations it - just runs the cached version. - """ - dir = os.path.join( - os.path.expanduser('~'), '.local', 'share', 'perfetto', 'prebuilts') - os.makedirs(dir, exist_ok=True) - bin_path = os.path.join(dir, file_name) - sha256_path = os.path.join(dir, file_name + '.sha256') - needs_download = True - - # Avoid recomputing the SHA-256 on each invocation. The SHA-256 of the last - # download is cached into file_name.sha256, just check if that matches. - if os.path.exists(bin_path) and os.path.exists(sha256_path): - with open(sha256_path, 'rb') as f: - digest = f.read().decode() - if digest == sha256: - needs_download = False - - if needs_download: - # Either the filed doesn't exist or the SHA256 doesn't match. - tmp_path = bin_path + '.tmp' - print('Downloading ' + url) - subprocess.check_call(['curl', '-f', '-L', '-#', '-o', tmp_path, url]) - with open(tmp_path, 'rb') as fd: - actual_sha256 = hashlib.sha256(fd.read()).hexdigest() - if actual_sha256 != sha256: - raise Exception('Checksum mismatch for %s (actual: %s, expected: %s)' % - (url, actual_sha256, sha256)) - os.chmod(tmp_path, 0o755) - os.replace(tmp_path, bin_path) - with open(sha256_path, 'w') as f: - f.write(sha256) - return bin_path - - -def get_perfetto_prebuilt(manifest, soft_fail=False, arch=None): - """ Downloads the prebuilt, if necessary, and returns its path on disk. """ - plat = sys.platform.lower() - machine = platform.machine().lower() - manifest_entry = None - for entry in manifest: - # If the caller overrides the arch, just match that (for Android prebuilts). - if arch: - if entry.get('arch') == arch: - manifest_entry = entry - break - continue - # Otherwise guess the local machine arch. - if entry.get('platform') == plat and machine in entry.get('machine', []): - manifest_entry = entry - break - if manifest_entry is None: - if soft_fail: - return None - raise Exception( - ('No prebuilts available for %s-%s\n' % (plat, machine)) + - 'See https://perfetto.dev/docs/contributing/build-instructions') - - return download_or_get_cached( - file_name=manifest_entry['file_name'], - url=manifest_entry['url'], - sha256=manifest_entry['sha256']) - - -def run_perfetto_prebuilt(manifest): - bin_path = get_perfetto_prebuilt(manifest) - if sys.platform.lower() == 'win32': - sys.exit(subprocess.check_call([bin_path, *sys.argv[1:]])) - os.execv(bin_path, [bin_path] + sys.argv[1:]) - -# ----- Amalgamator: end of python/perfetto/prebuilts/perfetto_prebuilts.py - -if __name__ == '__main__': - run_perfetto_prebuilt(TRACE_PROCESSOR_SHELL_MANIFEST) - -#EOF -- Gitee From 2ac0c30c8b0ffd85096619ee350bca9724b1ef1a Mon Sep 17 00:00:00 2001 From: fanxiaotong Date: Fri, 11 Aug 2023 17:22:36 +0800 Subject: [PATCH 2/3] fix bug --- .../cluster_profiling_data_copy.sh | 76 ++++--------------- 1 file changed, 15 insertions(+), 61 deletions(-) diff --git a/profiler/distribute_tools/cluster_profiling_data_copy.sh b/profiler/distribute_tools/cluster_profiling_data_copy.sh index d3d301aea9..06b89bb60c 100644 --- a/profiler/distribute_tools/cluster_profiling_data_copy.sh +++ b/profiler/distribute_tools/cluster_profiling_data_copy.sh @@ -1,76 +1,30 @@ #!/bin/bash -# Copyright 2023 Huawei Technologies Co., Ltd -# -# 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 -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -SSH="ssh -o StrictHostKeyChecking=no" -SCP="scp -o StrictHostKeyChecking=no" +# 汇聚节点的信息 ip地址、用户名、密码、profiling存储路径 -# Get the node list in the cluster. -get_cluster_list() +get_copy_node() { - local cluster_config=$1 - cat ${cluster_config} | python3 -c 'import sys,json;[print(node) for node in json.load(sys.stdin)["cluster"].keys()]' + cat ${config_path} | python3 -c 'import sys,json;[print(node) for node in json.load(sys.stdin)["cluster"].keys()]' } -# Get the account number of node. -get_node_user() +get_value_by_key() { - local cluster_config=$1 - local node=$2 - cat ${cluster_config} | python3 -c 'import sys,json;print(json.load(sys.stdin)["cluster"]['\"${node}\"']["user"])' + local node=$1 + local key=$2 + cat ${config_path} | python3 -c 'import sys,json;print(json.load(sys.stdin)["cluster"]['\"${node}\"']['\"${key}\"'])' } -# Get the password of node. -get_node_passwd() -{ - local cluster_config=$1 - local node=$2 - cat ${cluster_config} | python3 -c 'import sys,json;print(json.load(sys.stdin)["cluster"]['\"${node}\"']["passwd"])' -} - -# Get the dir of node. -get_node_dir() -{ - local cluster_config=$1 - local node=$2 - cat ${cluster_config} | python3 -c 'import sys,json;print(json.load(sys.stdin)["cluster"]['\"${node}\"']["dir"])' -} - -# Copy data from remote node to local node. -rscp_pass() -{ - local node="$1" - local user="$2" - local passwd="$3" - local src="$4" - local target="$5" - sshpass -p "${passwd}" ${SCP} -r "${user}"@"${node}":"${src}" "${target}" -} - -# 指定拷贝使用的json文件 -cluster_account_config_path=$1 -# 指定拷贝的路径 +config_path=$1 target_dir=$2 -node_list=$(get_cluster_list ${cluster_account_config_path}) -echo "-----begin----" +node_list=$(get_copy_node ${config_path}) +echo "-----begin-copy---" for node in ${node_list} do - user=$(get_node_user ${cluster_account_config_path} ${node}) - passwd=$(get_node_passwd ${cluster_account_config_path} ${node}) - src_dir=$(get_node_dir ${cluster_account_config_path} ${node}) - echo "------------------${user}@${node}---------------------" - $(rscp_pass ${node} ${user} ${passwd} "${src_dir}" ${target_dir}) + user=$(get_value_by_key ${node} "user") + passwd=$(get_value_by_key ${node} "passwd") + src_dir=$(get_value_by_key ${node} "dir") + echo "------------------user:${user}----node:${node}---------------------" + sshpass -p "${passwd}" scp -o StrictHostKeyChecking=no -r "${user}"@"${node}":"${src_dir}" "${target_dir}" done -- Gitee From 9727b4a2b4c9802349db3c850dc91793112fd2c6 Mon Sep 17 00:00:00 2001 From: fanxiaotong Date: Fri, 11 Aug 2023 17:24:56 +0800 Subject: [PATCH 3/3] fix bug --- .../cluster_profiling_data_copy.sh | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/profiler/distribute_tools/cluster_profiling_data_copy.sh b/profiler/distribute_tools/cluster_profiling_data_copy.sh index 06b89bb60c..38892b2baa 100644 --- a/profiler/distribute_tools/cluster_profiling_data_copy.sh +++ b/profiler/distribute_tools/cluster_profiling_data_copy.sh @@ -1,5 +1,21 @@ #!/bin/bash +# Copyright (c) 2023, Huawei Technologies Co., Ltd. +# All rights reserved. +# +# 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 +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + # 汇聚节点的信息 ip地址、用户名、密码、profiling存储路径 get_copy_node() -- Gitee