-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add a daemon skeleton with a minimal base (non) functionality, covering various setup in start command. Add an initial perf-daemon.txt with basic info. This is in response to pople asking for the possibility to be able run record long running sessions on the background. The patchset that starts with this adds support to configure and run record sessions on background via new 'perf daemon' command. This is useful for being able to use perf as a flight recorder that one can interact with asking for events to be enabled or disabled, added or removed, etc. Signed-off-by: Jiri Olsa <jolsa@kernel.org> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Alexei Budankov <abudankov@huawei.com> Cc: Arnaldo Carvalho de Melo <acme@kernel.org> Cc: Ian Rogers <irogers@google.com> Cc: Ingo Molnar <mingo@kernel.org> Cc: Mark Rutland <mark.rutland@arm.com> Cc: Michael Petlan <mpetlan@redhat.com> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Link: https://lore.kernel.org/r/20210208200908.1019149-2-jolsa@kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
- Loading branch information
Jiri Olsa
authored and
Arnaldo Carvalho de Melo
committed
Feb 9, 2021
1 parent
8524711
commit d450bc5
Showing
6 changed files
with
130 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
perf-daemon(1) | ||
============== | ||
|
||
|
||
NAME | ||
---- | ||
perf-daemon - Run record sessions on background | ||
|
||
|
||
SYNOPSIS | ||
-------- | ||
[verse] | ||
'perf daemon' | ||
'perf daemon' [<options>] | ||
'perf daemon start' [<options>] | ||
|
||
|
||
DESCRIPTION | ||
----------- | ||
This command allows to run simple daemon process that starts and | ||
monitors configured record sessions. | ||
|
||
|
||
OPTIONS | ||
------- | ||
-v:: | ||
--verbose:: | ||
Be more verbose. | ||
|
||
All generic options are available also under commands. | ||
|
||
|
||
START COMMAND | ||
------------- | ||
The start command creates the daemon process. | ||
|
||
|
||
SEE ALSO | ||
-------- | ||
linkperf:perf-record[1], linkperf:perf-config[1] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,86 @@ | ||
// SPDX-License-Identifier: GPL-2.0 | ||
#include <subcmd/parse-options.h> | ||
#include <linux/limits.h> | ||
#include <string.h> | ||
#include <signal.h> | ||
#include <stdio.h> | ||
#include <unistd.h> | ||
#include "builtin.h" | ||
#include "perf.h" | ||
#include "debug.h" | ||
#include "util.h" | ||
|
||
struct daemon { | ||
char *base; | ||
FILE *out; | ||
char perf[PATH_MAX]; | ||
}; | ||
|
||
static struct daemon __daemon = { }; | ||
|
||
static const char * const daemon_usage[] = { | ||
"perf daemon start [<options>]", | ||
"perf daemon [<options>]", | ||
NULL | ||
}; | ||
|
||
static bool done; | ||
|
||
static void sig_handler(int sig __maybe_unused) | ||
{ | ||
done = true; | ||
} | ||
|
||
static int __cmd_start(struct daemon *daemon, struct option parent_options[], | ||
int argc, const char **argv) | ||
{ | ||
struct option start_options[] = { | ||
OPT_PARENT(parent_options), | ||
OPT_END() | ||
}; | ||
int err = 0; | ||
|
||
argc = parse_options(argc, argv, start_options, daemon_usage, 0); | ||
if (argc) | ||
usage_with_options(daemon_usage, start_options); | ||
|
||
debug_set_file(daemon->out); | ||
debug_set_display_time(true); | ||
|
||
pr_info("daemon started (pid %d)\n", getpid()); | ||
|
||
signal(SIGINT, sig_handler); | ||
signal(SIGTERM, sig_handler); | ||
|
||
while (!done && !err) { | ||
sleep(1); | ||
} | ||
|
||
pr_info("daemon exited\n"); | ||
fclose(daemon->out); | ||
return err; | ||
} | ||
|
||
int cmd_daemon(int argc, const char **argv) | ||
{ | ||
struct option daemon_options[] = { | ||
OPT_INCR('v', "verbose", &verbose, "be more verbose"), | ||
OPT_END() | ||
}; | ||
|
||
perf_exe(__daemon.perf, sizeof(__daemon.perf)); | ||
__daemon.out = stdout; | ||
|
||
argc = parse_options(argc, argv, daemon_options, daemon_usage, | ||
PARSE_OPT_STOP_AT_NON_OPTION); | ||
|
||
if (argc) { | ||
if (!strcmp(argv[0], "start")) | ||
return __cmd_start(&__daemon, daemon_options, argc, argv); | ||
|
||
pr_err("failed: unknown command '%s'\n", argv[0]); | ||
return -1; | ||
} | ||
|
||
return -1; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters