Added quantiling UDAFs
[com/gs-lite.git] / bin / monitor_gs.pl
index e42eb85..7fd96f4 100755 (executable)
-#! /usr/bin/perl
-
-# ------------------------------------------------
-#   Copyright 2014 AT&T Intellectual Property
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-# -------------------------------------------
-
-use English;
-
-$interval = 10;
-$to_tty = 0;
-if(scalar(@ARGV)>0){
-       if(int($ARGV[0])>0){
-               $interval = int($ARGV[0]);
-       }else{
-               if($ARGV[0] eq '-'){
-                       $to_tty = 1;
-               }else{
-                       print STDERR "Argument 1 ($ARGV[0]) ignored.\n";
-               }       
-       }
-}
-if(scalar(@ARGV)>1){
-       if(int($ARGV[1])>0){
-               $interval = int($ARGV[1]);
-       }else{
-               if($ARGV[1] eq '-'){
-                       $to_tty = 1;
-               }else{
-                       print STDERR "Argument 2 ($ARGV[1]) ignored.\n";
-               }       
-       }
-}
-if(scalar(@ARGV)>2){
-       print STDERR "Only 2 arguments accepted, additional args ignored.\n";
-}
-
-open O, ">resource_log.csv" or die "Can't open resource_log.csv\n";
-
-
-
-# get the page size
-open I,"getconf PAGESIZE |";
-$line=<I>;
-chomp($line);
-$pagesize = int($line);
-close(I);
-
-
-$effective_uid = $REAL_USER_ID;
-$ps_cmd = "ps -U $effective_uid |";
-
-%hfta_pid=();
-
-open P,$ps_cmd;
-while($line=<P>){
-       chomp($line);
-       $line =~ s/^\s+//;
-       @flds = split /\s+/,$line;
-       if($flds[3] =~ /rts/){
-               push @rts_pids,int($flds[0]);
-       }
-       if($flds[3] =~ /hfta_(\d+)/){
-               $hfta_pid{$1} = int($flds[0]);
-       }
-}
-
-$rts_pids = sort {$a<=>$b} @rts_pids;
-
-$now=time();
-print O "START monitoring at time $now\n";
-print O "ts,proc,pid,utime,stime,vm_size,rss,pagesize\n";
-if(to_tty){
-       print "START monitoring at time $now\n";
-       print "ts,proc,pid,utime,stime,vm_size,rss,pagesize\n";
-}
-#print "RTS PIDs:\n";
-#foreach $p (@rts_pids){
-#      print "$p ";
-#}
-#print "\nHFTA PIDs:\n";
-#  foreach $h (sort {$a<=>$b} keys(%hfta_pid)){
-#      print "($h,",$hfta_pid{$h},") ";
-#}
-#print "\n";
-
-while(1){
-       $now=time();
-       foreach $p (@rts_pids){
-               get_proc_stats($p);
-               print O "$now,rts,$p,$user_time,$sys_time,$vm_size,$resident_set_size,$pagesize\n";
-               if(to_tty){
-                       print "$now,rts,$p,$user_time,$sys_time,$vm_size,$resident_set_size,$pagesize\n";
-               }
-       }
-       foreach $h (sort {$a<=>$b} keys(%hfta_pid)){
-               $p=$hfta_pid{$h};
-               get_proc_stats($p);
-               print O "$now,hfta_$h,$p,$user_time,$sys_time,$vm_size,$resident_set_size,$pagesize\n";
-               if(to_tty){
-                       print "$now,hfta_$h,$p,$user_time,$sys_time,$vm_size,$resident_set_size,$pagesize\n";
-               }
-       }
-
-       sleep($interval);
-}
-
-
-
-sub get_proc_stats{
-my $pid = shift;
-my $line;
-my @flds;
-my $pos;
-
-
-open I_PROC_STATS,"/proc/$pid/stat";
-
-$line=<I_PROC_STATS>;
-close I_PROC_STATS;
-
-#print "getstats($pid): $line\n";
-
-chomp($line);
-@flds = split / +/,$line;
-
-$pos=0;
-$pid = $flds[$pos]; $pos++;
-$fname = $flds[$pos]; $pos++;
-$state = $flds[$pos]; $pos++;
-$pppid = $flds[$pos]; $pos++;
-$pgrp = $flds[$pos]; $pos++;
-$session = $flds[$pos]; $pos++;
-$tty_n = $flds[$pos]; $pos++;
-$tpgid = $flds[$pos]; $pos++;
-$flags = $flds[$pos]; $pos++;
-$minor_faults = $flds[$pos]; $pos++;
-$child_minor_faults = $flds[$pos]; $pos++;
-$major_faults = $flds[$pos0]; $pos++;
-$child_major_faults = $flds[$pos0]; $pos++;
-$user_time = $flds[$pos]; $pos++;
-$sys_time = $flds[$pos]; $pos++;
-$child_user_time = $flds[$pos]; $pos++;
-$child_sys_time = $flds[$pos]; $pos++;
-$priority = $flds[$pos]; $pos++;
-$nice = $flds[$pos]; $pos++;
-$num_threads = $flds[$pos]; $pos++;
-$interval_timer_realvalue = $flds[$pos]; $pos++;
-$start_time = $flds[$pos]; $pos++;
-$vm_size = $flds[$pos]; $pos++;
-$resident_set_size = $flds[$pos]; $pos++;
-$rss_limit = $flds[$pos]; $pos++;
-$startcode = $flds[$pos]; $pos++;
-$endcode = $flds[$pos]; $pos++;
-$startstack = $flds[$pos]; $pos++;
-$curr_kernel_stack_ptr = $flds[$pos]; $pos++;
-$curr_instruction_ptr = $flds[$pos]; $pos++;
-$signal = $flds[$pos]; $pos++;
-$sigblocked = $flds[$pos]; $pos++;
-$sigignore = $flds[$pos]; $pos++;
-$wchan = $flds[$pos]; $pos++;
-$nswap = $flds[$pos]; $pos++;
-$exit_signal = $flds[$pos]; $pos++;
-$processor = $flds[$pos]; $pos++;
-$rt_priority = $flds[$pos]; $pos++;
-$policy = $flds[$pos]; $pos++;
-$aggr_block_io_delays = $flds[$pos]; $pos++;
-$guest_time = $flds[$pos]; $pos++;
-$cguest_time = $flds[$pos]; $pos++;
-}
+#! /usr/bin/perl\r
+\r
+# ------------------------------------------------\r
+#   Copyright 2014 AT&T Intellectual Property\r
+#   Licensed under the Apache License, Version 2.0 (the "License");\r
+#   you may not use this file except in compliance with the License.\r
+#   You may obtain a copy of the License at\r
+#\r
+#     http://www.apache.org/licenses/LICENSE-2.0\r
+#\r
+#   Unless required by applicable law or agreed to in writing, software\r
+#   distributed under the License is distributed on an "AS IS" BASIS,\r
+#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+#   See the License for the specific language governing permissions and\r
+#   limitations under the License.\r
+# -------------------------------------------\r
+\r
+use English;\r
+\r
+$interval = 10;\r
+$to_tty = 0;\r
+if(scalar(@ARGV)>0){\r
+       if(int($ARGV[0])>0){\r
+               $interval = int($ARGV[0]);\r
+       }else{\r
+               if($ARGV[0] eq '-'){\r
+                       $to_tty = 1;\r
+               }else{\r
+                       print STDERR "Argument 1 ($ARGV[0]) ignored.\n";\r
+               }       \r
+       }\r
+}\r
+if(scalar(@ARGV)>1){\r
+       if(int($ARGV[1])>0){\r
+               $interval = int($ARGV[1]);\r
+       }else{\r
+               if($ARGV[1] eq '-'){\r
+                       $to_tty = 1;\r
+               }else{\r
+                       print STDERR "Argument 2 ($ARGV[1]) ignored.\n";\r
+               }       \r
+       }\r
+}\r
+if(scalar(@ARGV)>2){\r
+       print STDERR "Only 2 arguments accepted, additional args ignored.\n";\r
+}\r
+\r
+open O, ">resource_log.csv" or die "Can't open resource_log.csv\n";\r
+\r
+\r
+\r
+# get the page size\r
+open I,"getconf PAGESIZE |";\r
+$line=<I>;\r
+chomp($line);\r
+$pagesize = int($line);\r
+close(I);\r
+\r
+\r
+$effective_uid = $REAL_USER_ID;\r
+$ps_cmd = "ps -U $effective_uid |";\r
+\r
+%hfta_pid=();\r
+\r
+open P,$ps_cmd;\r
+while($line=<P>){\r
+       chomp($line);\r
+       $line =~ s/^\s+//;\r
+       @flds = split /\s+/,$line;\r
+       if($flds[3] =~ /rts/){\r
+               push @rts_pids,int($flds[0]);\r
+       }\r
+       if($flds[3] =~ /hfta_(\d+)/){\r
+               $hfta_pid{$1} = int($flds[0]);\r
+       }\r
+}\r
+\r
+$rts_pids = sort {$a<=>$b} @rts_pids;\r
+\r
+$now=time();\r
+print O "START monitoring at time $now\n";\r
+print O "ts,proc,pid,utime,stime,vm_size,rss,pagesize\n";\r
+if(to_tty){\r
+       print "START monitoring at time $now\n";\r
+       print "ts,proc,pid,utime,stime,vm_size,rss,pagesize\n";\r
+}\r
+#print "RTS PIDs:\n";\r
+#foreach $p (@rts_pids){\r
+#      print "$p ";\r
+#}\r
+#print "\nHFTA PIDs:\n";\r
+#  foreach $h (sort {$a<=>$b} keys(%hfta_pid)){\r
+#      print "($h,",$hfta_pid{$h},") ";\r
+#}\r
+#print "\n";\r
+\r
+while(1){\r
+       $now=time();\r
+       foreach $p (@rts_pids){\r
+               get_proc_stats($p);\r
+               print O "$now,rts,$p,$user_time,$sys_time,$vm_size,$resident_set_size,$pagesize\n";\r
+               if(to_tty){\r
+                       print "$now,rts,$p,$user_time,$sys_time,$vm_size,$resident_set_size,$pagesize\n";\r
+               }\r
+       }\r
+       foreach $h (sort {$a<=>$b} keys(%hfta_pid)){\r
+               $p=$hfta_pid{$h};\r
+               get_proc_stats($p);\r
+               print O "$now,hfta_$h,$p,$user_time,$sys_time,$vm_size,$resident_set_size,$pagesize\n";\r
+               if(to_tty){\r
+                       print "$now,hfta_$h,$p,$user_time,$sys_time,$vm_size,$resident_set_size,$pagesize\n";\r
+               }\r
+       }\r
+\r
+       sleep($interval);\r
+}\r
+\r
+\r
+\r
+sub get_proc_stats{\r
+my $pid = shift;\r
+my $line;\r
+my @flds;\r
+my $pos;\r
+\r
+\r
+open I_PROC_STATS,"/proc/$pid/stat";\r
+\r
+$line=<I_PROC_STATS>;\r
+close I_PROC_STATS;\r
+\r
+#print "getstats($pid): $line\n";\r
+\r
+chomp($line);\r
+@flds = split / +/,$line;\r
+\r
+$pos=0;\r
+$pid = $flds[$pos]; $pos++;\r
+$fname = $flds[$pos]; $pos++;\r
+$state = $flds[$pos]; $pos++;\r
+$pppid = $flds[$pos]; $pos++;\r
+$pgrp = $flds[$pos]; $pos++;\r
+$session = $flds[$pos]; $pos++;\r
+$tty_n = $flds[$pos]; $pos++;\r
+$tpgid = $flds[$pos]; $pos++;\r
+$flags = $flds[$pos]; $pos++;\r
+$minor_faults = $flds[$pos]; $pos++;\r
+$child_minor_faults = $flds[$pos]; $pos++;\r
+$major_faults = $flds[$pos0]; $pos++;\r
+$child_major_faults = $flds[$pos0]; $pos++;\r
+$user_time = $flds[$pos]; $pos++;\r
+$sys_time = $flds[$pos]; $pos++;\r
+$child_user_time = $flds[$pos]; $pos++;\r
+$child_sys_time = $flds[$pos]; $pos++;\r
+$priority = $flds[$pos]; $pos++;\r
+$nice = $flds[$pos]; $pos++;\r
+$num_threads = $flds[$pos]; $pos++;\r
+$interval_timer_realvalue = $flds[$pos]; $pos++;\r
+$start_time = $flds[$pos]; $pos++;\r
+$vm_size = $flds[$pos]; $pos++;\r
+$resident_set_size = $flds[$pos]; $pos++;\r
+$rss_limit = $flds[$pos]; $pos++;\r
+$startcode = $flds[$pos]; $pos++;\r
+$endcode = $flds[$pos]; $pos++;\r
+$startstack = $flds[$pos]; $pos++;\r
+$curr_kernel_stack_ptr = $flds[$pos]; $pos++;\r
+$curr_instruction_ptr = $flds[$pos]; $pos++;\r
+$signal = $flds[$pos]; $pos++;\r
+$sigblocked = $flds[$pos]; $pos++;\r
+$sigignore = $flds[$pos]; $pos++;\r
+$wchan = $flds[$pos]; $pos++;\r
+$nswap = $flds[$pos]; $pos++;\r
+$exit_signal = $flds[$pos]; $pos++;\r
+$processor = $flds[$pos]; $pos++;\r
+$rt_priority = $flds[$pos]; $pos++;\r
+$policy = $flds[$pos]; $pos++;\r
+$aggr_block_io_delays = $flds[$pos]; $pos++;\r
+$guest_time = $flds[$pos]; $pos++;\r
+$cguest_time = $flds[$pos]; $pos++;\r
+}\r