void S2EStatsTracker::writeStatsLine() { *statsFile //<< "(" << stats::instructions //<< "," << fullBranches //<< "," << partialBranches //<< "," << numBranches << "(" << executor.getStatesCount() << "," << stats::queries << "," << stats::queryConstructs << "," << 0 // was numObjects //<< "," << stats::coveredInstructions //<< "," << stats::uncoveredInstructions << "," << stats::translationBlocks << "," << stats::translationBlocksConcrete << "," << stats::translationBlocksKlee << "," << stats::cpuInstructions << "," << stats::cpuInstructionsConcrete << "," << stats::cpuInstructionsKlee << "," << stats::concreteModeTime / 1000000. << "," << stats::symbolicModeTime / 1000000. << "," << util::getUserTime() << "," << elapsed() << "," << stats::queryTime / 1000000. << "," << stats::solverTime / 1000000. << "," << stats::cexCacheTime / 1000000. << "," << stats::forkTime / 1000000. << "," << stats::resolveTime / 1000000. << "," << getProcessMemoryUsage() //sys::Process::GetTotalMemoryUsage() << ")\n"; statsFile->flush(); }
void measurePerformance(pm::CollectorHAL *collector, const char *pszName, int cVMs) { static const char * const args[] = { pszName, "-child", NULL }; pm::CollectorHints hints; std::vector<RTPROCESS> processes; hints.collectHostCpuLoad(); hints.collectHostRamUsage(); /* Start fake VMs */ for (int i = 0; i < cVMs; ++i) { RTPROCESS pid; int rc = RTProcCreate(pszName, args, RTENV_DEFAULT, 0, &pid); if (RT_FAILURE(rc)) { hints.getProcesses(processes); std::for_each(processes.begin(), processes.end(), std::ptr_fun(RTProcTerminate)); RTPrintf("tstCollector: RTProcCreate() -> %Rrc\n", rc); return; } hints.collectProcessCpuLoad(pid); hints.collectProcessRamUsage(pid); } hints.getProcesses(processes); RTThreadSleep(30000); // Let children settle for half a minute int rc; ULONG tmp; uint64_t tmp64; uint64_t start; unsigned int nCalls; /* Pre-collect */ CALLS_PER_SECOND(preCollect(hints, 0)); /* Host CPU load */ CALLS_PER_SECOND(getRawHostCpuLoad(&tmp64, &tmp64, &tmp64)); /* Process CPU load */ CALLS_PER_SECOND(getRawProcessCpuLoad(processes[nCalls%cVMs], &tmp64, &tmp64, &tmp64)); /* Host CPU speed */ CALLS_PER_SECOND(getHostCpuMHz(&tmp)); /* Host RAM usage */ CALLS_PER_SECOND(getHostMemoryUsage(&tmp, &tmp, &tmp)); /* Process RAM usage */ CALLS_PER_SECOND(getProcessMemoryUsage(processes[nCalls%cVMs], &tmp)); start = RTTimeNanoTS(); int times; for (times = 0; times < 100; times++) { /* Pre-collect */ N_CALLS(1, preCollect(hints, 0)); /* Host CPU load */ N_CALLS(1, getRawHostCpuLoad(&tmp64, &tmp64, &tmp64)); /* Host CPU speed */ N_CALLS(1, getHostCpuMHz(&tmp)); /* Host RAM usage */ N_CALLS(1, getHostMemoryUsage(&tmp, &tmp, &tmp)); /* Process CPU load */ N_CALLS(cVMs, getRawProcessCpuLoad(processes[call], &tmp64, &tmp64, &tmp64)); /* Process RAM usage */ N_CALLS(cVMs, getProcessMemoryUsage(processes[call], &tmp)); } printf("\n%u VMs -- %.2f%% of CPU time\n", cVMs, (RTTimeNanoTS() - start) / 10000000. / times); /* Shut down fake VMs */ std::for_each(processes.begin(), processes.end(), std::ptr_fun(RTProcTerminate)); }