gprofng: fix a problem with hardware event counters

Fix a bug where an experiment with hardware event counter data
causes the source and disassembly files not to be generated.
No longer suppress zero valued metrics and change the name
of the man page in a warning message. Adapt line lengths to
not exceed 79.

gprofng/ChangeLog
2024-09-24  Ruud van der Pas  <ruud.vanderpas@oracle.com>

	PR 32193
	PR 32199
	PR 32201
	* gp-display-html/gp-display-html.in: Implement all
	the above changes.
This commit is contained in:
Ruud van der Pas
2024-09-24 19:54:54 +00:00
committed by Vladimir Mezentsev
parent bcb92f7ba7
commit 63b5e37fbc

View File

@@ -197,7 +197,7 @@ my $thresh = 0;
$driver_cmd = "gprofng display html";
$tool_name = "gp-display-html";
#$binutils_version = "2.38.50";
$binutils_version = "BINUTILS_VERSION";
$binutils_version = "2.43.0";
$version_info = $tool_name . " GNU binutils version " . $binutils_version;
#------------------------------------------------------------------------------
@@ -908,7 +908,8 @@ sub main
#------------------------------------------------------------------------------
$outputdir = append_forward_slash ($outputdir);
gp_message ("debug", $subr_name, "prepared outputdir = $outputdir");
$msg = "prepared outputdir = ". $outputdir;
gp_message ("debug", $subr_name, $msg);
#------------------------------------------------------------------------------
#------------------------------------------------------------------------------
@@ -921,6 +922,13 @@ sub main
$detail_metrics_system = 'e.totalcpu:e.system';
$call_metrics = 'a.totalcpu';
$msg = "set detail_metrics_system = " . $detail_metrics_system;
gp_message ("debug", $subr_name, $msg);
$msg = "set detail_metrics = " . $detail_metrics;
gp_message ("debug", $subr_name, $msg);
$msg = "set call_metrics = " . $call_metrics;
gp_message ("debug", $subr_name, $msg);
my $cmd_options;
my $metrics_cmd;
@@ -1029,15 +1037,15 @@ sub main
$number_of_metrics = split (":", $summary_metrics);
$msg = "summary_metrics = " . $summary_metrics;
gp_message ("debugXL", $subr_name, $msg);
gp_message ("debugM", $subr_name, $msg);
$msg = "detail_metrics = " . $detail_metrics;
gp_message ("debugXL", $subr_name, $msg);
gp_message ("debugM", $subr_name, $msg);
$msg = "detail_metrics_system = " . $detail_metrics_system;
gp_message ("debugXL", $subr_name, $msg);
gp_message ("debugM", $subr_name, $msg);
$msg = "call_metrics = " . $call_metrics;
gp_message ("debugXL", $subr_name, $msg);
gp_message ("debugM", $subr_name, $msg);
$msg = "number_of_metrics = " . $number_of_metrics;
gp_message ("debugXL", $subr_name, $msg);
gp_message ("debugM", $subr_name, $msg);
#------------------------------------------------------------------------------
# TBD Find a way to better handle this situation:
@@ -1488,6 +1496,9 @@ sub check_and_define_cmds
{
$target_cmd = "(command -v $cmd; echo \$\?)";
$msg = "check target_cmd = " . $target_cmd;
gp_message ("debug", $subr_name, $msg);
($error_code, $output_cmd) = execute_system_cmd ($target_cmd);
if ($error_code != 0)
@@ -4098,8 +4109,7 @@ sub extract_info_from_map_xml
} #-- End of subroutine extract_info_from_map_xml
#------------------------------------------------------------------------------
# This routine analyzes the metric line and extracts the metric specifics
# from it.
# This routine analyzes the metric line and extracts the metric details.
# Example input: Exclusive Total CPU Time: e.%totalcpu
#------------------------------------------------------------------------------
sub extract_metric_specifics
@@ -4113,11 +4123,13 @@ sub extract_metric_specifics
my $metric_visibility;
my $metric_name;
my $metric_spec;
my $msg;
# Ruud if (($metric =~ /\s*(.*):\s+(\S)((\.\S+)|(\+\S+))/) && !($metric =~/^Current/)){
if (($metric_line =~ /\s*(.+):\s+([ei])([\.\+%]+)(\S*)/) and !($metric_line =~/^Current/))
{
gp_message ("debug", $subr_name, "line of interest: $metric_line");
$msg = "input line = " . $metric_line;
gp_message ("debug", $subr_name, $msg);
$metric_description = $1;
$metric_flavor = $2;
@@ -4153,6 +4165,17 @@ sub extract_metric_specifics
# $metric_spec =~ s/\%//;
# print "DB: after \$metric_spec = $metric_spec\n";
$msg = "on return: metric_spec = " . $metric_spec;
gp_message ("debugM", $subr_name, $msg);
$msg = "on return: metric_flavor = " . $metric_flavor;
gp_message ("debugM", $subr_name, $msg);
$msg = "on return: metric_visibility = " . $metric_visibility;
gp_message ("debugM", $subr_name, $msg);
$msg = "on return: metric_name = " . $metric_name;
gp_message ("debugM", $subr_name, $msg);
$msg = "on return: metric_description = " . $metric_description;
gp_message ("debugM", $subr_name, $msg);
return ($metric_spec, $metric_flavor, $metric_visibility,
$metric_name, $metric_description);
}
@@ -4402,7 +4425,7 @@ sub extract_option_value
$msg .= " in a future update";
gp_message ("warning", $subr_name, $msg);
$msg = "please check the man page of gp-display-html";
$msg = "please check the gprofng-display-html man page";
$msg .= " for more details";
gp_message ("warning", $subr_name, $msg);
$g_total_warning_count++;
@@ -7034,7 +7057,19 @@ sub generate_function_level_info
#------------------------------------------------------------------------------
print SCRIPT_PC "# outfile $outputdir"."gp-metrics-calls-PC\n";
print SCRIPT_PC "outfile $outputdir"."gp-metrics-calls-PC\n";
#------------------------------------------------------------------------------
# TBD: fix the situation that call_metrics is empty.
#------------------------------------------------------------------------------
if ($call_metrics ne "")
{
$script_pc_metrics = "address:$call_metrics";
}
else
{
$script_pc_metrics = "address";
$msg = "warning: call_metrics is empty - only address field printed";
gp_message ("debug", $subr_name, $msg);
}
print SCRIPT_PC "# metrics $script_pc_metrics\n";
print SCRIPT_PC "metrics $script_pc_metrics\n";
@@ -9106,6 +9141,7 @@ sub get_hot_functions
my $expr_name;
my $first_metric;
my $gp_display_text_cmd;
my $msg;
my $ignore_value;
my @sort_fields = ();
@@ -9123,6 +9159,15 @@ sub get_hot_functions
@sort_fields = split (":", $summary_metrics);
#-- RUUD
$msg = "summary_metrics = " . $summary_metrics;
gp_message ("debug", $subr_name, $msg);
for my $field (@sort_fields)
{
$msg = "metric field = " . $field;
gp_message ("debug", $subr_name, $msg);
}
#------------------------------------------------------------------------------
# This is extremely unlikely to happen, but if so, it is a fatal error.
#------------------------------------------------------------------------------
@@ -10469,7 +10514,7 @@ sub msg_display_text_failure
} #-- End of subroutine msg_display_text_failure
#------------------------------------------------------------------------------
# TBD.
# TBD. Still needed? I think this entire function and usage can be removed.
#------------------------------------------------------------------------------
sub name_regex
{
@@ -10479,16 +10524,21 @@ sub name_regex
my %metric_description = %{ $metric_description_ref };
my $msg;
my @splitted_metrics;
my $splitted_metrics;
my $m;
my $mf;
my $nf;
my $re;
my $re = "This value should never show up anywhere";
my $Xre;
my $noPCfile;
#------------------------------------------------------------------------------
# Make sure to check for these to have a value.
#------------------------------------------------------------------------------
my $noPCfile = undef;
my $reported_metrics = undef;
my @reported_metrics;
my $reported_metrics;
my $hdr_regex;
my $hdr_href_regex;
my $hdr_src_regex;
@@ -10606,6 +10656,16 @@ sub name_regex
#
# TBD: This should be done only once!
#------------------------------------------------------------------------------
if (not defined($reported_metrics))
{
$msg = "reported_metrics is not defined";
gp_message ("debug", $subr_name, $msg);
}
else
{
$msg = "reported_metrics = " . $reported_metrics;
gp_message ("debug", $subr_name, $msg);
@reported_metrics = split (":", $reported_metrics);
for my $i (@reported_metrics)
{
@@ -10651,6 +10711,7 @@ sub name_regex
$hdr_src_regex .= "(Attr\\.\.*)";next;
}
}
}
$hdr_regex .= "(Name\.*)";
$hdr_href_regex .= "(Name\.*)";
@@ -10659,6 +10720,16 @@ sub name_regex
$nf = scalar (@splitted_metrics);
gp_message ("debug", $subr_name,"number of fields in $metrics -> $nf");
if (not defined($noPCfile))
{
$msg = "noPCfile is not defined";
gp_message ("debug", $subr_name, $msg);
}
else
{
$msg = "noPCfile = " . $noPCfile;
gp_message ("debug", $subr_name, $msg);
open (ZMETRICS, ">", "$noPCfile.metrics")
or die ("Not able to open file $noPCfile.metrics for writing - '$!'");
gp_message ("debug", $subr_name, "$noPCfile - opened file $noPCfile.metrics for writing");
@@ -10752,6 +10823,7 @@ sub name_regex
gp_message ("debug", $subr_name, "wrote file $noPCfile.c.regex");
gp_message ("debugXL", $subr_name, "on return Xre = $Xre");
gp_message ("debugXL", $subr_name, "on return re = $re");
}
return ($re);
@@ -11388,7 +11460,7 @@ sub prepend_backslashes
} #-- End of subroutine prepend_backslashes
#------------------------------------------------------------------------------
# TBD
# TBD Still needed?
#------------------------------------------------------------------------------
sub preprocess_function_files
{
@@ -12467,6 +12539,7 @@ sub process_function_files
#------------------------------------------------------------------------------
# TBD: Name cleanup needed.
#------------------------------------------------------------------------------
my $msg;
my $number_of_metrics;
my $expr_name;
@@ -12669,7 +12742,11 @@ sub process_function_files
#------------------------------------------------------------------------------
# Strip the internal number from the address field.
#------------------------------------------------------------------------------
$msg = "address_field before regex = " . $address_field;
gp_message ("debugXL", $subr_name, $msg);
$address_field =~ s/$remove_number_regex//;
$msg = "address_field after regex = " . $address_field;
gp_message ("debugXL", $subr_name, $msg);
## $disfile = "file\.$routine_index\.dis";
$disfile = "file." . $routine_index . "." . $g_html_base_file_name{"disassembly"};
@@ -13553,6 +13630,13 @@ sub process_metrics_data
my $detail_metrics_system;
my $call_metrics;
#------------------------------------------------------------------------------
# The regex section.
#------------------------------------------------------------------------------
my $metrics_line_regex = '\s*(.*):\s+(\d+\.?\d*)';
my $metric_of_interest_1_regex = '^Exclusive\ *';
my $metric_of_interest_2_regex = '^Inclusive\ *';
if ($g_user_settings{"default_metrics"}{"current_value"} eq "off")
{
$msg = "g_user_settings{default_metrics}{current_value} = ";
@@ -13575,27 +13659,24 @@ sub process_metrics_data
gp_message ("debug", $subr_name, "opened $outfile2 to parse metric value data");
#------------------------------------------------------------------------------
# Below an example of the file that has just been opened. The lines I marked
# with a * has been wrapped by my for readability. This is not the case in the
# file, but makes for a really long line.
#
# Also, the data comes from one PC experiment and two HWC experiments.
# Below an example of the file that has just been opened.
#------------------------------------------------------------------------------
# <Total>
# Exclusive Total CPU Time: 32.473 (100.0%)
# Inclusive Total CPU Time: 32.473 (100.0%)
# Exclusive CPU Cycles: 23.586 (100.0%)
# " count: 47054706905
# Inclusive CPU Cycles: 23.586 (100.0%)
# " count: 47054706905
# Exclusive Instructions Executed: 54417033412 (100.0%)
# Inclusive Instructions Executed: 54417033412 (100.0%)
# Exclusive Last-Level Cache Misses: 252730685 (100.0%)
# Inclusive Last-Level Cache Misses: 252730685 (100.0%)
# * Exclusive Instructions Per Cycle: Inclusive Instructions Per Cycle:
# * Exclusive Cycles Per Instruction:
# * Inclusive Cycles Per Instruction:
# * Size: 0
# Exclusive Total CPU Time: 3.232 (100.0%)
# Inclusive Total CPU Time: 3.232 (100.0%)
# Exclusive insts Events: 7628146366 (100.0%)
# Inclusive insts Events: 7628146366 (100.0%)
# Exclusive cycles Events: 5167454376 (100.0%)
# Inclusive cycles Events: 5167454376 (100.0%)
# Exclusive dTLB-load-misses Events: 0 ( 0. %)
# Inclusive dTLB-load-misses Events: 0 ( 0. %)
# Exclusive Instructions Per Cycle: 1.476
# Inclusive Instructions Per Cycle: 1.476
# Exclusive Cycles Per Instruction: 0.677
# Inclusive Cycles Per Instruction: 0.677
# Exclusive branch-instructions Events: 1268741580 (100.0%)
# Inclusive branch-instructions Events: 1268741580 (100.0%)
# Size: 0
# PC Address: 1:0x00000000
# Source File: (unknown)
# Object File: (unknown)
@@ -13607,72 +13688,74 @@ sub process_metrics_data
while (<METRICTOTALS>)
{
$metricdata = $_; chomp ($metricdata);
gp_message ("debug", $subr_name, "file metrictotals: $metricdata");
$msg = "file metrictotals: input line = " . $metricdata;
gp_message ("debug", $subr_name, $msg);
#------------------------------------------------------------------------------
# Ignoring whitespace, search for any line with a ":" in it, followed by
# a number with or without a dot. So, an integer or floating-point number.
# a number with, or without, a dot. So, an integer or floating-point number.
#------------------------------------------------------------------------------
if ($metricdata =~ /\s*(.*):\s+(\d+\.*\d*)/)
if ($metricdata =~ /$metrics_line_regex/)
{
$msg = "selected input line for processing";
gp_message ("debug", $subr_name, $msg);
if (defined($1) and defined($2))
{
gp_message ("debug", $subr_name, " candidate => $metricdata");
$metric = $1;
$value = $2;
if ( ($metric eq "PC Address") or ($metric eq "Size"))
$msg = "metric = " . $metric;
gp_message ("debug", $subr_name, $msg);
$msg = "value = " . $value;
gp_message ("debug", $subr_name, $msg);
}
else
{
gp_message ("debug", $subr_name, " skipped => $metric $value");
$msg = "unexpected input in " . $metricdata;
gp_message ("assertion", $subr_name, $msg);
}
#------------------------------------------------------------------------------
# Select the metrics of interest.
#------------------------------------------------------------------------------
if (($metric =~ /$metric_of_interest_1_regex/) or
($metric =~ /$metric_of_interest_2_regex/) )
{
$msg = "metric of interest = " . $metric;
$msg .= " - proceed with processing";
gp_message ("debug", $subr_name, $msg);
}
else
{
$msg = "metric = " . $metric;
$msg .= " - ignored and further processing is skipped";
gp_message ("debug", $subr_name, $msg);
next;
}
gp_message ("debug", $subr_name, " proceed => $metric $value");
#------------------------------------------------------------------------------
# When we get here, it means that this is a metric we want to process.
#------------------------------------------------------------------------------
#------------------------------------------------------------------------------
# TBD - Still needed? Don't see it in the input anymore (?)
#------------------------------------------------------------------------------
if ($metric eq '" count')
#------------------------------------------------------------------------------
# Hardware counter experiments have this info. Note that this line is not the
# first one to be encountered, so $last_metric has been defined already.
#------------------------------------------------------------------------------
{
$metric = $last_metric." Count"; # we presume .......
gp_message ("debug", $subr_name, "last_metric = $last_metric metric = $metric");
}
$i=index ($metricdata,":");
$r=rindex ($metricdata,":");
gp_message ("debug", $subr_name, "metricdata = $metricdata => i = $i r = $r");
if ($i == $r)
{
if ($value > 0) # Not interested in metrics contributing zero
{
$metric_value{$metric} = $value;
gp_message ("debug", $subr_name, "archived metric_value{$metric} = $metric_value{$metric}");
# e.g. $metric_value{Exclusive Total Thread Time} = 302.562
# e.g. $metric_value{Exclusive Instructions Executed} = 2415126222484
}
}
else
#------------------------------------------------------------------------------
# TBD This code deals with an old bug and may be removed.
#------------------------------------------------------------------------------
{ # er_print bug - e.g.
# Exclusive Instructions Per Cycle: Inclusive Instructions Per Cycle: Exclusive Cycles Per Instruction: Inclusive Cycles Per Instruction: Exclusive OpenMP Work Time: 162.284 (100.0%)
gp_message ("debug", $subr_name, "metrictotals odd line:->$metricdata<-");
$r=rindex ($metricdata,":",$r-1);
if ($r == -1)
{ # ignore
gp_message ("debug", $subr_name, "metrictotals odd line ignored<-");
$last_metric = "foo";
next;
}
my ($good_part)=substr ($metricdata,$r+1);
if ($good_part =~ /\s*(.*):\s+(\d+\.*\d*)/)
{
$metric = $1;
$value = $2;
if ($value>0) # Not interested in metrics contributing zero
{
$metric_value{$metric} = $value;
$msg = "metrictotals odd line rescued '$metric'=$value";
$metric = $last_metric . " Count";
$msg = "last_metric = $last_metric metric = $metric";
gp_message ("debug", $subr_name, $msg);
}
}
}
$metric_value{$metric} = $value;
$msg = "archived: metric_value{$metric} = " .
$metric_value{$metric};
gp_message ("debug", $subr_name, $msg);
#------------------------------------------------------------------------------
# Preserve the current metric.
#------------------------------------------------------------------------------
@@ -13684,19 +13767,25 @@ sub process_metrics_data
if (scalar (keys %metric_value) == 0)
#------------------------------------------------------------------------------
# If we have no metrics > 0, fudge a "Exclusive Total CPU Time", else we
# blow up later.
#
# TBD: See if this can be handled differently.
# This means that there are no metrics in the input file. That is a fatal
# error and execution is terminated.
#------------------------------------------------------------------------------
{
$metric_value{"Exclusive Total CPU Time"} = 0;
gp_message ("debug", $subr_name, "no metrics found and a stub was added");
$msg = "no metrics have been found in the input file";
gp_message ("assertion", $subr_name, $msg);
}
else
#------------------------------------------------------------------------------
# All is well. Print the metrics that have been found.
#------------------------------------------------------------------------------
{
$msg = "stored the following metrics and values:";
gp_message ("debug", $subr_name, $msg);
for my $metric (sort keys %metric_value)
{
gp_message ("debug", $subr_name, "Stored metric_value{$metric} = $metric_value{$metric}");
$msg = "metric_value{$metric} = " . $metric_value{$metric};
gp_message ("debug", $subr_name, $msg);
}
}
gp_message ("debug", $subr_name, "proceed to process file $outfile1");
@@ -13740,7 +13829,7 @@ sub process_metrics_data
$metric_line = $_;
chomp ($metric_line);
gp_message ("debug", $subr_name, "processing line $metric_line");
gp_message ("debug", $subr_name, "processing line: $metric_line");
#------------------------------------------------------------------------------
# The original regex has bugs because the line should not be allowed to start
# with a ":". So this is wrong:
@@ -13759,26 +13848,35 @@ sub process_metrics_data
#------------------------------------------------------------------------------
# Ruud if (($metric =~ /\s*(.*):\s+(\S)((\.\S+)|(\+\S+))/) && !($metric =~/^Current/)){
($metric_spec, $metric_flavor, $metric_visibility, $metric_name, $metric_text) =
($metric_spec, $metric_flavor, $metric_visibility, $metric_name,
$metric_text) =
extract_metric_specifics ($metric_line);
# if (($metric_line =~ /\s*(.+):\s+([ei])([\.\+%]+)(\S*)/) and !($metric_line =~/^Current/))
if ($metric_spec eq "skipped")
{
gp_message ("debug", $subr_name, "skipped line: $metric_line");
$msg = "skipped processing line: " . $metric_line;
gp_message ("debug", $subr_name, $msg);
next
}
else
{
gp_message ("debug", $subr_name, "line of interest: $metric_line");
$msg = "line of interest: " . $metric_line;
gp_message ("debug", $subr_name, $msg);
$metric_found{$metric_spec} = 1;
$metric_found{$metric_spec} = $TRUE;
#------------------------------------------------------------------------------
# TBD
# Currently always FALSE since this feature has not been fully implemented yet.
#------------------------------------------------------------------------------
if ($g_user_settings{"ignore_metrics"}{"defined"})
{
gp_message ("debug", $subr_name, "check for $metric_spec");
if (exists ($ignored_metrics{$metric_name}))
{
gp_message ("debug", $subr_name, "user asked to ignore metric $metric_name");
$msg = "user asked to ignore metric " . $metric_name;
gp_message ("debug", $subr_name, $msg);
$msg = "further processing of line of interest is skipped";
gp_message ("debug", $subr_name, $msg);
next;
}
}
@@ -13789,83 +13887,74 @@ sub process_metrics_data
$metric_description{$metric_spec} = $metric_text;
# TBD: add for other visibilities too, like +
gp_message ("debug", $subr_name, "stored $metric_description{$metric_spec} = $metric_description{$metric_spec}");
$msg = "stored metric_description{$metric_spec} = ";
$msg .= $metric_description{$metric_spec};
gp_message ("debug", $subr_name, $msg);
if ($metric_flavor ne "e")
{
gp_message ("debug", $subr_name, "metric $metric_spec is ignored");
$msg = "metric $metric_spec is ignored";
gp_message ("debug", $subr_name, $msg);
$msg = "further processing of this line is skipped";
gp_message ("debug", $subr_name, $msg);
}
else
#------------------------------------------------------------------------------
# Only the exclusive metrics are shown.
#------------------------------------------------------------------------------
{
gp_message ("debug", $subr_name, "metric $metric_spec ($metric_text) is considered");
$msg = "metric $metric_spec ($metric_text) is considered";
gp_message ("debug", $subr_name, $msg);
#------------------------------------------------------------------------------
# Legacy metrics, but may re-appear one day and so the code is left in here.
#------------------------------------------------------------------------------
if ($metric_spec =~ /user/)
{
$user_metrics = $TRUE;
gp_message ("debug", $subr_name, "m: user_metrics set to TRUE");
$msg = "user_metrics set to TRUE";
gp_message ("debug", $subr_name, $msg);
}
elsif ($metric_spec =~ /system/)
{
$system_metrics = $TRUE;
gp_message ("debug", $subr_name, "m: system_metrics set to TRUE");
$msg = "system_metrics set to TRUE";
gp_message ("debug", $subr_name, $msg);
}
elsif ($metric_spec =~ /wall/)
{
$wall_metrics = $TRUE;
gp_message ("debug", $subr_name, "m: wall_metrics set to TRUE");
}
#------------------------------------------------------------------------------
# TBD I don't see why these need to be skipped. Also, should be totalcpu.
#------------------------------------------------------------------------------
elsif (($metric_spec =~ /^e\.total$/) or ($metric_spec =~/^e\.total_cpu$/))
{
# skip total thread time and total CPU time
gp_message ("debug", $subr_name, "m: skip above");
$msg = "wall_metrics set to TRUE";
gp_message ("debug", $subr_name, $msg);
}
elsif (defined ($metric_value{$metric_text}))
{
gp_message ("debug", $subr_name, "Total attributed to this metric metric_value{$metric_text} = $metric_value{$metric_text}");
$msg = "total attributed to this metric ";
$msg .= "metric_value{" . $metric_text . "} = ";
$msg .= $metric_value{$metric_text};
gp_message ("debug", $subr_name, $msg);
if ($summary_metrics ne '')
{
$summary_metrics = $summary_metrics.':'.$metric_spec;
gp_message ("debug", $subr_name, "updated summary_metrics = $summary_metrics - 1");
if ($metric_spec !~ /\.wait$|\.ulock$|\.text$|\.data$|\.owait$|total$|mpiwork$|mpiwait$|ompwork$|ompwait$/)
{
$detail_metrics = $detail_metrics.':'.$metric_spec;
gp_message ("debug", $subr_name, "updated m:detail_metrics=$detail_metrics - 1");
$detail_metrics_system = $detail_metrics_system.':'.$metric_spec;
gp_message ("debug", $subr_name, "updated m:detail_metrics_system=$detail_metrics_system - 1");
}
else
{
gp_message ("debug", $subr_name, "m: no want above metric for detail_metrics or detail_metrics_system");
}
$summary_metrics .= ':' . $metric_spec;
$msg = "updated summary_metrics = " . $summary_metrics;
gp_message ("debug", $subr_name, $msg);
}
else
{
$summary_metrics = $metric_spec;
gp_message ("debug", $subr_name, "initialized summary_metrics = $summary_metrics - 2");
if ($metric_spec !~ /\.wait$|\.ulock$|\.text$|\.data$|\.owait$|total$|mpiwork$|mpiwait$|ompwork$|ompwait$/)
{
$detail_metrics = $metric_spec;
gp_message ("debug", $subr_name, "m:detail_metrics=$detail_metrics - 2");
$detail_metrics_system = $metric_spec;
gp_message ("debug", $subr_name, "m:detail_metrics_system=$detail_metrics_system - 2");
}
else
{
gp_message ("debug", $subr_name, "m: no want above metric for detail_metrics or detail_metrics_system");
}
$msg = "initialized summary_metrics = " . $summary_metrics;
gp_message ("debug", $subr_name, $msg);
}
gp_message ("debug", $subr_name, "metric $metric_spec added");
}
else
{
gp_message ("debug", $subr_name, "m: no want above metric was a 0 total");
}
#------------------------------------------------------------------------------
# TBD: This doesn't seem to make much sense.
#------------------------------------------------------------------------------
$msg = "no action taken for " . $metric_spec;
gp_message ("debug", $subr_name, $msg);
}
}
}
@@ -13874,21 +13963,32 @@ sub process_metrics_data
if ($wall_metrics > 0)
{
gp_message ("debug", $subr_name,"m:wall_metrics set adding to summary_metrics");
$msg = "adding e.wall to summary_metrics";
gp_message ("debug", $subr_name, $msg);
$summary_metrics = "e.wall:".$summary_metrics;
gp_message ("debug", $subr_name,"m:summary_metrics=$summary_metrics - 3");
$msg = "after update summary_metrics = " . $summary_metrics;
gp_message ("debug", $subr_name, $msg);
}
if ($system_metrics > 0)
{
gp_message ("debug", $subr_name,"m:system_metrics set adding to summary_metrics,call_metrics and detail_metrics_system");
$summary_metrics = "e.system:".$summary_metrics;
$call_metrics = "i.system:".$call_metrics;
$detail_metrics_system ='e.system:'.$detail_metrics_system;
$msg = "adding e.system to summary_metrics and detail_metrics_system";
gp_message ("debug", $subr_name, $msg);
gp_message ("debug", $subr_name,"m:summary_metrics=$summary_metrics - 4");
gp_message ("debug", $subr_name,"m:call_metrics=$call_metrics");
gp_message ("debug", $subr_name,"m:detail_metrics_system=$detail_metrics_system - 3");
$summary_metrics = "e.system:" . $summary_metrics;
$detail_metrics_system = "e.system:" . $detail_metrics_system;
$msg = "adding i.system to call_metrics";
gp_message ("debug", $subr_name, $msg);
$call_metrics = "i.system:" . $call_metrics;
$msg = "after update summary_metrics = " . $summary_metrics;
gp_message ("debug", $subr_name, $msg);
$msg = "after update call_metrics = " . $call_metrics;
gp_message ("debug", $subr_name, $msg);
$msg = "after update detail_metrics_system = " . $detail_metrics_system;
gp_message ("debug", $subr_name, $msg);
}
@@ -13898,7 +13998,6 @@ sub process_metrics_data
if ($user_metrics > 0)
{
gp_message ("debug", $subr_name,"m:user_metrics set adding to summary_metrics,detail_metrics,detail_metrics_system and call_metrics");
# Ruud if (!exists ($IMETRICS{"i.user"})){
if ($g_user_settings{"ignore_metrics"}{"defined"} and exists ($ignored_metrics{"user"}))
{
@@ -13908,14 +14007,12 @@ sub process_metrics_data
{
$summary_metrics = "e.user:i.user:".$summary_metrics;
}
$detail_metrics = "e.user:".$detail_metrics;
$detail_metrics_system = "e.user:".$detail_metrics_system;
gp_message ("debug", $subr_name,"m:summary_metrics=$summary_metrics - 5");
gp_message ("debug", $subr_name,"m:detail_metrics=$detail_metrics - 3");
gp_message ("debug", $subr_name,"m:detail_metrics_system=$detail_metrics_system - 4");
if ($g_user_settings{"ignore_metrics"}{"defined"} and exists ($ignored_metrics{"user"}))
if ($g_user_settings{"ignore_metrics"}{"defined"} and
exists ($ignored_metrics{"user"}))
{
$call_metrics = "a.user:".$call_metrics;
}
@@ -13923,28 +14020,47 @@ sub process_metrics_data
{
$call_metrics = "a.user:i.user:".$call_metrics;
}
gp_message ("debug", $subr_name,"m:call_metrics=$call_metrics - 2");
$msg = "updated summary_metrics = " . $summary_metrics;
gp_message ("debug", $subr_name, $msg);
$msg = "updated detail_metrics = " . $detail_metrics;
gp_message ("debug", $subr_name, $msg);
$msg = "updated detail_metrics_system = " . $detail_metrics_system;
gp_message ("debug", $subr_name, $msg);
$msg = "updated call_metrics = " . $call_metrics;
gp_message ("debug", $subr_name, $msg);
}
#------------------------------------------------------------------------------
# TBD
# It doesn't look right in case call_metrics ends up being set to ""
#------------------------------------------------------------------------------
if ($call_metrics eq "")
{
$call_metrics = $detail_metrics;
gp_message ("debug", $subr_name,"m:call_metrics is not set, setting it to detail_metrics ");
gp_message ("debug", $subr_name,"m:call_metrics=$call_metrics - 3");
$msg = "call_metrics is not set, setting it to " . $call_metrics;
gp_message ("debug", $subr_name, $msg);
if ($detail_metrics eq '')
{
$msg = "detail_metrics and call_metrics are blank and could";
$msg .= " cause trouble later on";
gp_message ("debug", $subr_name, $msg);
}
}
for my $metric (sort keys %ignored_metrics)
{
if ($ignored_metrics{$metric})
{
gp_message ("debug", $subr_name, "active metric, but ignored: $metric");
$msg = "active metric, but ignored: " . $metric;
gp_message ("debug", $subr_name, $msg);
}
}
return (\%metric_value, \%metric_description, \%metric_found, $user_metrics, $system_metrics, $wall_metrics,
$summary_metrics, $detail_metrics, $detail_metrics_system, $call_metrics);
return (\%metric_value, \%metric_description, \%metric_found, $user_metrics,
$system_metrics, $wall_metrics, $summary_metrics, $detail_metrics,
$detail_metrics_system, $call_metrics);
} #-- End of subroutine process_metrics_data