From 2560fc867f6424a0e02059a7147800cd44eec68e Mon Sep 17 00:00:00 2001 From: Wilson Snyder Date: Sat, 2 Oct 2021 11:10:43 -0400 Subject: [PATCH] verilator_gantt: Fix reading broken /cpu/procinfo reports --- bin/verilator_gantt | 18 ++++++----- test_regress/t/t_gantt_io_arm.dat | 53 +++++++++++++++++++++++++++++++ test_regress/t/t_gantt_io_arm.out | 37 +++++++++++++++++++++ test_regress/t/t_gantt_io_arm.pl | 20 ++++++++++++ 4 files changed, 120 insertions(+), 8 deletions(-) create mode 100644 test_regress/t/t_gantt_io_arm.dat create mode 100644 test_regress/t/t_gantt_io_arm.out create mode 100755 test_regress/t/t_gantt_io_arm.pl diff --git a/bin/verilator_gantt b/bin/verilator_gantt index 1a3e07884..17d90e8e4 100755 --- a/bin/verilator_gantt +++ b/bin/verilator_gantt @@ -271,16 +271,18 @@ def report_cpus(): socket = None if cpu in Global['cpuinfo']: - socket = int(Global['cpuinfo'][cpu]['physical_id']) - Global['cpu_sockets'][socket] += 1 - print(" socket=%d" % socket, end='') + cpuinfo = Global['cpuinfo'][cpu] + if 'physical_id' in cpuinfo and 'core_id' in cpuinfo: + socket = int(cpuinfo['physical_id']) + Global['cpu_sockets'][socket] += 1 + print(" socket=%d" % socket, end='') - core = int(Global['cpuinfo'][cpu]['core_id']) - Global['cpu_socket_cores'][str(socket) + "__" + str(core)] += 1 - print(" core=%d" % core, end='') + core = int(cpuinfo['core_id']) + Global['cpu_socket_cores'][str(socket) + "__" + str(core)] += 1 + print(" core=%d" % core, end='') - model = Global['cpuinfo'][cpu]['model_name'] - if model: + if 'model_name' in cpuinfo: + model = cpuinfo['model_name'] print(" %s" % model, end='') print() diff --git a/test_regress/t/t_gantt_io_arm.dat b/test_regress/t/t_gantt_io_arm.dat new file mode 100644 index 000000000..33846b417 --- /dev/null +++ b/test_regress/t/t_gantt_io_arm.dat @@ -0,0 +1,53 @@ +VLPROFTHREAD 1.1 # Verilator thread profile dump version 1.1 +VLPROF arg --threads 4 +VLPROF arg +verilator+prof+threads+start+1 +VLPROF arg +verilator+prof+threads+window+2 +VLPROF stat yields 51 +VLPROFPROC processor : 0 +VLPROFPROC model name : Phytium,FT-2500/128 +VLPROFPROC BogoMIPS : 100.00 +VLPROFPROC Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid +VLPROFPROC CPU implementer : 0x70 +VLPROFPROC CPU architecture: 8 +VLPROFPROC CPU variant : 0x1 +VLPROFPROC CPU part : 0x663 +VLPROFPROC CPU revision : 3 +VLPROFPROC +VLPROFPROC processor : 1 +VLPROFPROC model name : Phytium,FT-2500/128 +VLPROFPROC BogoMIPS : 100.00 +VLPROFPROC Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid +VLPROFPROC CPU implementer : 0x70 +VLPROFPROC CPU architecture: 8 +VLPROFPROC CPU variant : 0x1 +VLPROFPROC CPU part : 0x663 +VLPROFPROC CPU revision : 3 +VLPROFPROC +VLPROFPROC processor : 2 +VLPROFPROC model name : Phytium,FT-2500/128 +VLPROFPROC BogoMIPS : 100.00 +VLPROFPROC Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid +VLPROFPROC CPU implementer : 0x70 +VLPROFPROC CPU architecture: 8 +VLPROFPROC CPU variant : 0x1 +VLPROFPROC CPU part : 0x663 +VLPROFPROC CPU revision : 3 +VLPROFPROC +VLPROFPROC processor : 3 +VLPROFPROC model name : Phytium,FT-2500/128 +VLPROFPROC BogoMIPS : 100.00 +VLPROFPROC Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid +VLPROFPROC CPU implementer : 0x70 +VLPROFPROC CPU architecture: 8 +VLPROFPROC CPU variant : 0x1 +VLPROFPROC CPU part : 0x663 +VLPROFPROC CPU revision : 3 +VLPROFPROC +VLPROF eval start 57709 elapsed 1745979 cpu 2 on thread 1 +VLPROF eval_loop start 58532 elapsed 1744353 cpu 2 on thread 1 +VLPROF mtask 85 start 90465 elapsed 64569 predict_start 14315 predict_cost 30533 cpu 2 on thread 1 +VLPROF mtask 79 start 156555 elapsed 137754 predict_start 44848 predict_cost 48001 cpu 2 on thread 1 +VLPROF mtask 90 start 77352 elapsed 1159 predict_start 14315 predict_cost 21592 cpu 3 on thread 2 +VLPROF mtask 81 start 79799 elapsed 868 predict_start 35907 predict_cost 29215 cpu 3 on thread 2 +VLPROF mtask 87 start 81746 elapsed 887 predict_start 65147 predict_cost 33809 cpu 3 on thread 2 +VLPROF stat ticks 180832 diff --git a/test_regress/t/t_gantt_io_arm.out b/test_regress/t/t_gantt_io_arm.out new file mode 100644 index 000000000..d2be5b08e --- /dev/null +++ b/test_regress/t/t_gantt_io_arm.out @@ -0,0 +1,37 @@ +Verilator Gantt report + +Argument settings: + +verilator+prof+threads+start+1 + +verilator+prof+threads+window+2 + --threads 4 + +Analysis: + Total threads = 2 + Total mtasks = 5 + Total cpus used = 2 + Total yields = 51 + Total evals = 1 + Total eval loops = 1 + Total eval time = 294309 rdtsc ticks + Longest mtask time = 137754 rdtsc ticks + All-thread mtask time = 205237 rdtsc ticks + Longest-thread efficiency = 46.8% + All-thread efficiency = 34.9% + All-thread speedup = 0.7 + +Prediction (what Verilator used for scheduling): + All-thread efficiency = 82.4% + All-thread speedup = 1.6 + +Statistics: + min log(p2e) = -1.054 from mtask 79 (predict 48001, elapsed 137754) + max log(p2e) = 3.641 from mtask 87 (predict 33809, elapsed 887) + mean = 1.656 + stddev = 2.104 + e ^ stddev = 8.200 + +CPUs: + cpu 2: cpu_time=202323 Phytium,FT-2500/128 + cpu 3: cpu_time=2914 Phytium,FT-2500/128 + +Writing profile_threads.vcd diff --git a/test_regress/t/t_gantt_io_arm.pl b/test_regress/t/t_gantt_io_arm.pl new file mode 100755 index 000000000..7eac146d9 --- /dev/null +++ b/test_regress/t/t_gantt_io_arm.pl @@ -0,0 +1,20 @@ +#!/usr/bin/env perl +if (!$::Driver) { use FindBin; exec("$FindBin::Bin/bootstrap.pl", @ARGV, $0); die; } +# DESCRIPTION: Verilator: Verilog Test driver/expect definition +# +# Copyright 2003 by Wilson Snyder. This program is free software; you +# can redistribute it and/or modify it under the terms of either the GNU +# Lesser General Public License Version 3 or the Perl Artistic License +# Version 2.0. +# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0 + +scenarios(dist => 1); + +run(cmd => ["cd $Self->{obj_dir} && $ENV{VERILATOR_ROOT}/bin/verilator_gantt" + . " $Self->{t_dir}/$Self->{name}.dat > gantt.log"], + check_finished => 0); + +files_identical("$Self->{obj_dir}/gantt.log", $Self->{golden_filename}); + +ok(1); +1;