tools/power turbostat: on SIGUSR1: sample, print and continue
authorLen Brown <len.brown@intel.com>
Sat, 15 Jul 2017 19:51:26 +0000 (15:51 -0400)
committerLen Brown <len.brown@intel.com>
Fri, 1 Jun 2018 16:13:04 +0000 (12:13 -0400)
Interval-mode turbostat now catches and discards SIGUSR1.

Thus, SIGUSR1 can be used to tell turbostat to cut short
the current measurement interval.  Turbostat will then start
the next measurement interval using the regular interval length.

This can be used to give turbostat variable intervals.
Invoke turbostat with --interval LARGE_NUMBER_SEC
and have a program that has permission to send it a SIGUSR1
always before LARGE_NUMBER_SEC expires.

It may also be useful to use "--enable Time_Of_Day_Seconds"
to observe the actual interval length.

Signed-off-by: Len Brown <len.brown@intel.com>
tools/power/x86/turbostat/turbostat.8
tools/power/x86/turbostat/turbostat.c

index 2dafba4900ab770577c41b948e3ce5b721795a09..f99bddf16b8b0e4a234472eda0ba7ab3c828ed2a 100644 (file)
@@ -271,6 +271,10 @@ CPU          PRF_CTRL
 
 SIGINT will interrupt interval-mode.
 The end-of-interval data will be collected and displayed before turbostat exits.
+
+SIGUSR1 will end current interval,
+end-of-interval data will be collected and displayed before turbostat
+starts a new interval.
 .SH NOTES
 
 .B "turbostat "
index d9703b728fbb5efc7c4f120c8916064845343f76..dd9b2efbbb2ad0bdef553ed7e67d5aa4b942030a 100644 (file)
@@ -2610,6 +2610,10 @@ static void signal_handler (int signal)
                if (debug)
                        fprintf(stderr, " SIGINT\n");
                break;
+       case SIGUSR1:
+               if (debug > 1)
+                       fprintf(stderr, "SIGUSR1\n");
+               break;
        }
 }
 
@@ -2623,6 +2627,8 @@ void setup_signal_handler(void)
 
        if (sigaction(SIGINT, &sa, NULL) < 0)
                err(1, "sigaction SIGINT");
+       if (sigaction(SIGUSR1, &sa, NULL) < 0)
+               err(1, "sigaction SIGUSR1");
 }
 void turbostat_loop()
 {