Skip to content

Commit c689a9f

Browse files
Alexander Antonovrdementi
authored andcommitted
pcm-pcie: Fix issues with delay
There were two issues with delay in pcm-pcie: 1. delay (in second) provided by user is a double value and it was casted to integer w/o any converting. Convert it to ms to avoid this issue. 2. Double delay in getEventGroup(): for collecting events in 'before' and 'after' cases. Use delay only once
1 parent a2ac6af commit c689a9f

File tree

2 files changed

+14
-9
lines changed

2 files changed

+14
-9
lines changed

src/pcm-pcie.cpp

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -222,18 +222,22 @@ int mainThrows(int argc, char * argv[])
222222
// for non-CSV mode delay < 1.0 does not make a lot of practical sense:
223223
// hard to read from the screen, or
224224
// in case delay is not provided in command line => set default
225-
if ( ((delay<1.0) && (delay>0.0)) || (delay<=0.0) ) delay = PCM_DELAY_DEFAULT;
225+
if ( ((delay < 1.0) && (delay > 0.0)) || (delay <= 0.0) ) {
226+
cerr << "For non-CSV mode delay < 1.0s does not make a lot of practical sense. Default delay 1s is used. Consider to use CSV mode for lower delay values\n";
227+
delay = PCM_DELAY_DEFAULT;
228+
}
226229
}
227230

228231
cerr << "Update every " << delay << " seconds\n";
229232

233+
// Delay in miliseconds
230234
unique_ptr<IPlatform> platform(IPlatform::getPlatform(m, csv, print_bandwidth,
231-
print_additional_info, (uint)delay)); // FIXME: do we support only integer delay? ; lgtm [cpp/fixme-comment]
235+
print_additional_info, (uint)(delay * 1000)));
232236

233237
if (!platform)
234238
{
235239
print_cpu_details();
236-
cerr << "Jaketown, Ivytown, Haswell, Broadwell-DE Server CPU is required for this tool! Program aborted\n";
240+
cerr << "Jaketown, Ivytown, Haswell, Broadwell-DE, Skylake, Icelake, Snowridge and Sapphirerapids Server CPU is required for this tool! Program aborted\n";
237241
exit(EXIT_FAILURE);
238242
}
239243

src/pcm-pcie.h

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -131,8 +131,8 @@ class LegacyPlatform: public IPlatform
131131
int eventsCount = 0;
132132
for (auto &group : eventGroups) eventsCount += (int)group.size();
133133

134-
m_delay = uint32(delay * 1000 / (eventGroups.size()) / NUM_SAMPLES);
135-
if (m_delay * eventsCount * NUM_SAMPLES < delay * 1000) ++m_delay;
134+
// Delay for each multiplexing group. Counters will be scaled.
135+
m_delay = uint32(delay / eventGroups.size() / NUM_SAMPLES);
136136

137137
eventSample.resize(m_socketCount);
138138
for (auto &e: eventSample)
@@ -182,11 +182,12 @@ void LegacyPlatform::getEventGroup(eventGroup_t &eventGroup)
182182
m_pcm->programPCIeEventGroup(eventGroup);
183183
uint offset = eventGroupOffset(eventGroup);
184184

185-
for (auto &run : eventCount) {
186-
for(uint skt =0; skt < m_socketCount; ++skt)
185+
for (int run = before; run < total; run++) {
186+
for (uint skt = 0; skt < m_socketCount; ++skt)
187187
for (uint ctr = 0; ctr < eventGroup.size(); ++ctr)
188-
run[skt][ctr + offset] = m_pcm->getPCIeCounterData(skt, ctr);
189-
MySleepMs(m_delay);
188+
eventCount[run][skt][ctr + offset] = m_pcm->getPCIeCounterData(skt, ctr);
189+
if (run == before)
190+
MySleepMs(m_delay);
190191
}
191192

192193
for(uint skt = 0; skt < m_socketCount; ++skt)

0 commit comments

Comments
 (0)