summaryrefslogtreecommitdiff
path: root/simpleperf/cmd_record.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'simpleperf/cmd_record.cpp')
-rw-r--r--simpleperf/cmd_record.cpp13
1 files changed, 11 insertions, 2 deletions
diff --git a/simpleperf/cmd_record.cpp b/simpleperf/cmd_record.cpp
index e5342dde..8cfbfdff 100644
--- a/simpleperf/cmd_record.cpp
+++ b/simpleperf/cmd_record.cpp
@@ -68,6 +68,9 @@ class RecordCommand : public Command {
" --call-graph fp | dwarf[,<dump_stack_size>]\n"
" Enable call graph recording. Use frame pointer or dwarf as the\n"
" method to parse call graph in stack. Default is dwarf,8192.\n"
+ " --cpu cpu_item1,cpu_item2,...\n"
+ " Collect samples only on the selected cpus. cpu_item can be cpu\n"
+ " number like 1, or cpu range like 0-3.\n"
" -e event1[:modifier1],event2[:modifier2],...\n"
" Select the event list to sample. Use `simpleperf list` to find\n"
" all possible event names. Modifiers can be added to define\n"
@@ -154,6 +157,7 @@ class RecordCommand : public Command {
bool post_unwind_;
bool child_inherit_;
std::vector<pid_t> monitored_threads_;
+ std::vector<int> cpus_;
std::vector<EventTypeAndModifier> measured_event_types_;
EventSelectionSet event_selection_set_;
@@ -207,11 +211,11 @@ bool RecordCommand::Run(const std::vector<std::string>& args) {
// 3. Open perf_event_files, create memory mapped buffers for perf_event_files, add prepare poll
// for perf_event_files.
if (system_wide_collection_) {
- if (!event_selection_set_.OpenEventFilesForAllCpus()) {
+ if (!event_selection_set_.OpenEventFilesForCpus(cpus_)) {
return false;
}
} else {
- if (!event_selection_set_.OpenEventFilesForThreadsOnAllCpus(monitored_threads_)) {
+ if (!event_selection_set_.OpenEventFilesForThreadsOnCpus(monitored_threads_, cpus_)) {
return false;
}
}
@@ -321,6 +325,11 @@ bool RecordCommand::ParseOptions(const std::vector<std::string>& args,
LOG(ERROR) << "unexpected argument for --call-graph option: " << args[i];
return false;
}
+ } else if (args[i] == "--cpu") {
+ if (!NextArgumentOrError(args, &i)) {
+ return false;
+ }
+ cpus_ = GetCpusFromString(args[i]);
} else if (args[i] == "-e") {
if (!NextArgumentOrError(args, &i)) {
return false;