in ResultParser/ResultParser.cpp [1144:1271]
string ResultParser::ParseResults(const Profile& profile, const SystemInformation& system, vector<Results> vResults)
{
_sResult.clear();
_PrintProfile(profile);
_PrintSystemInfo(system);
for (size_t iResult = 0; iResult < vResults.size(); iResult++)
{
_Print("\n\nResults for timespan %d:\n", iResult + 1);
_Print("*******************************************************************************\n");
const Results& results = vResults[iResult];
const TimeSpan& timeSpan = profile.GetTimeSpans()[iResult];
unsigned int ulProcCount = system.processorTopology._ulActiveProcCount;
double fTime = PerfTimer::PerfTimeToSeconds(results.ullTimeCount); //test duration
char szFloatBuffer[1024];
// There either is a fixed number of threads for all files to share (GetThreadCount() > 0) or a number of threads per file.
// In the latter case vThreadResults.size() == number of threads per file * file count
size_t ulThreadCnt = (timeSpan.GetThreadCount() > 0) ? timeSpan.GetThreadCount() : results.vThreadResults.size();
if (fTime < 0.0000001)
{
_Print("The test was interrupted before the measurements began. No results are displayed.\n");
}
else
{
// TODO: parameters.bCreateFile;
_Print("\n");
sprintf_s(szFloatBuffer, sizeof(szFloatBuffer), "actual test time:\t%.2lfs\n", fTime);
_Print("%s", szFloatBuffer);
_Print("thread count:\t\t%u\n", ulThreadCnt);
if (timeSpan.GetThreadCount() != 0 && timeSpan.GetRequestCount() != 0) {
_Print("request count:\t\t%u\n", timeSpan.GetRequestCount());
}
_Print("proc count:\t\t%u\n", ulProcCount);
_PrintCpuUtilization(results, system);
_PrintEffectiveDistributions(results);
_Print("\nTotal IO\n");
_PrintSection(_SectionEnum::TOTAL, timeSpan, results);
_Print("\nRead IO\n");
_PrintSection(_SectionEnum::READ, timeSpan, results);
_Print("\nWrite IO\n");
_PrintSection(_SectionEnum::WRITE, timeSpan, results);
if (timeSpan.GetMeasureLatency())
{
_Print("\n\n");
_PrintLatencyPercentiles(results);
}
//etw
if (results.fUseETW)
{
_DisplayETW(results.EtwMask, results.EtwEventCounters);
_DisplayETWSessionInfo(results.EtwSessionInfo);
}
}
}
if (vResults.size() > 1)
{
_Print("\n\nTotals:\n");
_Print("*******************************************************************************\n\n");
_Print("type | bytes | I/Os | MiB/s | I/O per s\n");
_Print("-------------------------------------------------------------------------------\n");
UINT64 cbTotalWritten = 0;
UINT64 cbTotalRead = 0;
UINT64 cTotalWriteIO = 0;
UINT64 cTotalReadIO = 0;
UINT64 cTotalTicks = 0;
for (auto pResults = vResults.begin(); pResults != vResults.end(); pResults++)
{
double time = PerfTimer::PerfTimeToSeconds(pResults->ullTimeCount);
if (time >= 0.0000001) // skip timespans that were interrupted
{
cTotalTicks += pResults->ullTimeCount;
auto vThreadResults = pResults->vThreadResults;
for (auto pThreadResults = vThreadResults.begin(); pThreadResults != vThreadResults.end(); pThreadResults++)
{
for (auto pTargetResults = pThreadResults->vTargetResults.begin(); pTargetResults != pThreadResults->vTargetResults.end(); pTargetResults++)
{
cbTotalRead += pTargetResults->ullReadBytesCount;
cbTotalWritten += pTargetResults->ullWriteBytesCount;
cTotalReadIO += pTargetResults->ullReadIOCount;
cTotalWriteIO += pTargetResults->ullWriteIOCount;
}
}
}
}
double totalTime = PerfTimer::PerfTimeToSeconds(cTotalTicks);
_Print("write | %15I64u | %12I64u | %10.2lf | %10.2lf\n",
cbTotalWritten,
cTotalWriteIO,
(double)cbTotalWritten / 1024 / 1024 / totalTime,
(double)cTotalWriteIO / totalTime);
_Print("read | %15I64u | %12I64u | %10.2lf | %10.2lf\n",
cbTotalRead,
cTotalReadIO,
(double)cbTotalRead / 1024 / 1024 / totalTime,
(double)cTotalReadIO / totalTime);
_Print("-------------------------------------------------------------------------------\n");
_Print("total | %15I64u | %12I64u | %10.2lf | %10.2lf\n\n",
cbTotalRead + cbTotalWritten,
cTotalReadIO + cTotalWriteIO,
(double)(cbTotalRead + cbTotalWritten) / 1024 / 1024 / totalTime,
(double)(cTotalReadIO + cTotalWriteIO) / totalTime);
_Print("total test time:\t%.2lfs\n", totalTime);
}
return _sResult;
}