* [PATCH v2 1/3] scripts/performance: Add topN_perf.py script
2020-06-19 15:36 [PATCH v2 0/3] Add Scripts for Finding Top 25 Executed Functions Ahmed Karaman
@ 2020-06-19 15:36 ` Ahmed Karaman
2020-06-20 9:59 ` Aleksandar Markovic
2020-06-20 10:01 ` Aleksandar Markovic
2020-06-19 15:36 ` [PATCH v2 2/3] scripts/performance: Add topN_callgrind.py script Ahmed Karaman
` (3 subsequent siblings)
4 siblings, 2 replies; 9+ messages in thread
From: Ahmed Karaman @ 2020-06-19 15:36 UTC (permalink / raw)
To: qemu-devel, aleksandar.qemu.devel, alex.bennee, eblake, rth,
ldoktor, ehabkost, crosa
Cc: Ahmed Karaman
Python script that prints the top N most executed functions in QEMU
using perf.
Example Usage:
topN_perf.py -n 20 -- /path/to/qemu program -program -flags
If '-n' is not specified, the default is 25.
Example Output:
No. Percentage Name Caller
---- ---------- ------------------------- -------------------------
1 16.25% float64_mul qemu-x86_64
2 12.01% float64_sub qemu-x86_64
3 11.99% float64_add qemu-x86_64
4 5.69% helper_mulsd qemu-x86_64
5 4.68% helper_addsd qemu-x86_64
6 4.43% helper_lookup_tb_ptr qemu-x86_64
7 4.28% helper_subsd qemu-x86_64
8 2.71% f64_compare qemu-x86_64
9 2.71% helper_ucomisd qemu-x86_64
10 1.04% helper_pand_xmm qemu-x86_64
11 0.71% float64_div qemu-x86_64
12 0.63% helper_pxor_xmm qemu-x86_64
13 0.50% 0x00007f7b7004ef95 [JIT] tid 491
14 0.50% 0x00007f7b70044e83 [JIT] tid 491
15 0.36% helper_por_xmm qemu-x86_64
16 0.32% helper_cc_compute_all qemu-x86_64
17 0.30% 0x00007f7b700433f0 [JIT] tid 491
18 0.30% float64_compare_quiet qemu-x86_64
19 0.27% soft_f64_addsub qemu-x86_64
20 0.26% round_to_int qemu-x86_64
Signed-off-by: Ahmed Karaman <ahmedkhaledkaraman@gmail.com>
---
scripts/performance/topN_perf.py | 115 +++++++++++++++++++++++++++++++
1 file changed, 115 insertions(+)
create mode 100755 scripts/performance/topN_perf.py
diff --git a/scripts/performance/topN_perf.py b/scripts/performance/topN_perf.py
new file mode 100755
index 0000000000..53fa503d8a
--- /dev/null
+++ b/scripts/performance/topN_perf.py
@@ -0,0 +1,115 @@
+#!/usr/bin/env python3
+
+# Print the top N most executed functions in QEMU using perf.
+# Example Usage:
+# topN_perf.py -n 20 -- /path/to/qemu program -program -flags
+#
+# If '-n' is not specified, the default is 25.
+#
+# This file is a part of the project "TCG Continuous Benchmarking".
+#
+# Copyright (C) 2020 Ahmed Karaman <ahmedkhaledkaraman@gmail.com>
+# Copyright (C) 2020 Aleksandar Markovic <aleksandar.qemu.devel@gmail.com>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+import argparse
+import os
+import subprocess
+import sys
+
+
+# Parse the command line arguments
+parser = argparse.ArgumentParser(usage='topN_perf.py [-h] [-n TOP_FUNCTIONS] --'
+ ' /path/to/qemu program -[flags PROGRAM_FLAGS]')
+
+parser.add_argument('-n', dest='top', type=int, default=25,
+ help='Specify the number of top functions to print.')
+
+parser.add_argument('command', type=str, nargs='+', help=argparse.SUPPRESS)
+
+args = parser.parse_args()
+
+# Extract the needed variables from the args
+command = args.command
+top = args.top
+
+# Insure that perf is installed
+check_perf = subprocess.run(["which", "perf"], stdout=subprocess.DEVNULL)
+if check_perf.returncode:
+ sys.exit("Please install perf before running the script!")
+
+# Insure user has previllage to run perf
+check_previlage = subprocess.run(["perf", "stat", "ls", "/"],
+ stdout=subprocess.DEVNULL, stderr=subprocess.PIPE)
+if check_previlage.returncode:
+ sys.exit(check_previlage.stderr.decode("utf-8") +
+ "\nOr alternatively, you can run the script with sudo privileges!")
+
+# Run perf record
+perf_record = subprocess.run((["perf", "record"] + command),
+ stdout=subprocess.DEVNULL, stderr=subprocess.PIPE)
+if perf_record.returncode:
+ os.unlink('perf.data')
+ sys.exit(perf_record.stderr.decode("utf-8"))
+
+# Save perf report output to tmp.perf.data
+with open("tmp.perf.data", "w") as output:
+ perf_report = subprocess.run(
+ ["perf", "report", "--stdio"], stdout=output, stderr=subprocess.PIPE)
+ if perf_report.returncode:
+ os.unlink('perf.data')
+ output.close()
+ os.unlink('tmp.perf.data')
+ sys.exit(perf_report.stderr.decode("utf-8"))
+
+# Read the reported data to functions[]
+functions = []
+with open("tmp.perf.data", "r") as data:
+ # Only read lines that are not comments (comments start with #)
+ # Only read lines that are not empty
+ functions = [line for line in data.readlines() if line and line[0]
+ != '#' and line[0] != "\n"]
+
+# Limit the number of top functions to "top"
+number_of_top_functions = top if len(functions) > top else len(functions)
+
+# Store the data of the top functions in top_functions[]
+top_functions = functions[:number_of_top_functions]
+
+# Print information headers
+print('{:>4} {:>10} {:<30} {}\n{} {} {} {}'.format('No.',
+ 'Percentage',
+ 'Name',
+ 'Caller',
+ '-' * 4,
+ '-' * 10,
+ '-' * 30,
+ '-' * 25))
+
+
+# Print top N functions
+for (index, function) in enumerate(top_functions, start=1):
+ function_data = function.split()
+ function_percentage = function_data[0]
+ function_name = function_data[-1]
+ function_caller = ' '.join(function_data[2:-2])
+ print('{:>4} {:>10} {:<30} {}'.format(index,
+ function_percentage,
+ function_name,
+ function_caller))
+
+# Remove intermediate files
+os.unlink('perf.data')
+os.unlink('tmp.perf.data')
--
2.17.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH v2 1/3] scripts/performance: Add topN_perf.py script
2020-06-19 15:36 ` [PATCH v2 1/3] scripts/performance: Add topN_perf.py script Ahmed Karaman
@ 2020-06-20 9:59 ` Aleksandar Markovic
2020-06-20 10:01 ` Aleksandar Markovic
1 sibling, 0 replies; 9+ messages in thread
From: Aleksandar Markovic @ 2020-06-20 9:59 UTC (permalink / raw)
To: Ahmed Karaman
Cc: ldoktor@redhat.com, ehabkost@redhat.com, alex.bennee@linaro.org,
qemu-devel@nongnu.org, crosa@redhat.com, rth@twiddle.net
[-- Attachment #1: Type: text/plain, Size: 8806 bytes --]
петак, 19. јун 2020., Ahmed Karaman <ahmedkhaledkaraman@gmail.com> је
написао/ла:
> Python script that prints the top N most executed functions in QEMU
> using perf.
>
> Example Usage:
Don't use capitalization when not appropriate. This is better:
Example of usage:
> topN_perf.py -n 20 -- /path/to/qemu program -program -flags
>
> If '-n' is not specified, the default is 25.
>
>
The command line above is hardly example of usage. Furthermore, it is
unclear of what you meant with "program -program". Other things are unclear
too (what about qemu options?) The command line, as is now, is somewhere
between a syntax description and an example of usage, but is neither a
syntax description nor example of usage.
From the script, it looks that there is "-h" too. Not mentioned in commit
message ar all, and it shouldbe.
I would suggest that you rework this section inthis way, for the sake of
clarity:
Syntax: (
topN_perf.py [-h] [-n <number of displayed top functions > -- <qemu
executable> [<qemu executable options>] <target executable> [<target
execurable options>]
-h - .........explain here
-n - .........explain here
Example of usage:
topN_perf.py -n 20 -- qemu-arm coulomb_double-arm
Example of output:
..... and here you continue with:
No. Percentage Name Caller
> ---- ---------- ------------------------- -------------------------
> 1 16.25% float64_mul qemu-x86_64
> 2 12.01% float64_sub qemu-x86_64
> 3 11.99% float64_add qemu-x86_64
> 4 5.69% helper_mulsd qemu-x86_64
> 5 4.68% helper_addsd qemu-x86_64
> 6 4.43% helper_lookup_tb_ptr qemu-x86_64
> 7 4.28% helper_subsd qemu-x86_64
> 8 2.71% f64_compare qemu-x86_64
> 9 2.71% helper_ucomisd qemu-x86_64
> 10 1.04% helper_pand_xmm qemu-x86_64
> 11 0.71% float64_div qemu-x86_64
> 12 0.63% helper_pxor_xmm qemu-x86_64
> 13 0.50% 0x00007f7b7004ef95 [JIT] tid 491
> 14 0.50% 0x00007f7b70044e83 [JIT] tid 491
> 15 0.36% helper_por_xmm qemu-x86_64
> 16 0.32% helper_cc_compute_all qemu-x86_64
> 17 0.30% 0x00007f7b700433f0 [JIT] tid 491
> 18 0.30% float64_compare_quiet qemu-x86_64
> 19 0.27% soft_f64_addsub qemu-x86_64
> 20 0.26% round_to_int qemu-x86_64
>
> Signed-off-by: Ahmed Karaman <ahmedkhaledkaraman@gmail.com>
> ---
> scripts/performance/topN_perf.py | 115 +++++++++++++++++++++++++++++++
> 1 file changed, 115 insertions(+)
> create mode 100755 scripts/performance/topN_perf.py
>
> diff --git a/scripts/performance/topN_perf.py b/scripts/performance/topN_
> perf.py
> new file mode 100755
> index 0000000000..53fa503d8a
> --- /dev/null
> +++ b/scripts/performance/topN_perf.py
> @@ -0,0 +1,115 @@
> +#!/usr/bin/env python3
> +
> +# Print the top N most executed functions in QEMU using perf.
> +# Example Usage:
> +# topN_perf.py -n 20 -- /path/to/qemu program -program -flags
> +#
The similat comments from commit message section apply here too.
> +# If '-n' is not specified, the default is 25.
> +#
> +# This file is a part of the project "TCG Continuous Benchmarking".
> +#
> +# Copyright (C) 2020 Ahmed Karaman <ahmedkhaledkaraman@gmail.com>
> +# Copyright (C) 2020 Aleksandar Markovic <aleksandar.qemu.devel@gmail.
> com>
> +#
> +# This program is free software: you can redistribute it and/or modify
> +# it under the terms of the GNU General Public License as published by
> +# the Free Software Foundation, either version 2 of the License, or
> +# (at your option) any later version.
> +#
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License
> +# along with this program. If not, see <https://www.gnu.org/licenses/>.
> +
> +import argparse
> +import os
> +import subprocess
> +import sys
> +
> +
> +# Parse the command line arguments
> +parser = argparse.ArgumentParser(usage='topN_perf.py [-h] [-n
> TOP_FUNCTIONS] --'
> + ' /path/to/qemu program -[flags
> PROGRAM_FLAGS]')
> +
Same.
+parser.add_argument('-n', dest='top', type=int, default=25,
> + help='Specify the number of top functions to print.')
> +
> +parser.add_argument('command', type=str, nargs='+',
> help=argparse.SUPPRESS)
> +
> +args = parser.parse_args()
> +
> +# Extract the needed variables from the args
> +command = args.command
> +top = args.top
> +
> +# Insure that perf is installed
> +check_perf = subprocess.run(["which", "perf"], stdout=subprocess.DEVNULL)
> +if check_perf.returncode:
> + sys.exit("Please install perf before running the script!")
> +
OK. This is good.
> +# Insure user has previllage to run perf
> +check_previlage = subprocess.run(["perf", "stat", "ls", "/"],
> + stdout=subprocess.DEVNULL,
> stderr=subprocess.PIPE)
> +if check_previlage.returncode:
> + sys.exit(check_previlage.stderr.decode("utf-8") +
> + "\nOr alternatively, you can run the script with sudo
> privileges!")
I would avoid mixing stderr message and your message practically in one
sentence. Better:
error: <text from stderr>
You must run the script with sudo pivilages, or, alternatively, set kernel
Xxx option to....
> +
> +# Run perf record
> +perf_record = subprocess.run((["perf", "record"] + command),
> + stdout=subprocess.DEVNULL,
> stderr=subprocess.PIPE)
> +if perf_record.returncode:
> + os.unlink('perf.data')
> + sys.exit(perf_record.stderr.decode("utf-8"))
> +
> +# Save perf report output to tmp.perf.data
> +with open("tmp.perf.data", "w") as output:
> + perf_report = subprocess.run(
> + ["perf", "report", "--stdio"], stdout=output,
> stderr=subprocess.PIPE)
> + if perf_report.returncode:
> + os.unlink('perf.data')
> + output.close()
> + os.unlink('tmp.perf.data')
> + sys.exit(perf_report.stderr.decode("utf-8"))
> +
I am really confused by using both perf.data and tmp.perf.data names. Why?
They are in entirely different format. "tmp.perf.data should be
perf.top-function.list, let's say, if I am not mistaken about its meaning
and usage.
+# Read the reported data to functions[]
> +functions = []
> +with open("tmp.perf.data", "r") as data:
> + # Only read lines that are not comments (comments start with #)
> + # Only read lines that are not empty
> + functions = [line for line in data.readlines() if line and line[0]
> + != '#' and line[0] != "\n"]
> +
> +# Limit the number of top functions to "top"
> +number_of_top_functions = top if len(functions) > top else len(functions)
> +
> +# Store the data of the top functions in top_functions[]
> +top_functions = functions[:number_of_top_functions]
> +
> +# Print information headers
# Print table header
> +print('{:>4} {:>10} {:<30} {}\n{} {} {} {}'.format('No.',
> + 'Percentage',
> + 'Name',
> + 'Caller',
> + '-' * 4,
> + '-' * 10,
> + '-' * 30,
> + '-' * 25))
> +
> +
> +# Print top N functions
> +for (index, function) in enumerate(top_functions, start=1):
> + function_data = function.split()
> + function_percentage = function_data[0]
> + function_name = function_data[-1]
> + function_caller = ' '.join(function_data[2:-2])
> + print('{:>4} {:>10} {:<30} {}'.format(index,
> + function_percentage,
> + function_name,
> + function_caller))
> +
> +# Remove intermediate files
> +os.unlink('perf.data')
> +os.unlink('tmp.perf.data')
> --
Thanks,
Aleksandar.
> 2.17.1
>
>
[-- Attachment #2: Type: text/html, Size: 12410 bytes --]
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v2 1/3] scripts/performance: Add topN_perf.py script
2020-06-19 15:36 ` [PATCH v2 1/3] scripts/performance: Add topN_perf.py script Ahmed Karaman
2020-06-20 9:59 ` Aleksandar Markovic
@ 2020-06-20 10:01 ` Aleksandar Markovic
1 sibling, 0 replies; 9+ messages in thread
From: Aleksandar Markovic @ 2020-06-20 10:01 UTC (permalink / raw)
To: Ahmed Karaman
Cc: ldoktor@redhat.com, ehabkost@redhat.com, alex.bennee@linaro.org,
qemu-devel@nongnu.org, crosa@redhat.com, rth@twiddle.net
[-- Attachment #1: Type: text/plain, Size: 7271 bytes --]
петак, 19. јун 2020., Ahmed Karaman <ahmedkhaledkaraman@gmail.com> је
написао/ла:
> Python script that prints the top N most executed functions in QEMU
> using perf.
>
> Example Usage:
> topN_perf.py -n 20 -- /path/to/qemu program -program -flags
>
> If '-n' is not specified, the default is 25.
>
>
Comments similar to the one for the previous patch apply here too.
> Example Output:
> No. Percentage Name Caller
> ---- ---------- ------------------------- -------------------------
> 1 16.25% float64_mul qemu-x86_64
> 2 12.01% float64_sub qemu-x86_64
> 3 11.99% float64_add qemu-x86_64
> 4 5.69% helper_mulsd qemu-x86_64
> 5 4.68% helper_addsd qemu-x86_64
> 6 4.43% helper_lookup_tb_ptr qemu-x86_64
> 7 4.28% helper_subsd qemu-x86_64
> 8 2.71% f64_compare qemu-x86_64
> 9 2.71% helper_ucomisd qemu-x86_64
> 10 1.04% helper_pand_xmm qemu-x86_64
> 11 0.71% float64_div qemu-x86_64
> 12 0.63% helper_pxor_xmm qemu-x86_64
> 13 0.50% 0x00007f7b7004ef95 [JIT] tid 491
> 14 0.50% 0x00007f7b70044e83 [JIT] tid 491
> 15 0.36% helper_por_xmm qemu-x86_64
> 16 0.32% helper_cc_compute_all qemu-x86_64
> 17 0.30% 0x00007f7b700433f0 [JIT] tid 491
> 18 0.30% float64_compare_quiet qemu-x86_64
> 19 0.27% soft_f64_addsub qemu-x86_64
> 20 0.26% round_to_int qemu-x86_64
>
> Signed-off-by: Ahmed Karaman <ahmedkhaledkaraman@gmail.com>
> ---
> scripts/performance/topN_perf.py | 115 +++++++++++++++++++++++++++++++
> 1 file changed, 115 insertions(+)
> create mode 100755 scripts/performance/topN_perf.py
>
> diff --git a/scripts/performance/topN_perf.py b/scripts/performance/topN_
> perf.py
> new file mode 100755
> index 0000000000..53fa503d8a
> --- /dev/null
> +++ b/scripts/performance/topN_perf.py
> @@ -0,0 +1,115 @@
> +#!/usr/bin/env python3
> +
> +# Print the top N most executed functions in QEMU using perf.
> +# Example Usage:
> +# topN_perf.py -n 20 -- /path/to/qemu program -program -flags
> +#
> +# If '-n' is not specified, the default is 25.
> +#
> +# This file is a part of the project "TCG Continuous Benchmarking".
> +#
> +# Copyright (C) 2020 Ahmed Karaman <ahmedkhaledkaraman@gmail.com>
> +# Copyright (C) 2020 Aleksandar Markovic <aleksandar.qemu.devel@gmail.
> com>
> +#
> +# This program is free software: you can redistribute it and/or modify
> +# it under the terms of the GNU General Public License as published by
> +# the Free Software Foundation, either version 2 of the License, or
> +# (at your option) any later version.
> +#
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License
> +# along with this program. If not, see <https://www.gnu.org/licenses/>.
> +
> +import argparse
> +import os
> +import subprocess
> +import sys
> +
> +
> +# Parse the command line arguments
> +parser = argparse.ArgumentParser(usage='topN_perf.py [-h] [-n
> TOP_FUNCTIONS] --'
> + ' /path/to/qemu program -[flags
> PROGRAM_FLAGS]')
> +
> +parser.add_argument('-n', dest='top', type=int, default=25,
> + help='Specify the number of top functions to print.')
> +
> +parser.add_argument('command', type=str, nargs='+',
> help=argparse.SUPPRESS)
> +
> +args = parser.parse_args()
> +
> +# Extract the needed variables from the args
> +command = args.command
> +top = args.top
> +
> +# Insure that perf is installed
> +check_perf = subprocess.run(["which", "perf"], stdout=subprocess.DEVNULL)
> +if check_perf.returncode:
> + sys.exit("Please install perf before running the script!")
> +
> +# Insure user has previllage to run perf
> +check_previlage = subprocess.run(["perf", "stat", "ls", "/"],
> + stdout=subprocess.DEVNULL,
> stderr=subprocess.PIPE)
> +if check_previlage.returncode:
> + sys.exit(check_previlage.stderr.decode("utf-8") +
> + "\nOr alternatively, you can run the script with sudo
> privileges!")
> +
> +# Run perf record
> +perf_record = subprocess.run((["perf", "record"] + command),
> + stdout=subprocess.DEVNULL,
> stderr=subprocess.PIPE)
> +if perf_record.returncode:
> + os.unlink('perf.data')
> + sys.exit(perf_record.stderr.decode("utf-8"))
> +
> +# Save perf report output to tmp.perf.data
> +with open("tmp.perf.data", "w") as output:
> + perf_report = subprocess.run(
> + ["perf", "report", "--stdio"], stdout=output,
> stderr=subprocess.PIPE)
> + if perf_report.returncode:
> + os.unlink('perf.data')
> + output.close()
> + os.unlink('tmp.perf.data')
> + sys.exit(perf_report.stderr.decode("utf-8"))
> +
> +# Read the reported data to functions[]
> +functions = []
> +with open("tmp.perf.data", "r") as data:
> + # Only read lines that are not comments (comments start with #)
> + # Only read lines that are not empty
> + functions = [line for line in data.readlines() if line and line[0]
> + != '#' and line[0] != "\n"]
> +
> +# Limit the number of top functions to "top"
> +number_of_top_functions = top if len(functions) > top else len(functions)
> +
> +# Store the data of the top functions in top_functions[]
> +top_functions = functions[:number_of_top_functions]
> +
> +# Print information headers
> +print('{:>4} {:>10} {:<30} {}\n{} {} {} {}'.format('No.',
> + 'Percentage',
> + 'Name',
> + 'Caller',
> + '-' * 4,
> + '-' * 10,
> + '-' * 30,
> + '-' * 25))
> +
> +
> +# Print top N functions
> +for (index, function) in enumerate(top_functions, start=1):
> + function_data = function.split()
> + function_percentage = function_data[0]
> + function_name = function_data[-1]
> + function_caller = ' '.join(function_data[2:-2])
> + print('{:>4} {:>10} {:<30} {}'.format(index,
> + function_percentage,
> + function_name,
> + function_caller))
> +
> +# Remove intermediate files
> +os.unlink('perf.data')
> +os.unlink('tmp.perf.data')
> --
> 2.17.1
>
>
[-- Attachment #2: Type: text/html, Size: 9371 bytes --]
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v2 2/3] scripts/performance: Add topN_callgrind.py script
2020-06-19 15:36 [PATCH v2 0/3] Add Scripts for Finding Top 25 Executed Functions Ahmed Karaman
2020-06-19 15:36 ` [PATCH v2 1/3] scripts/performance: Add topN_perf.py script Ahmed Karaman
@ 2020-06-19 15:36 ` Ahmed Karaman
2020-06-20 10:03 ` Aleksandar Markovic
2020-06-19 15:36 ` [PATCH v2 3/3] MAINTAINERS: Add 'Performance Tools and Tests' subsection Ahmed Karaman
` (2 subsequent siblings)
4 siblings, 1 reply; 9+ messages in thread
From: Ahmed Karaman @ 2020-06-19 15:36 UTC (permalink / raw)
To: qemu-devel, aleksandar.qemu.devel, alex.bennee, eblake, rth,
ldoktor, ehabkost, crosa
Cc: Ahmed Karaman
Python script that prints the top N most executed functions in QEMU
using callgrind.
Example Usage:
topN_callgrind.py -n 20 -- /path/to/qemu program -program -flags
If '-n' is not specified, the default is 25.
Example Output:
No. Percentage Name Source File
---- --------- ------------------ ------------------------------
1 24.577% 0x00000000082db000 ???
2 20.467% float64_mul <qemu>/fpu/softfloat.c
3 14.720% float64_sub <qemu>/fpu/softfloat.c
4 13.864% float64_add <qemu>/fpu/softfloat.c
5 4.876% helper_mulsd <qemu>/target/i386/ops_sse.h
6 3.767% helper_subsd <qemu>/target/i386/ops_sse.h
7 3.549% helper_addsd <qemu>/target/i386/ops_sse.h
8 2.185% helper_ucomisd <qemu>/target/i386/ops_sse.h
9 1.667% helper_lookup_tb_ptr <qemu>/include/exec/tb-lookup.h
10 1.662% f64_compare <qemu>/fpu/softfloat.c
11 1.509% helper_lookup_tb_ptr <qemu>/accel/tcg/tcg-runtime.c
12 0.635% helper_lookup_tb_ptr <qemu>/include/exec/exec-all.h
13 0.616% float64_div <qemu>/fpu/softfloat.c
14 0.502% helper_pand_xmm <qemu>/target/i386/ops_sse.h
15 0.502% float64_mul <qemu>/include/fpu/softfloat.h
16 0.476% helper_lookup_tb_ptr <qemu>/target/i386/cpu.h
17 0.437% float64_compare_quiet <qemu>/fpu/softfloat.c
18 0.414% helper_pxor_xmm <qemu>/target/i386/ops_sse.h
19 0.353% round_to_int <qemu>/fpu/softfloat.c
20 0.347% helper_cc_compute_all <qemu>/target/i386/cc_helper.c
Signed-off-by: Ahmed Karaman <ahmedkhaledkaraman@gmail.com>
---
scripts/performance/topN_callgrind.py | 131 ++++++++++++++++++++++++++
1 file changed, 131 insertions(+)
create mode 100755 scripts/performance/topN_callgrind.py
diff --git a/scripts/performance/topN_callgrind.py b/scripts/performance/topN_callgrind.py
new file mode 100755
index 0000000000..2cfff54c98
--- /dev/null
+++ b/scripts/performance/topN_callgrind.py
@@ -0,0 +1,131 @@
+#!/usr/bin/env python3
+
+# Print the top N most executed functions in QEMU using callgrind.
+# Example Usage:
+# topN_callgrind.py -n 20 -- /path/to/qemu program -program -flags
+#
+# If '-n' is not specified, the default is 25.
+#
+# This file is a part of the project "TCG Continuous Benchmarking".
+#
+# Copyright (C) 2020 Ahmed Karaman <ahmedkhaledkaraman@gmail.com>
+# Copyright (C) 2020 Aleksandar Markovic <aleksandar.qemu.devel@gmail.com>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+import argparse
+import os
+import subprocess
+import sys
+
+
+# Parse the command line arguments
+parser = argparse.ArgumentParser(usage=\
+ 'topN_callgrind.py [-h] [-n TOP_FUNCTIONS] --'
+ ' /path/to/qemu program -[flags PROGRAM_FLAGS]')
+
+parser.add_argument('-n', dest='top', type=int, default=25,
+ help='Specify the number of top functions to print.')
+
+parser.add_argument('command', type=str, nargs='+', help=argparse.SUPPRESS)
+
+args = parser.parse_args()
+
+# Extract the needed variables from the args
+command = args.command
+top = args.top
+
+# Insure that valgrind is installed
+check_valgrind = subprocess.run(
+ ["which", "valgrind"], stdout=subprocess.DEVNULL)
+if check_valgrind.returncode:
+ sys.exit("Please install valgrind before running the script!")
+
+# Run callgrind
+callgrind = subprocess.run((["valgrind", "--tool=callgrind",
+ "--callgrind-out-file=callgrind.data"] + command),
+ stdout=subprocess.DEVNULL, stderr=subprocess.PIPE)
+if callgrind.returncode:
+ sys.exit(callgrind.stderr.decode("utf-8"))
+
+# Save callgrind_annotate output to tmp.callgrind.data
+with open("tmp.callgrind.data", "w") as output:
+ callgrind_annotate = subprocess.run(
+ ["callgrind_annotate", "callgrind.data"],
+ stdout=output,
+ stderr=subprocess.PIPE)
+ if callgrind_annotate.returncode:
+ os.unlink('callgrind.data')
+ output.close()
+ os.unlink('tmp.callgrind.data')
+ sys.exit(callgrind_annotate.stderr.decode("utf-8"))
+
+
+# Read the callgrind_annotate output to callgrind_data[]
+callgrind_data = []
+with open('tmp.callgrind.data', 'r') as data:
+ callgrind_data = data.readlines()
+
+# Line number with the total number of instructions
+total_instructions_line_number = 20
+
+# Get the total number of instructions
+total_instructions_line_data = callgrind_data[total_instructions_line_number]
+total_number_of_instructions = total_instructions_line_data.split(' ')[0]
+total_number_of_instructions = int(
+ total_number_of_instructions.replace(',', ''))
+
+# Line number with the top function
+first_func_line = 25
+
+# Number of functions recorded by callgrind, last two lines are always empty
+number_of_functions = len(callgrind_data) - first_func_line - 2
+
+# Limit the number of top functions to "top"
+number_of_top_functions = (top if number_of_functions >
+ top else number_of_functions)
+
+# Store the data of the top functions in top_functions[]
+top_functions = callgrind_data[first_func_line:
+ first_func_line + number_of_top_functions]
+
+# Print information headers
+print('{:>4} {:>10} {:<30} {}\n{} {} {} {}'.format('No.',
+ 'Percentage',
+ 'Name',
+ 'Source File',
+ '-' * 4,
+ '-' * 10,
+ '-' * 30,
+ '-' * 30,
+ ))
+
+# Print top N functions
+for (index, function) in enumerate(top_functions, start=1):
+ function_data = function.split()
+ # Calculate function percentage
+ function_instructions = float(function_data[0].replace(',', ''))
+ function_percentage = (function_instructions /
+ total_number_of_instructions)*100
+ # Get function name and source files path
+ function_source_path, function_name = function_data[1].split(':')
+ # Print extracted data
+ print('{:>4} {:>9.3f}% {:<30} {}'.format(index,
+ round(function_percentage, 3),
+ function_name,
+ function_source_path))
+
+# Remove intermediate files
+os.unlink('callgrind.data')
+os.unlink('tmp.callgrind.data')
--
2.17.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH v2 2/3] scripts/performance: Add topN_callgrind.py script
2020-06-19 15:36 ` [PATCH v2 2/3] scripts/performance: Add topN_callgrind.py script Ahmed Karaman
@ 2020-06-20 10:03 ` Aleksandar Markovic
0 siblings, 0 replies; 9+ messages in thread
From: Aleksandar Markovic @ 2020-06-20 10:03 UTC (permalink / raw)
To: Ahmed Karaman
Cc: ldoktor@redhat.com, ehabkost@redhat.com, alex.bennee@linaro.org,
qemu-devel@nongnu.org, crosa@redhat.com, rth@twiddle.net
[-- Attachment #1: Type: text/plain, Size: 8159 bytes --]
петак, 19. јун 2020., Ahmed Karaman <ahmedkhaledkaraman@gmail.com> је
написао/ла:
> Python script that prints the top N most executed functions in QEMU
> using callgrind.
>
> Example Usage:
> topN_callgrind.py -n 20 -- /path/to/qemu program -program -flags
>
> If '-n' is not specified, the default is 25.
>
>
Comments similar to the one for the previous patch apply here too.
Thanks, Aleksandar
> Example Output:
> No. Percentage Name Source File
> ---- --------- ------------------ ------------------------------
> 1 24.577% 0x00000000082db000 ???
> 2 20.467% float64_mul <qemu>/fpu/softfloat.c
> 3 14.720% float64_sub <qemu>/fpu/softfloat.c
> 4 13.864% float64_add <qemu>/fpu/softfloat.c
> 5 4.876% helper_mulsd <qemu>/target/i386/ops_sse.h
> 6 3.767% helper_subsd <qemu>/target/i386/ops_sse.h
> 7 3.549% helper_addsd <qemu>/target/i386/ops_sse.h
> 8 2.185% helper_ucomisd <qemu>/target/i386/ops_sse.h
> 9 1.667% helper_lookup_tb_ptr <qemu>/include/exec/tb-lookup.h
> 10 1.662% f64_compare <qemu>/fpu/softfloat.c
> 11 1.509% helper_lookup_tb_ptr <qemu>/accel/tcg/tcg-runtime.c
> 12 0.635% helper_lookup_tb_ptr <qemu>/include/exec/exec-all.h
> 13 0.616% float64_div <qemu>/fpu/softfloat.c
> 14 0.502% helper_pand_xmm <qemu>/target/i386/ops_sse.h
> 15 0.502% float64_mul <qemu>/include/fpu/softfloat.h
> 16 0.476% helper_lookup_tb_ptr <qemu>/target/i386/cpu.h
> 17 0.437% float64_compare_quiet <qemu>/fpu/softfloat.c
> 18 0.414% helper_pxor_xmm <qemu>/target/i386/ops_sse.h
> 19 0.353% round_to_int <qemu>/fpu/softfloat.c
> 20 0.347% helper_cc_compute_all <qemu>/target/i386/cc_helper.c
>
> Signed-off-by: Ahmed Karaman <ahmedkhaledkaraman@gmail.com>
> ---
> scripts/performance/topN_callgrind.py | 131 ++++++++++++++++++++++++++
> 1 file changed, 131 insertions(+)
> create mode 100755 scripts/performance/topN_callgrind.py
>
> diff --git a/scripts/performance/topN_callgrind.py
> b/scripts/performance/topN_callgrind.py
> new file mode 100755
> index 0000000000..2cfff54c98
> --- /dev/null
> +++ b/scripts/performance/topN_callgrind.py
> @@ -0,0 +1,131 @@
> +#!/usr/bin/env python3
> +
> +# Print the top N most executed functions in QEMU using callgrind.
> +# Example Usage:
> +# topN_callgrind.py -n 20 -- /path/to/qemu program -program -flags
> +#
> +# If '-n' is not specified, the default is 25.
> +#
> +# This file is a part of the project "TCG Continuous Benchmarking".
> +#
> +# Copyright (C) 2020 Ahmed Karaman <ahmedkhaledkaraman@gmail.com>
> +# Copyright (C) 2020 Aleksandar Markovic <aleksandar.qemu.devel@gmail.
> com>
> +#
> +# This program is free software: you can redistribute it and/or modify
> +# it under the terms of the GNU General Public License as published by
> +# the Free Software Foundation, either version 2 of the License, or
> +# (at your option) any later version.
> +#
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License
> +# along with this program. If not, see <https://www.gnu.org/licenses/>.
> +
> +import argparse
> +import os
> +import subprocess
> +import sys
> +
> +
> +# Parse the command line arguments
> +parser = argparse.ArgumentParser(usage=\
> + 'topN_callgrind.py [-h] [-n
> TOP_FUNCTIONS] --'
> + ' /path/to/qemu program -[flags
> PROGRAM_FLAGS]')
> +
> +parser.add_argument('-n', dest='top', type=int, default=25,
> + help='Specify the number of top functions to print.')
> +
> +parser.add_argument('command', type=str, nargs='+',
> help=argparse.SUPPRESS)
> +
> +args = parser.parse_args()
> +
> +# Extract the needed variables from the args
> +command = args.command
> +top = args.top
> +
> +# Insure that valgrind is installed
> +check_valgrind = subprocess.run(
> + ["which", "valgrind"], stdout=subprocess.DEVNULL)
> +if check_valgrind.returncode:
> + sys.exit("Please install valgrind before running the script!")
> +
> +# Run callgrind
> +callgrind = subprocess.run((["valgrind", "--tool=callgrind",
> + "--callgrind-out-file=callgrind.data"] +
> command),
> + stdout=subprocess.DEVNULL,
> stderr=subprocess.PIPE)
> +if callgrind.returncode:
> + sys.exit(callgrind.stderr.decode("utf-8"))
> +
> +# Save callgrind_annotate output to tmp.callgrind.data
> +with open("tmp.callgrind.data", "w") as output:
> + callgrind_annotate = subprocess.run(
> + ["callgrind_annotate", "callgrind.data"],
> + stdout=output,
> + stderr=subprocess.PIPE)
> + if callgrind_annotate.returncode:
> + os.unlink('callgrind.data')
> + output.close()
> + os.unlink('tmp.callgrind.data')
> + sys.exit(callgrind_annotate.stderr.decode("utf-8"))
> +
> +
> +# Read the callgrind_annotate output to callgrind_data[]
> +callgrind_data = []
> +with open('tmp.callgrind.data', 'r') as data:
> + callgrind_data = data.readlines()
> +
> +# Line number with the total number of instructions
> +total_instructions_line_number = 20
> +
> +# Get the total number of instructions
> +total_instructions_line_data = callgrind_data[total_
> instructions_line_number]
> +total_number_of_instructions = total_instructions_line_data.split(' ')[0]
> +total_number_of_instructions = int(
> + total_number_of_instructions.replace(',', ''))
> +
> +# Line number with the top function
> +first_func_line = 25
> +
> +# Number of functions recorded by callgrind, last two lines are always
> empty
> +number_of_functions = len(callgrind_data) - first_func_line - 2
> +
> +# Limit the number of top functions to "top"
> +number_of_top_functions = (top if number_of_functions >
> + top else number_of_functions)
> +
> +# Store the data of the top functions in top_functions[]
> +top_functions = callgrind_data[first_func_line:
> + first_func_line + number_of_top_functions]
> +
> +# Print information headers
> +print('{:>4} {:>10} {:<30} {}\n{} {} {} {}'.format('No.',
> + 'Percentage',
> + 'Name',
> + 'Source File',
> + '-' * 4,
> + '-' * 10,
> + '-' * 30,
> + '-' * 30,
> + ))
> +
> +# Print top N functions
> +for (index, function) in enumerate(top_functions, start=1):
> + function_data = function.split()
> + # Calculate function percentage
> + function_instructions = float(function_data[0].replace(',', ''))
> + function_percentage = (function_instructions /
> + total_number_of_instructions)*100
> + # Get function name and source files path
> + function_source_path, function_name = function_data[1].split(':')
> + # Print extracted data
> + print('{:>4} {:>9.3f}% {:<30} {}'.format(index,
> +
> round(function_percentage, 3),
> + function_name,
> + function_source_path))
> +
> +# Remove intermediate files
> +os.unlink('callgrind.data')
> +os.unlink('tmp.callgrind.data')
> --
> 2.17.1
>
>
[-- Attachment #2: Type: text/html, Size: 10523 bytes --]
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v2 3/3] MAINTAINERS: Add 'Performance Tools and Tests' subsection
2020-06-19 15:36 [PATCH v2 0/3] Add Scripts for Finding Top 25 Executed Functions Ahmed Karaman
2020-06-19 15:36 ` [PATCH v2 1/3] scripts/performance: Add topN_perf.py script Ahmed Karaman
2020-06-19 15:36 ` [PATCH v2 2/3] scripts/performance: Add topN_callgrind.py script Ahmed Karaman
@ 2020-06-19 15:36 ` Ahmed Karaman
2020-06-19 16:04 ` [PATCH v2 0/3] Add Scripts for Finding Top 25 Executed Functions no-reply
2020-06-20 9:14 ` Aleksandar Markovic
4 siblings, 0 replies; 9+ messages in thread
From: Ahmed Karaman @ 2020-06-19 15:36 UTC (permalink / raw)
To: qemu-devel, aleksandar.qemu.devel, alex.bennee, eblake, rth,
ldoktor, ehabkost, crosa
Cc: Ahmed Karaman
This commit creates a new 'Miscellaneous' section which hosts a new
'Performance Tools and Tests' subsection.
The subsection will contain the the performance scripts and benchmarks
written as a part of the 'TCG Continuous Benchmarking' project.
Signed-off-by: Ahmed Karaman <ahmedkhaledkaraman@gmail.com>
---
MAINTAINERS | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/MAINTAINERS b/MAINTAINERS
index 955cc8dd5c..ee4bfc5fb1 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -2974,3 +2974,10 @@ M: Peter Maydell <peter.maydell@linaro.org>
S: Maintained
F: docs/conf.py
F: docs/*/conf.py
+
+Miscellaneous
+-------------
+Performance Tools and Tests
+M: Ahmed Karaman <ahmedkhaledkaraman@gmail.com>
+S: Maintained
+F: scripts/performance/
--
2.17.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH v2 0/3] Add Scripts for Finding Top 25 Executed Functions
2020-06-19 15:36 [PATCH v2 0/3] Add Scripts for Finding Top 25 Executed Functions Ahmed Karaman
` (2 preceding siblings ...)
2020-06-19 15:36 ` [PATCH v2 3/3] MAINTAINERS: Add 'Performance Tools and Tests' subsection Ahmed Karaman
@ 2020-06-19 16:04 ` no-reply
2020-06-20 9:14 ` Aleksandar Markovic
4 siblings, 0 replies; 9+ messages in thread
From: no-reply @ 2020-06-19 16:04 UTC (permalink / raw)
To: ahmedkhaledkaraman
Cc: ldoktor, ehabkost, alex.bennee, qemu-devel, ahmedkhaledkaraman,
aleksandar.qemu.devel, crosa, rth
Patchew URL: https://patchew.org/QEMU/20200619153632.1365-1-ahmedkhaledkaraman@gmail.com/
Hi,
This series failed the asan build test. Please find the testing commands and
their output below. If you have Docker installed, you can probably reproduce it
locally.
=== TEST SCRIPT BEGIN ===
#!/bin/bash
export ARCH=x86_64
make docker-image-fedora V=1 NETWORK=1
time make docker-test-debug@fedora TARGET_LIST=x86_64-softmmu J=14 NETWORK=1
=== TEST SCRIPT END ===
CC qga/commands.o
CC qga/guest-agent-command-state.o
CC qga/main.o
/usr/bin/ld: /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors_vfork.S.o): warning: common of `__interception::real_vfork' overridden by definition from /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors.cpp.o)
CC qga/commands-posix.o
CC qga/channel-posix.o
CC qga/qapi-generated/qga-qapi-types.o
---
GEN docs/interop/qemu-ga-ref.html
GEN docs/interop/qemu-ga-ref.txt
GEN docs/interop/qemu-ga-ref.7
/usr/bin/ld: /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors_vfork.S.o): warning: common of `__interception::real_vfork' overridden by definition from /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors.cpp.o)
LINK qemu-keymap
/usr/bin/ld: /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors_vfork.S.o): warning: common of `__interception::real_vfork' overridden by definition from /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors.cpp.o)
LINK ivshmem-client
LINK ivshmem-server
/usr/bin/ld: /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors_vfork.S.o): warning: common of `__interception::real_vfork' overridden by definition from /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors.cpp.o)
/usr/bin/ld: /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors_vfork.S.o): warning: common of `__interception::real_vfork' overridden by definition from /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors.cpp.o)
LINK qemu-nbd
AS pc-bios/optionrom/multiboot.o
AS pc-bios/optionrom/linuxboot.o
/usr/bin/ld: /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors_vfork.S.o): warning: common of `__interception::real_vfork' overridden by definition from /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors.cpp.o)
CC pc-bios/optionrom/linuxboot_dma.o
AS pc-bios/optionrom/kvmvapic.o
LINK qemu-storage-daemon
AS pc-bios/optionrom/pvh.o
CC pc-bios/optionrom/pvh_main.o
BUILD pc-bios/optionrom/multiboot.img
/usr/bin/ld: /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors_vfork.S.o): warning: common of `__interception::real_vfork' overridden by definition from /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors.cpp.o)
LINK qemu-img
BUILD pc-bios/optionrom/linuxboot.img
BUILD pc-bios/optionrom/linuxboot_dma.img
BUILD pc-bios/optionrom/kvmvapic.img
BUILD pc-bios/optionrom/pvh.img
BUILD pc-bios/optionrom/multiboot.raw
/usr/bin/ld: /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors_vfork.S.o): warning: common of `__interception::real_vfork' overridden by definition from /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors.cpp.o)
BUILD pc-bios/optionrom/linuxboot.raw
BUILD pc-bios/optionrom/linuxboot_dma.raw
BUILD pc-bios/optionrom/kvmvapic.raw
---
SIGN pc-bios/optionrom/kvmvapic.bin
LINK qemu-edid
SIGN pc-bios/optionrom/pvh.bin
/usr/bin/ld: /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors_vfork.S.o): warning: common of `__interception::real_vfork' overridden by definition from /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors.cpp.o)
LINK fsdev/virtfs-proxy-helper
LINK scsi/qemu-pr-helper
/usr/bin/ld: /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors_vfork.S.o): warning: common of `__interception::real_vfork' overridden by definition from /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors.cpp.o)
LINK qemu-bridge-helper
/usr/bin/ld: /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors_vfork.S.o): warning: common of `__interception::real_vfork' overridden by definition from /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors.cpp.o)
LINK virtiofsd
LINK vhost-user-input
/usr/bin/ld: /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors_vfork.S.o): warning: common of `__interception::real_vfork' overridden by definition from /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors.cpp.o)
/usr/bin/ld: /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors_vfork.S.o): warning: common of `__interception::real_vfork' overridden by definition from /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors.cpp.o)
LINK qemu-ga
/usr/bin/ld: /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors_vfork.S.o): warning: common of `__interception::real_vfork' overridden by definition from /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors.cpp.o)
/usr/bin/ld: /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors_vfork.S.o): warning: common of `__interception::real_vfork' overridden by definition from /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors.cpp.o)
/usr/bin/ld: /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors_vfork.S.o): warning: common of `__interception::real_vfork' overridden by definition from /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors.cpp.o)
GEN x86_64-softmmu/hmp-commands.h
GEN x86_64-softmmu/hmp-commands-info.h
GEN x86_64-softmmu/config-devices.h
---
CC x86_64-softmmu/gdbstub-xml.o
CC x86_64-softmmu/trace/generated-helpers.o
LINK x86_64-softmmu/qemu-system-x86_64
/usr/bin/ld: /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors_vfork.S.o): warning: common of `__interception::real_vfork' overridden by definition from /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors.cpp.o)
common.rc: line 50: test: check: binary operator expected
(printf '#define QEMU_PKGVERSION ""\n'; printf '#define QEMU_FULL_VERSION "5.0.50"\n'; ) > qemu-version.h.tmp
make -C /tmp/qemu-test/src/slirp BUILD_DIR="/tmp/qemu-test/build/slirp" PKG_CONFIG="pkg-config" CC="clang" AR="ar" LD="ld" RANLIB="ranlib" CFLAGS="-I/usr/include/pixman-1 -Werror -fsanitize=undefined -fsanitize=address -pthread -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -fPIE -DPIE -m64 -mcx16 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -Wstrict-prototypes -Wredundant-decls -Wall -Wundef -Wwrite-strings -Wmissing-prototypes -fno-strict-aliasing -fno-common -fwrapv -std=gnu99 -Wold-style-definition -Wtype-limits -Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers -Wempty-body -Wnested-externs -Wendif-labels -Wexpansion-to-defined -Wno-initializer-overrides -Wno-missing-include-dirs -Wno-shift-negative-value -Wno-string-plus-int -Wno-typedef-redefinition -Wno-tautological-type-limit-compare -fstack-protector-strong -I/usr/include/p11-kit-1 -DSTRUCT_IOVEC_DEFINED -I/usr/include/libpng16 -I/usr/include/spice-1 -I/usr/include/spice-server -I/usr/include/cacard -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/nss3 -I/usr/include/nspr4 -pthread -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/pixman-1 -I/tmp/qemu-test/src/tests -I/tmp/qemu-test/src/tests/qtest -g " LDFLAGS="-Wl,--warn-common -fsanitize=undefined -fsanitize=address -Wl,-z,relro -Wl,-z,now -pie -m64 -fstack-protector-strong"
---
clang -iquote /tmp/qemu-test/build/tests/qtest/libqos -iquote tests/qtest/libqos -iquote /tmp/qemu-test/src/tcg/i386 -isystem /tmp/qemu-test/src/linux-headers -isystem /tmp/qemu-test/build/linux-headers -iquote . -iquote /tmp/qemu-test/src -iquote /tmp/qemu-test/src/accel/tcg -iquote /tmp/qemu-test/src/include -iquote /tmp/qemu-test/src/disas/libvixl -I/usr/include/pixman-1 -Werror -fsanitize=undefined -fsanitize=address -pthread -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -fPIE -DPIE -m64 -mcx16 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -Wstrict-prototypes -Wredundant-decls -Wall -Wundef -Wwrite-strings -Wmissing-prototypes -fno-strict-aliasing -fno-common -fwrapv -std=gnu99 -Wold-style-definition -Wtype-limits -Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers -Wempty-body -Wnested-externs -Wendif-labels -Wexpansion-to-defined -Wno-initializer-overrides -Wno-missing-include-dirs -Wno-shift-negative-value -Wno-string-plus-int -Wno-typedef-redefinition -Wno-tautological-type-limit-compare -fstack-protector-strong -I/usr/include/p11-kit-1 -DSTRUCT_IOVEC_DEFINED -I/usr/include/libpng16 -I/usr/include/spice-1 -I/usr/include/spice-server -I/usr/include/cacard -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/nss3 -I/usr/include/nspr4 -pthread -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/pixman-1 -I/tmp/qemu-test/src/tests -I/tmp/qemu-test/src/tests/qtest -MMD -MP -MT tests/qtest/libqos/virtio-rng.o -MF tests/qtest/libqos/virtio-rng.d -g -c -o tests/qtest/libqos/virtio-rng.o /tmp/qemu-test/src/tests/qtest/libqos/virtio-rng.c
clang -iquote /tmp/qemu-test/build/tests/qtest/libqos -iquote tests/qtest/libqos -iquote /tmp/qemu-test/src/tcg/i386 -isystem /tmp/qemu-test/src/linux-headers -isystem /tmp/qemu-test/build/linux-headers -iquote . -iquote /tmp/qemu-test/src -iquote /tmp/qemu-test/src/accel/tcg -iquote /tmp/qemu-test/src/include -iquote /tmp/qemu-test/src/disas/libvixl -I/usr/include/pixman-1 -Werror -fsanitize=undefined -fsanitize=address -pthread -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -fPIE -DPIE -m64 -mcx16 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -Wstrict-prototypes -Wredundant-decls -Wall -Wundef -Wwrite-strings -Wmissing-prototypes -fno-strict-aliasing -fno-common -fwrapv -std=gnu99 -Wold-style-definition -Wtype-limits -Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers -Wempty-body -Wnested-externs -Wendif-labels -Wexpansion-to-defined -Wno-initializer-overrides -Wno-missing-include-dirs -Wno-shift-negative-value -Wno-string-plus-int -Wno-typedef-redefinition -Wno-tautological-type-limit-compare -fstack-protector-strong -I/usr/include/p11-kit-1 -DSTRUCT_IOVEC_DEFINED -I/usr/include/libpng16 -I/usr/include/spice-1 -I/usr/include/spice-server -I/usr/include/cacard -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/nss3 -I/usr/include/nspr4 -pthread -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/pixman-1 -I/tmp/qemu-test/src/tests -I/tmp/qemu-test/src/tests/qtest -MMD -MP -MT tests/qtest/libqos/virtio-scsi.o -MF tests/qtest/libqos/virtio-scsi.d -g -c -o tests/qtest/libqos/virtio-scsi.o /tmp/qemu-test/src/tests/qtest/libqos/virtio-scsi.c
clang -iquote /tmp/qemu-test/build/. -iquote . -iquote /tmp/qemu-test/src/tcg/i386 -isystem /tmp/qemu-test/src/linux-headers -isystem /tmp/qemu-test/build/linux-headers -iquote . -iquote /tmp/qemu-test/src -iquote /tmp/qemu-test/src/accel/tcg -iquote /tmp/qemu-test/src/include -iquote /tmp/qemu-test/src/disas/libvixl -I/tmp/qemu-test/src/tests/fp -I/tmp/qemu-test/src/tests/fp/berkeley-softfloat-3/source/include -I/tmp/qemu-test/src/tests/fp/berkeley-softfloat-3/source/8086-SSE -I/tmp/qemu-test/src/tests/fp/berkeley-testfloat-3/source -I/usr/include/pixman-1 -Werror -fsanitize=undefined -fsanitize=address -pthread -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -fPIE -DPIE -m64 -mcx16 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -Wstrict-prototypes -Wredundant-decls -Wall -Wundef -Wwrite-strings -Wmissing-prototypes -fno-strict-aliasing -fno-common -fwrapv -std=gnu99 -Wold-style-definition -Wtype-limits -Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers -Wempty-body -Wnested-externs -Wendif-labels -Wexpansion-to-defined -Wno-initializer-overrides -Wno-missing-include-dirs -Wno-shift-negative-value -Wno-string-plus-int -Wno-typedef-redefinition -Wno-tautological-type-limit-compare -fstack-protector-strong -I/usr/include/p11-kit-1 -DSTRUCT_IOVEC_DEFINED -I/usr/include/libpng16 -I/usr/include/spice-1 -I/usr/include/spice-server -I/usr/include/cacard -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/nss3 -I/usr/include/nspr4 -pthread -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/pixman-1 -DHW_POISON_H -DTARGET_ARM -DSOFTFLOAT_ROUND_ODD -DINLINE_LEVEL=5 -DSOFTFLOAT_FAST_DIV32TO16 -DSOFTFLOAT_FAST_DIV64TO32 -DSOFTFLOAT_FAST_INT64 -DFLOAT16 -DFLOAT64 -DEXTFLOAT80 -DFLOAT128 -DFLOAT_ROUND_ODD -DLONG_DOUBLE_IS_EXTFLOAT80 -Wno-strict-prototypes -Wno-unknown-pragmas -Wno-uninitialized -Wno-missing-prototypes -Wno-return-type -Wno-unused-function -Wno-error -MMD -MP -MT writeCase_z_ui32.o -MF ./writeCase_z_ui32.d -g -c -o writeCase_z_ui32.o /tmp/qemu-test/src/tests/fp/berkeley-testfloat-3/source/writeCase_z_ui32.c
/tmp/qemu-test/src/tests/qht-bench.c:287:29: error: implicit conversion from 'unsigned long' to 'double' changes value from 18446744073709551615 to 18446744073709551616 [-Werror,-Wimplicit-int-float-conversion]
*threshold = rate * UINT64_MAX;
~ ^~~~~~~~~~
/usr/include/stdint.h:130:23: note: expanded from macro 'UINT64_MAX'
---
18446744073709551615UL
^~~~~~~~~~~~~~~~~~~~~~
1 error generated.
make: *** [/tmp/qemu-test/src/rules.mak:69: tests/qht-bench.o] Error 1
make: *** Waiting for unfinished jobs....
clang -iquote /tmp/qemu-test/build/. -iquote . -iquote /tmp/qemu-test/src/tcg/i386 -isystem /tmp/qemu-test/src/linux-headers -isystem /tmp/qemu-test/build/linux-headers -iquote . -iquote /tmp/qemu-test/src -iquote /tmp/qemu-test/src/accel/tcg -iquote /tmp/qemu-test/src/include -iquote /tmp/qemu-test/src/disas/libvixl -I/tmp/qemu-test/src/tests/fp -I/tmp/qemu-test/src/tests/fp/berkeley-softfloat-3/source/include -I/tmp/qemu-test/src/tests/fp/berkeley-softfloat-3/source/8086-SSE -I/tmp/qemu-test/src/tests/fp/berkeley-testfloat-3/source -I/usr/include/pixman-1 -Werror -fsanitize=undefined -fsanitize=address -pthread -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -fPIE -DPIE -m64 -mcx16 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -Wstrict-prototypes -Wredundant-decls -Wall -Wundef -Wwrite-strings -Wmissing-prototypes -fno-strict-aliasing -fno-common -fwrapv -std=gnu99 -Wold-style-definition -Wtype-limits -Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers -Wempty-body -Wnested-externs -Wendif-labels -Wexpansion-to-defined -Wno-initializer-overrides -Wno-missing-include-dirs -Wno-shift-negative-value -Wno-string-plus-int -Wno-typedef-redefinition -Wno-tautological-type-limit-compare -fstack-protector-strong -I/usr/include/p11-kit-1 -DSTRUCT_IOVEC_DEFINED -I/usr/include/libpng16 -I/usr/include/spice-1 -I/usr/include/spice-server -I/usr/include/cacard -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/nss3 -I/usr/include/nspr4 -pthread -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/pixman-1 -DHW_POISON_H -DTARGET_ARM -DSOFTFLOAT_ROUND_ODD -DINLINE_LEVEL=5 -DSOFTFLOAT_FAST_DIV32TO16 -DSOFTFLOAT_FAST_DIV64TO32 -DSOFTFLOAT_FAST_INT64 -DFLOAT16 -DFLOAT64 -DEXTFLOAT80 -DFLOAT128 -DFLOAT_ROUND_ODD -DLONG_DOUBLE_IS_EXTFLOAT80 -Wno-strict-prototypes -Wno-unknown-pragmas -Wno-uninitialized -Wno-missing-prototypes -Wno-return-type -Wno-unused-function -Wno-error -MMD -MP -MT writeCase_z_ui64.o -MF ./writeCase_z_ui64.d -g -c -o writeCase_z_ui64.o /tmp/qemu-test/src/tests/fp/berkeley-testfloat-3/source/writeCase_z_ui64.c
clang -iquote /tmp/qemu-test/build/. -iquote . -iquote /tmp/qemu-test/src/tcg/i386 -isystem /tmp/qemu-test/src/linux-headers -isystem /tmp/qemu-test/build/linux-headers -iquote . -iquote /tmp/qemu-test/src -iquote /tmp/qemu-test/src/accel/tcg -iquote /tmp/qemu-test/src/include -iquote /tmp/qemu-test/src/disas/libvixl -I/tmp/qemu-test/src/tests/fp -I/tmp/qemu-test/src/tests/fp/berkeley-softfloat-3/source/include -I/tmp/qemu-test/src/tests/fp/berkeley-softfloat-3/source/8086-SSE -I/tmp/qemu-test/src/tests/fp/berkeley-testfloat-3/source -I/usr/include/pixman-1 -Werror -fsanitize=undefined -fsanitize=address -pthread -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -fPIE -DPIE -m64 -mcx16 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -Wstrict-prototypes -Wredundant-decls -Wall -Wundef -Wwrite-strings -Wmissing-prototypes -fno-strict-aliasing -fno-common -fwrapv -std=gnu99 -Wold-style-definition -Wtype-limits -Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers -Wempty-body -Wnested-externs -Wendif-labels -Wexpansion-to-defined -Wno-initializer-overrides -Wno-missing-include-dirs -Wno-shift-negative-value -Wno-string-plus-int -Wno-typedef-redefinition -Wno-tautological-type-limit-compare -fstack-protector-strong -I/usr/include/p11-kit-1 -DSTRUCT_IOVEC_DEFINED -I/usr/include/libpng16 -I/usr/include/spice-1 -I/usr/include/spice-server -I/usr/include/cacard -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/nss3 -I/usr/include/nspr4 -pthread -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/pixman-1 -DHW_POISON_H -DTARGET_ARM -DSOFTFLOAT_ROUND_ODD -DINLINE_LEVEL=5 -DSOFTFLOAT_FAST_DIV32TO16 -DSOFTFLOAT_FAST_DIV64TO32 -DSOFTFLOAT_FAST_INT64 -DFLOAT16 -DFLOAT64 -DEXTFLOAT80 -DFLOAT128 -DFLOAT_ROUND_ODD -DLONG_DOUBLE_IS_EXTFLOAT80 -Wno-strict-prototypes -Wno-unknown-pragmas -Wno-uninitialized -Wno-missing-prototypes -Wno-return-type -Wno-unused-function -Wno-error -MMD -MP -MT writeCase_z_f16.o -MF ./writeCase_z_f16.d -g -c -o writeCase_z_f16.o /tmp/qemu-test/src/tests/fp/berkeley-testfloat-3/source/writeCase_z_f16.c
---
rm -f libtestfloat.a && ar rcs libtestfloat.a uint128_inline.o uint128.o fail.o functions_common.o functionInfos.o standardFunctionInfos.o random.o genCases_common.o genCases_ui32.o genCases_ui64.o genCases_i32.o genCases_i64.o genCases_f16.o genCases_f32.o genCases_f64.o genCases_extF80.o genCases_f128.o genCases_writeTestsTotal.o verCases_inline.o verCases_common.o verCases_writeFunctionName.o readHex.o writeHex.o writeCase_a_ui32.o writeCase_a_ui64.o writeCase_a_f16.o writeCase_ab_f16.o writeCase_abc_f16.o writeCase_a_f32.o writeCase_ab_f32.o writeCase_abc_f32.o writeCase_a_f64.o writeCase_ab_f64.o writeCase_abc_f64.o writeCase_a_extF80M.o writeCase_ab_extF80M.o writeCase_a_f128M.o writeCase_ab_f128M.o writeCase_abc_f128M.o writeCase_z_bool.o writeCase_z_ui32.o writeCase_z_ui64.o writeCase_z_f16.o writeCase_z_f32.o writeCase_z_f64.o writeCase_z_extF80M.o writeCase_z_f128M.o testLoops_common.o test_a_ui32_z_f16.o test_a_ui32_z_f32.o test_a_ui32_z_f64.o test_a_ui32_z_extF80.o test_a_ui32_z_f128.o test_a_ui64_z_f16.o test_a_ui64_z_f32.o test_a_ui64_z_f64.o test_a_ui64_z_extF80.o test_a_ui64_z_f128.o test_a_i32_z_f16.o test_a_i32_z_f32.o test_a_i32_z_f64.o test_a_i32_z_extF80.o test_a_i32_z_f128.o test_a_i64_z_f16.o test_a_i64_z_f32.o test_a_i64_z_f64.o test_a_i64_z_extF80.o test_a_i64_z_f128.o test_a_f16_z_ui32_rx.o test_a_f16_z_ui64_rx.o test_a_f16_z_i32_rx.o test_a_f16_z_i64_rx.o test_a_f16_z_ui32_x.o test_a_f16_z_ui64_x.o test_a_f16_z_i32_x.o test_a_f16_z_i64_x.o test_a_f16_z_f32.o test_a_f16_z_f64.o test_a_f16_z_extF80.o test_a_f16_z_f128.o test_az_f16.o test_az_f16_rx.o test_abz_f16.o test_abcz_f16.o test_ab_f16_z_bool.o test_a_f32_z_ui32_rx.o test_a_f32_z_ui64_rx.o test_a_f32_z_i32_rx.o test_a_f32_z_i64_rx.o test_a_f32_z_ui32_x.o test_a_f32_z_ui64_x.o test_a_f32_z_i32_x.o test_a_f32_z_i64_x.o test_a_f32_z_f16.o test_a_f32_z_f64.o test_a_f32_z_extF80.o test_a_f32_z_f128.o test_az_f32.o test_az_f32_rx.o test_abz_f32.o test_abcz_f32.o test_ab_f32_z_bool.o test_a_f64_z_ui32_rx.o test_a_f64_z_ui64_rx.o test_a_f64_z_i32_rx.o test_a_f64_z_i64_rx.o test_a_f64_z_ui32_x.o test_a_f64_z_ui64_x.o test_a_f64_z_i32_x.o test_a_f64_z_i64_x.o test_a_f64_z_f16.o test_a_f64_z_f32.o test_a_f64_z_extF80.o test_a_f64_z_f128.o test_az_f64.o test_az_f64_rx.o test_abz_f64.o test_abcz_f64.o test_ab_f64_z_bool.o test_a_extF80_z_ui32_rx.o test_a_extF80_z_ui64_rx.o test_a_extF80_z_i32_rx.o test_a_extF80_z_i64_rx.o test_a_extF80_z_ui32_x.o test_a_extF80_z_ui64_x.o test_a_extF80_z_i32_x.o test_a_extF80_z_i64_x.o test_a_extF80_z_f16.o test_a_extF80_z_f32.o test_a_extF80_z_f64.o test_a_extF80_z_f128.o test_az_extF80.o test_az_extF80_rx.o test_abz_extF80.o test_ab_extF80_z_bool.o test_a_f128_z_ui32_rx.o test_a_f128_z_ui64_rx.o test_a_f128_z_i32_rx.o test_a_f128_z_i64_rx.o test_a_f128_z_ui32_x.o test_a_f128_z_ui64_x.o test_a_f128_z_i32_x.o test_a_f128_z_i64_x.o test_a_f128_z_f16.o test_a_f128_z_f32.o test_a_f128_z_f64.o test_a_f128_z_extF80.o test_az_f128.o test_az_f128_rx.o test_abz_f128.o test_abcz_f128.o test_ab_f128_z_bool.o
rm -f libsoftfloat.a && ar rcs libsoftfloat.a s_eq128.o s_le128.o s_lt128.o s_shortShiftLeft128.o s_shortShiftRight128.o s_shortShiftRightJam64.o s_shortShiftRightJam64Extra.o s_shortShiftRightJam128.o s_shortShiftRightJam128Extra.o s_shiftRightJam32.o s_shiftRightJam64.o s_shiftRightJam64Extra.o s_shiftRightJam128.o s_shiftRightJam128Extra.o s_shiftRightJam256M.o s_countLeadingZeros8.o s_countLeadingZeros16.o s_countLeadingZeros32.o s_countLeadingZeros64.o s_add128.o s_add256M.o s_sub128.o s_sub256M.o s_mul64ByShifted32To128.o s_mul64To128.o s_mul128By32.o s_mul128To256M.o s_approxRecip_1Ks.o s_approxRecip32_1.o s_approxRecipSqrt_1Ks.o s_approxRecipSqrt32_1.o s_roundToUI32.o s_roundToUI64.o s_roundToI32.o s_roundToI64.o s_normSubnormalF16Sig.o s_roundPackToF16.o s_normRoundPackToF16.o s_addMagsF16.o s_subMagsF16.o s_mulAddF16.o s_normSubnormalF32Sig.o s_roundPackToF32.o s_normRoundPackToF32.o s_addMagsF32.o s_subMagsF32.o s_mulAddF32.o s_normSubnormalF64Sig.o s_roundPackToF64.o s_normRoundPackToF64.o s_addMagsF64.o s_subMagsF64.o s_mulAddF64.o s_normSubnormalExtF80Sig.o s_roundPackToExtF80.o s_normRoundPackToExtF80.o s_addMagsExtF80.o s_subMagsExtF80.o s_normSubnormalF128Sig.o s_roundPackToF128.o s_normRoundPackToF128.o s_addMagsF128.o s_subMagsF128.o s_mulAddF128.o softfloat_state.o ui32_to_f16.o ui32_to_f32.o ui32_to_f64.o ui32_to_extF80.o ui32_to_extF80M.o ui32_to_f128.o ui32_to_f128M.o ui64_to_f16.o ui64_to_f32.o ui64_to_f64.o ui64_to_extF80.o ui64_to_extF80M.o ui64_to_f128.o ui64_to_f128M.o i32_to_f16.o i32_to_f32.o i32_to_f64.o i32_to_extF80.o i32_to_extF80M.o i32_to_f128.o i32_to_f128M.o i64_to_f16.o i64_to_f32.o i64_to_f64.o i64_to_extF80.o i64_to_extF80M.o i64_to_f128.o i64_to_f128M.o f16_to_ui32.o f16_to_ui64.o f16_to_i32.o f16_to_i64.o f16_to_ui32_r_minMag.o f16_to_ui64_r_minMag.o f16_to_i32_r_minMag.o f16_to_i64_r_minMag.o f16_to_f32.o f16_to_f64.o f16_to_extF80.o f16_to_extF80M.o f16_to_f128.o f16_to_f128M.o f16_roundToInt.o f16_add.o f16_sub.o f16_mul.o f16_mulAdd.o f16_div.o f16_rem.o f16_sqrt.o f16_eq.o f16_le.o f16_lt.o f16_eq_signaling.o f16_le_quiet.o f16_lt_quiet.o f16_isSignalingNaN.o f32_to_ui32.o f32_to_ui64.o f32_to_i32.o f32_to_i64.o f32_to_ui32_r_minMag.o f32_to_ui64_r_minMag.o f32_to_i32_r_minMag.o f32_to_i64_r_minMag.o f32_to_f16.o f32_to_f64.o f32_to_extF80.o f32_to_extF80M.o f32_to_f128.o f32_to_f128M.o f32_roundToInt.o f32_add.o f32_sub.o f32_mul.o f32_mulAdd.o f32_div.o f32_rem.o f32_sqrt.o f32_eq.o f32_le.o f32_lt.o f32_eq_signaling.o f32_le_quiet.o f32_lt_quiet.o f32_isSignalingNaN.o f64_to_ui32.o f64_to_ui64.o f64_to_i32.o f64_to_i64.o f64_to_ui32_r_minMag.o f64_to_ui64_r_minMag.o f64_to_i32_r_minMag.o f64_to_i64_r_minMag.o f64_to_f16.o f64_to_f32.o f64_to_extF80.o f64_to_extF80M.o f64_to_f128.o f64_to_f128M.o f64_roundToInt.o f64_add.o f64_sub.o f64_mul.o f64_mulAdd.o f64_div.o f64_rem.o f64_sqrt.o f64_eq.o f64_le.o f64_lt.o f64_eq_signaling.o f64_le_quiet.o f64_lt_quiet.o f64_isSignalingNaN.o extF80_to_ui32.o extF80_to_ui64.o extF80_to_i32.o extF80_to_i64.o extF80_to_ui32_r_minMag.o extF80_to_ui64_r_minMag.o extF80_to_i32_r_minMag.o extF80_to_i64_r_minMag.o extF80_to_f16.o extF80_to_f32.o extF80_to_f64.o extF80_to_f128.o extF80_roundToInt.o extF80_add.o extF80_sub.o extF80_mul.o extF80_div.o extF80_rem.o extF80_sqrt.o extF80_eq.o extF80_le.o extF80_lt.o extF80_eq_signaling.o extF80_le_quiet.o extF80_lt_quiet.o extF80_isSignalingNaN.o extF80M_to_ui32.o extF80M_to_ui64.o extF80M_to_i32.o extF80M_to_i64.o extF80M_to_ui32_r_minMag.o extF80M_to_ui64_r_minMag.o extF80M_to_i32_r_minMag.o extF80M_to_i64_r_minMag.o extF80M_to_f16.o extF80M_to_f32.o extF80M_to_f64.o extF80M_to_f128M.o extF80M_roundToInt.o extF80M_add.o extF80M_sub.o extF80M_mul.o extF80M_div.o extF80M_rem.o extF80M_sqrt.o extF80M_eq.o extF80M_le.o extF80M_lt.o extF80M_eq_signaling.o extF80M_le_quiet.o extF80M_lt_quiet.o f128_to_ui32.o f128_to_ui64.o f128_to_i32.o f128_to_i64.o f128_to_ui32_r_minMag.o f128_to_ui64_r_minMag.o f128_to_i32_r_minMag.o f128_to_i64_r_minMag.o f128_to_f16.o f128_to_f32.o f128_to_extF80.o f128_to_f64.o f128_roundToInt.o f128_add.o f128_sub.o f128_mul.o f128_mulAdd.o f128_div.o f128_rem.o f128_sqrt.o f128_eq.o f128_le.o f128_lt.o f128_eq_signaling.o f128_le_quiet.o f128_lt_quiet.o f128_isSignalingNaN.o f128M_to_ui32.o f128M_to_ui64.o f128M_to_i32.o f128M_to_i64.o f128M_to_ui32_r_minMag.o f128M_to_ui64_r_minMag.o f128M_to_i32_r_minMag.o f128M_to_i64_r_minMag.o f128M_to_f16.o f128M_to_f32.o f128M_to_extF80M.o f128M_to_f64.o f128M_roundToInt.o f128M_add.o f128M_sub.o f128M_mul.o f128M_mulAdd.o f128M_div.o f128M_rem.o f128M_sqrt.o f128M_eq.o f128M_le.o f128M_lt.o f128M_eq_signaling.o f128M_le_quiet.o f128M_lt_quiet.o softfloat_raiseFlags.o s_f16UIToCommonNaN.o s_commonNaNToF16UI.o s_propagateNaNF16UI.o s_f32UIToCommonNaN.o s_commonNaNToF32UI.o s_propagateNaNF32UI.o s_f64UIToCommonNaN.o s_commonNaNToF64UI.o s_propagateNaNF64UI.o extF80M_isSignalingNaN.o s_extF80UIToCommonNaN.o s_commonNaNToExtF80UI.o s_propagateNaNExtF80UI.o f128M_isSignalingNaN.o s_f128UIToCommonNaN.o s_commonNaNToF128UI.o s_propagateNaNF128UI.o
clang++ -g -Wl,--warn-common -fsanitize=undefined -fsanitize=address -Wl,-z,relro -Wl,-z,now -pie -m64 -fstack-protector-strong -o fp-test fp-test.o slowfloat.o softfloat.o libtestfloat.a libsoftfloat.a /tmp/qemu-test/build/libqemuutil.a -lm -lz -lgthread-2.0 -pthread -lglib-2.0 -lnettle -lgnutls -lzstd -lrt
/usr/bin/ld: /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors_vfork.S.o): warning: common of `__interception::real_vfork' overridden by definition from /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors.cpp.o)
make[1]: Leaving directory '/tmp/qemu-test/build/tests/fp'
Traceback (most recent call last):
File "./tests/docker/docker.py", line 669, in <module>
---
raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['sudo', '-n', 'docker', 'run', '--label', 'com.qemu.instance.uuid=f340f0c046334f1ebb40b6786d5d6d4e', '-u', '1003', '--security-opt', 'seccomp=unconfined', '--rm', '-e', 'TARGET_LIST=x86_64-softmmu', '-e', 'EXTRA_CONFIGURE_OPTS=', '-e', 'V=', '-e', 'J=14', '-e', 'DEBUG=', '-e', 'SHOW_ENV=', '-e', 'CCACHE_DIR=/var/tmp/ccache', '-v', '/home/patchew2/.cache/qemu-docker-ccache:/var/tmp/ccache:z', '-v', '/var/tmp/patchew-tester-tmp-sy5o9233/src/docker-src.2020-06-19-11.59.19.21547:/var/tmp/qemu:z,ro', 'qemu:fedora', '/var/tmp/qemu/run', 'test-debug']' returned non-zero exit status 2.
filter=--filter=label=com.qemu.instance.uuid=f340f0c046334f1ebb40b6786d5d6d4e
make[1]: *** [docker-run] Error 1
make[1]: Leaving directory `/var/tmp/patchew-tester-tmp-sy5o9233/src'
make: *** [docker-run-test-debug@fedora] Error 2
real 4m39.173s
user 0m7.572s
The full log is available at
http://patchew.org/logs/20200619153632.1365-1-ahmedkhaledkaraman@gmail.com/testing.asan/?type=message.
---
Email generated automatically by Patchew [https://patchew.org/].
Please send your feedback to patchew-devel@redhat.com
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v2 0/3] Add Scripts for Finding Top 25 Executed Functions
2020-06-19 15:36 [PATCH v2 0/3] Add Scripts for Finding Top 25 Executed Functions Ahmed Karaman
` (3 preceding siblings ...)
2020-06-19 16:04 ` [PATCH v2 0/3] Add Scripts for Finding Top 25 Executed Functions no-reply
@ 2020-06-20 9:14 ` Aleksandar Markovic
4 siblings, 0 replies; 9+ messages in thread
From: Aleksandar Markovic @ 2020-06-20 9:14 UTC (permalink / raw)
To: Ahmed Karaman
Cc: ldoktor@redhat.com, ehabkost@redhat.com, alex.bennee@linaro.org,
qemu-devel@nongnu.org, crosa@redhat.com, rth@twiddle.net
[-- Attachment #1: Type: text/plain, Size: 2069 bytes --]
петак, 19. јун 2020., Ahmed Karaman <ahmedkhaledkaraman@gmail.com> је
написао/ла:
> Greetings,
>
> This series implements the improvements and changes requested to be
> added to the two scripts.
>
> Thanks to Mr. Aleksandar Markovic, Mr. Alex Bennée, and Mr. Eric Blake
> for their valuable feedback.
>
> First version of the series:
> https://lists.nongnu.org/archive/html/qemu-devel/2020-06/msg04868.html
>
>
The cover letters for v2, v3,... should repeat the core text of the
original cover letter. You can keep this link above, but you must repeat
the almost all text of v1 cover letter in v2, v3,... too. Any version of
any series should be a stand-alone unit, and the reader should not be
forced to look at the previous versions to find out what the series is
really about, which is the case now for this v2 of your series.
Thanks,
Aleksandar
Best regards,
> Ahmed Karaman
>
> v1->v2:
> - Add an empty line at the end of the MAINTAINERS file.
> - Move MAINTAINERS patch to be the last in the series.
> - Allow custom number of top functions to be specified.
> - Check for vallgrind and perf before executing the scripts.
> - Ensure sufficient permissions when running the topN_perf script.
> - Use subprocess instead of os.system
> - Use os.unlink() for deleting intermediate files.
> - Spread out the data extraction steps.
> - Enable execution permission for the scripts.
> - Add script example output in the commit message.
>
> Ahmed Karaman (3):
> scripts/performance: Add topN_perf.py script
> scripts/performance: Add topN_callgrind.py script
> MAINTAINERS: Add 'Performance Tools and Tests' subsection
>
> MAINTAINERS | 7 ++
> scripts/performance/topN_callgrind.py | 131 ++++++++++++++++++++++++++
> scripts/performance/topN_perf.py | 115 ++++++++++++++++++++++
> 3 files changed, 253 insertions(+)
> create mode 100755 scripts/performance/topN_callgrind.py
> create mode 100755 scripts/performance/topN_perf.py
>
> --
> 2.17.1
>
>
[-- Attachment #2: Type: text/html, Size: 2685 bytes --]
^ permalink raw reply [flat|nested] 9+ messages in thread