From: Jan Michel Date: Thu, 24 Jul 2014 15:58:12 +0000 (+0200) Subject: dmon showing gbe data rate X-Git-Url: https://jspc29.x-matter.uni-frankfurt.de/git/?a=commitdiff_plain;h=42f05a80ca68f4ec2e1af6a4996e412920327f78;p=daqtools.git dmon showing gbe data rate --- diff --git a/dmon/code/Dmon.pm b/dmon/code/Dmon.pm index 8bfd4ce..be39057 100644 --- a/dmon/code/Dmon.pm +++ b/dmon/code/Dmon.pm @@ -3,7 +3,7 @@ use POSIX qw/floor ceil strftime/; use Data::Dumper; use warnings; use strict; - +use HADES::TrbNet; print STDERR "Script started at ".strftime("%d.%m.%y %H:%M:%S", localtime()).".\n"; @@ -15,12 +15,53 @@ print STDERR "Script started at ".strftime("%d.%m.%y %H:%M:%S", localtime()).".\ ############################################################################### use constant DMONDIR => "/dev/shm/dmon/"; -our $AcceleratorCycle = 7; -our $CTSAddress = 0x8000; - +############################################################################### +# Initializing file handles and TrbNet link +############################################################################### +sub StartUp { + my %config = do $ARGV[0]; + $config{flog} = OpenQAFile(); + trb_init_ports() or die trb_strerror(); + return %config; + } +############################################################################### +# Make Rates from register read +############################################################################### +my $OldValues; my $firstrun = 1; +sub MakeRate { + my ($pos,$width,$usets,$t) = @_; + my $res; + + foreach my $b (keys $t) { + for my $i (0..((scalar @{$t->{$b}{value}})-1)) { + my $value = $t->{$b}{value}[$i]||0; + $value = ($value>>$pos) & (2**$width-1); + my $diff = $value - ($OldValues->{$b}{value}[$i]||0); + $diff += 2**$width if $diff < 0; + my $tdiff = $t->{$b}{time}[$i] - ($OldValues->{$b}{time}[$i]||0); + $tdiff += 2**16 if $tdiff < 0; + my $rate = $diff; + $rate = $diff / (($tdiff*16E-6)||1) if $usets; + $res->{$b}{rate}[$i] = $rate; + $res->{$b}{value}[$i] = $value; + $res->{$b}{time}[$i] = $t->{$b}{time}[$i]; + $res->{$b}{tdiff}[$i] = $tdiff; + } + } + if (!$firstrun) { + $OldValues = $res; + return $res; + } + else { + $OldValues = $res; + $firstrun = 0; + return undef; + } + } + ############################################################################### # Make Title & Footer diff --git a/dmon/example_config.pl b/dmon/example_config.pl index aaf85ae..5b4823d 100644 --- a/dmon/example_config.pl +++ b/dmon/example_config.pl @@ -4,11 +4,12 @@ #Scripts to start & order of icons in the Overview activeScripts => [['time','-','-','-','daqop'], ['numfee','temperature','reftime','-','-'], - ['trgrate','-','-','-','-'], + ['trgrate','datarate','deadtime','-','-'], + ['-','-','-','-','-'], ['-','-','-','-','-'],], -#Names to be shown in left column of Overview -qaNames => ['system','main','trigger','-','-','-'], +#Names to be shown in left column of Overview (max 4 letters!) +qaNames => ['sys','main','rate','-','-','-'], #Expected number of FPGAs in system NumberOfFpga => 11, diff --git a/dmon/scripts/dmon_datarate.pl b/dmon/scripts/dmon_datarate.pl new file mode 100755 index 0000000..4d73348 --- /dev/null +++ b/dmon/scripts/dmon_datarate.pl @@ -0,0 +1,44 @@ +#!/usr/bin/perl -w + +use warnings; +use POSIX qw(strftime); +use FileHandle; +use lib "./code"; +use lib "../tools"; +use HADES::TrbNet; +use Time::HiRes qw(usleep); +use Dmon; +use Data::Dumper; + + +my %config = Dmon::StartUp(); + +my $old; +my $value, my $longtext, my $status; + + +while(1) { + my $errors = 0; + my $max = 0; my $min = 1E9; my $sum = 0; + my $r = trb_register_read(0xff7f,0x83b3); + if (defined $old) { + foreach my $c (keys %{$r}) { + next unless defined $r->{$c}; + my $s = $r->{$c} - $old->{$c}; + if ($s < 0) {$s += 2**32;} + if ($s > $max) {$max = $s;} + if ($s < $min) {$min = $s;} + $sum += $s; + } + + + my $title = "Data Rate"; + $value = Dmon::SciNotation($sum)."b/s"; + + my $longtext = "Total Data rate ".Dmon::SciNotation($sum)."b/s
Maximum per board: ".Dmon::SciNotation($max)."b/s"; + $status = Dmon::OK; + Dmon::WriteQALog($config{flog},"datarate",20,$status,$title,$value,$longtext); + } + $old = $r; + sleep 1; + } diff --git a/dmon/scripts/dmon_reftime.pl b/dmon/scripts/dmon_reftime.pl index db61483..8cda32b 100755 --- a/dmon/scripts/dmon_reftime.pl +++ b/dmon/scripts/dmon_reftime.pl @@ -35,7 +35,7 @@ while(1) { my $longtext = "Polarity of the reference time signals on TDCs seems to be: ".$value; if($errors && $lasterrors) { $status = Dmon::GetQAState('below',$errors,(0,1,4));} else { $status = Dmon::OK;} - Dmon::WriteQALog($flog,"reftime",10,$status,$title,$value,$longtext); + Dmon::WriteQALog($flog,"reftime",20,$status,$title,$value,$longtext); $lasterrors = $errors; sleep 10; } diff --git a/dmon/scripts/dmon_trgrate.pl b/dmon/scripts/dmon_trgrate.pl index e01e007..8a564dd 100755 --- a/dmon/scripts/dmon_trgrate.pl +++ b/dmon/scripts/dmon_trgrate.pl @@ -9,13 +9,12 @@ use HADES::TrbNet; use Time::HiRes qw(usleep); use Dmon; use HPlot; +use Data::Dumper; -my %config = do $ARGV[0]; -my $flog = Dmon::OpenQAFile(); +my %config = Dmon::StartUp(); -my $old; -my $summing = 0; +my $summing = 0; my $timesum = 0; my $cnt = 0; HPlot::PlotInit({ @@ -40,31 +39,27 @@ my $str = Dmon::MakeTitle(10,6,"TriggerRate",0); Dmon::WriteFile("TriggerRate",$str); while(1) { - trb_init_ports() or die trb_strerror(); + my $r = trb_registertime_read($config{CtsAddress},0xa002) ; + my $t = Dmon::MakeRate(0,32,1,$r); - while(1) { - my $r = trb_register_read($config{CtsAddress},0xa000); - my $value = $r->{$config{CtsAddress}}; - my $rate = ($value||0) - ($old||0); - $rate += 2**32 if $rate < 0; + if( defined $t) { + $summing += $t->{$config{CtsAddress}}{rate}[0]; + $timesum ++; - if( defined $old) { - $summing += $rate; - HPlot::PlotAdd('TriggerRate',$rate*5,0); - - unless($cnt++ % 10) { - my $title = "Rate"; - my $value = $summing/2; - my $longtext = $value." triggers pre second"; - my $status = Dmon::GetQAState('above',$value,(15,2,1)); - Dmon::WriteQALog($flog,"trgrate",5,$status,$title,$value,$longtext,'2-TriggerRate'); - - HPlot::PlotDraw('TriggerRate'); - $summing = 0; - } + HPlot::PlotAdd('TriggerRate',$t->{$config{CtsAddress}}{rate}[0],0); + + unless($cnt++ % 10) { + my $title = "Rate"; + my $value = int($summing/$timesum); + my $longtext = $value." triggers pre second"; + my $status = Dmon::GetQAState('above',$value,(15,2,1)); + Dmon::WriteQALog($config{flog},"trgrate",5,$status,$title,$value,$longtext,'2-TriggerRate'); + + HPlot::PlotDraw('TriggerRate'); + $summing = 0; + $timesum = 0; } - $old = $value; - usleep(200000); } - sleep 10; + usleep(200000); } +