Skip to content

Commit 7b4738d

Browse files
authored
Merge pull request #186 from intel-innersource/184-implement-pid-option-for-additional-pcm-utilities
implement pid option for additional pcm utilities
2 parents 5b8bb48 + fe51449 commit 7b4738d

File tree

5 files changed

+49
-6
lines changed

5 files changed

+49
-6
lines changed

src/pcm-numa.cpp

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ int main(int argc, char * argv[])
108108
cerr << "\n";
109109

110110
double delay = -1.0;
111+
int pid{ -1 };
111112
char * sysCmd = NULL;
112113
char ** sysArgv = NULL;
113114
bool csv = false;
@@ -116,10 +117,17 @@ int main(int argc, char * argv[])
116117

117118
PCM * m = PCM::getInstance();
118119

120+
parsePID(argc, argv, pid);
121+
119122
if (argc > 1) do
120123
{
121124
argv++;
122125
argc--;
126+
if (*argv == nullptr)
127+
{
128+
continue;
129+
}
130+
else
123131
if (strncmp(*argv, "--help", 6) == 0 ||
124132
strncmp(*argv, "-h", 2) == 0 ||
125133
strncmp(*argv, "/h", 2) == 0)
@@ -141,6 +149,12 @@ int main(int argc, char * argv[])
141149
}
142150
continue;
143151
}
152+
else if (isPIDOption(argv))
153+
{
154+
argv++;
155+
argc--;
156+
continue;
157+
}
144158
else if (mainLoop.parseArg(*argv))
145159
{
146160
continue;
@@ -198,7 +212,9 @@ int main(int argc, char * argv[])
198212
regs[1].fields.event_select = m->getOCREventNr(1, 0).first; // OFFCORE_RESPONSE 1 event
199213
regs[1].fields.umask = m->getOCREventNr(1, 0).second;
200214

201-
PCM::ErrorCode status = m->program(PCM::EXT_CUSTOM_CORE_EVENTS, &conf);
215+
print_pid_collection_message(pid);
216+
217+
PCM::ErrorCode status = m->program(PCM::EXT_CUSTOM_CORE_EVENTS, &conf, false, pid);
202218
m->checkError(status);
203219

204220
print_cpu_details();

src/pcm-raw.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1810,7 +1810,7 @@ int main(int argc, char* argv[])
18101810
bool reset_pmu = false;
18111811
PCM* m = PCM::getInstance();
18121812

1813-
parseParam(argc, argv, "pid", [&pid](const char* p) { if (p) pid = atoi(p); });
1813+
parsePID(argc, argv, pid);
18141814

18151815
#ifdef PCM_SIMDJSON_AVAILABLE
18161816
parseParam(argc, argv, "ep", [](const char* p) { eventFileLocationPrefix = p;});
@@ -1844,7 +1844,7 @@ int main(int argc, char* argv[])
18441844
{
18451845
continue;
18461846
}
1847-
else if (strncmp(*argv, "-pid", 4) == 0 || strncmp(*argv, "/pid", 4) == 0)
1847+
else if (isPIDOption(argv))
18481848
{
18491849
argv++;
18501850
argc--;

src/pcm-tsx.cpp

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,7 @@ int main(int argc, char * argv[])
278278
cerr << "\n";
279279

280280
double delay = -1.0;
281+
int pid{ -1 };
281282
char * sysCmd = NULL;
282283
char ** sysArgv = NULL;
283284
int cur_event;
@@ -286,6 +287,8 @@ int main(int argc, char * argv[])
286287
MainLoop mainLoop;
287288
string program = string(argv[0]);
288289

290+
parsePID(argc, argv, pid);
291+
289292
PCM * m = PCM::getInstance();
290293
const size_t numCtrSupported = m->getMaxCustomCoreEvents();
291294
switch (m->getCPUModel())
@@ -306,13 +309,24 @@ int main(int argc, char * argv[])
306309
{
307310
argv++;
308311
argc--;
312+
if (*argv == nullptr)
313+
{
314+
continue;
315+
}
316+
else
309317
if (strncmp(*argv, "--help", 6) == 0 ||
310318
strncmp(*argv, "-h", 2) == 0 ||
311319
strncmp(*argv, "/h", 2) == 0)
312320
{
313321
print_usage(program);
314322
exit(EXIT_FAILURE);
315323
}
324+
else if (isPIDOption(argv))
325+
{
326+
argv++;
327+
argc--;
328+
continue;
329+
}
316330
else if (strncmp(*argv, "-csv", 4) == 0 ||
317331
strncmp(*argv, "/csv", 4) == 0)
318332
{
@@ -442,7 +456,9 @@ int main(int argc, char * argv[])
442456
cerr << "No RTM support detected, but -F found as argument, running anyway.\n";
443457
}
444458

445-
PCM::ErrorCode status = m->program(PCM::EXT_CUSTOM_CORE_EVENTS, &conf);
459+
print_pid_collection_message(pid);
460+
461+
PCM::ErrorCode status = m->program(PCM::EXT_CUSTOM_CORE_EVENTS, &conf, false, pid);
446462
m->checkError(status);
447463

448464
print_cpu_details();

src/pcm.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1167,7 +1167,7 @@ int main(int argc, char * argv[])
11671167
bool reset_pmu = false;
11681168
bool disable_JKT_workaround = false; // as per http://software.intel.com/en-us/articles/performance-impact-when-sampling-certain-llc-events-on-snb-ep-with-vtune
11691169

1170-
parseParam(argc, argv, "pid", [&pid](const char* p) { if (p) pid = atoi(p); });
1170+
parsePID(argc, argv, pid);
11711171

11721172
MainLoop mainLoop;
11731173
std::bitset<MAX_CORES> ycores;
@@ -1267,7 +1267,7 @@ int main(int argc, char * argv[])
12671267
}
12681268
continue;
12691269
}
1270-
else if (strncmp(*argv, "-pid", 4) == 0 || strncmp(*argv, "/pid", 4) == 0)
1270+
else if (isPIDOption(argv))
12711271
{
12721272
argv++;
12731273
argc--;

src/utils.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -498,4 +498,15 @@ void check_and_set_silent(int argc, char * argv[], null_stream &nullStream2);
498498

499499
void print_pid_collection_message(int pid);
500500

501+
inline bool isPIDOption(char * argv [])
502+
{
503+
return strncmp(*argv, "-pid", 4) == 0 || strncmp(*argv, "/pid", 4) == 0;
504+
}
505+
506+
inline void parsePID(int argc, char* argv[], int& pid)
507+
{
508+
parseParam(argc, argv, "pid", [&pid](const char* p) { if (p) pid = atoi(p); });
509+
}
510+
511+
501512
} // namespace pcm

0 commit comments

Comments
 (0)