The overhead percentage could be high in some cases, for instance with small, sub 100ms intervals.  Use with caution.
        example: 'perf stat -I 1000 -e cycles -a sleep 5'
 
+--interval-count times::
+Print count deltas for fixed number of times.
+This option should be used together with "-I" option.
+       example: 'perf stat -I 1000 --interval-count 2 -e cycles -a'
+
 --metric-only::
 Only print computed metrics. Print them in a single line.
 Don't show any raw values. Not supported with --per-thread.
 
 static struct cpu_map          *aggr_map;
 static aggr_get_id_t           aggr_get_id;
 static bool                    append_file;
+static bool                    interval_count;
 static const char              *output_name;
 static int                     output_fd;
 static int                     print_free_counters_hint;
 static int __run_perf_stat(int argc, const char **argv)
 {
        int interval = stat_config.interval;
+       int times = stat_config.times;
        char msg[BUFSIZ];
        unsigned long long t0, t1;
        struct perf_evsel *counter;
                        while (!waitpid(child_pid, &status, WNOHANG)) {
                                nanosleep(&ts, NULL);
                                process_interval();
+                               if (interval_count && !(--times))
+                                       break;
                        }
                }
                waitpid(child_pid, &status, 0);
                enable_counters();
                while (!done) {
                        nanosleep(&ts, NULL);
-                       if (interval)
+                       if (interval) {
                                process_interval();
+                               if (interval_count && !(--times))
+                                       break;
+                       }
                }
        }
 
                        "command to run after to the measured command"),
        OPT_UINTEGER('I', "interval-print", &stat_config.interval,
                    "print counts at regular interval in ms (>= 10)"),
+       OPT_INTEGER(0, "interval-count", &stat_config.times,
+                   "print counts for fixed number of times"),
        OPT_SET_UINT(0, "per-socket", &stat_config.aggr_mode,
                     "aggregate counts per processor socket", AGGR_SOCKET),
        OPT_SET_UINT(0, "per-core", &stat_config.aggr_mode,
                                   "The overhead percentage could be high in some cases. "
                                   "Please proceed with caution.\n");
        }
+       if (stat_config.times && interval)
+               interval_count = true;
+       else if (stat_config.times && !interval) {
+               pr_err("interval-count option should be used together with "
+                               "interval-print.\n");
+               parse_options_usage(stat_usage, stat_options, "interval-count", 0);
+               parse_options_usage(stat_usage, stat_options, "I", 1);
+               goto out;
+       }
 
        if (perf_evlist__alloc_stats(evsel_list, interval))
                goto out;