Merge branch 'report_loadavg' of https://github.com/atdt/benchmark into atdt-report_loadavg

This commit is contained in:
Dominic Hamon 2018-11-13 10:13:58 +00:00
commit b5082bbd65
7 changed files with 46 additions and 3 deletions

View File

@ -36,6 +36,7 @@ Maxim Vafin <maxvafin@gmail.com>
MongoDB Inc. MongoDB Inc.
Nick Hutchinson <nshutchinson@gmail.com> Nick Hutchinson <nshutchinson@gmail.com>
Oleksandr Sochka <sasha.sochka@gmail.com> Oleksandr Sochka <sasha.sochka@gmail.com>
Ori Livneh <ori.livneh@gmail.com>
Paul Redmond <paul.redmond@gmail.com> Paul Redmond <paul.redmond@gmail.com>
Radoslav Yovchev <radoslav.tm@gmail.com> Radoslav Yovchev <radoslav.tm@gmail.com>
Roman Lebedev <lebedev.ri@gmail.com> Roman Lebedev <lebedev.ri@gmail.com>

View File

@ -50,6 +50,7 @@ Matt Clarkson <mattyclarkson@gmail.com>
Maxim Vafin <maxvafin@gmail.com> Maxim Vafin <maxvafin@gmail.com>
Nick Hutchinson <nshutchinson@gmail.com> Nick Hutchinson <nshutchinson@gmail.com>
Oleksandr Sochka <sasha.sochka@gmail.com> Oleksandr Sochka <sasha.sochka@gmail.com>
Ori Livneh <ori.livneh@gmail.com>
Pascal Leroy <phl@google.com> Pascal Leroy <phl@google.com>
Paul Redmond <paul.redmond@gmail.com> Paul Redmond <paul.redmond@gmail.com>
Pierre Phaneuf <pphaneuf@google.com> Pierre Phaneuf <pphaneuf@google.com>

View File

@ -1284,6 +1284,7 @@ struct CPUInfo {
double cycles_per_second; double cycles_per_second;
std::vector<CacheInfo> caches; std::vector<CacheInfo> caches;
bool scaling_enabled; bool scaling_enabled;
std::vector<double> load_avg;
static const CPUInfo& Get(); static const CPUInfo& Get();

View File

@ -116,6 +116,12 @@ bool JSONReporter::ReportContext(const Context& context) {
} }
indent = std::string(4, ' '); indent = std::string(4, ' ');
out << indent << "],\n"; out << indent << "],\n";
out << indent << "\"load_avg\": [";
for (auto it = info.load_avg.begin(); it != info.load_avg.end();) {
out << *it++;
if (it != info.load_avg.end()) out << ",";
}
out << "],\n";
#if defined(NDEBUG) #if defined(NDEBUG)
const char build_type[] = "release"; const char build_type[] = "release";

View File

@ -22,6 +22,7 @@
#include <vector> #include <vector>
#include "check.h" #include "check.h"
#include "string_util.h"
namespace benchmark { namespace benchmark {
@ -54,6 +55,14 @@ void BenchmarkReporter::PrintBasicContext(std::ostream *out,
Out << "\n"; Out << "\n";
} }
} }
if (!info.load_avg.empty()) {
Out << "Load Average: ";
for (auto It = info.load_avg.begin(); It != info.load_avg.end();) {
Out << StrFormat("%.2f", *It++);
if (It != info.load_avg.end()) Out << ", ";
}
Out << "\n";
}
if (info.scaling_enabled) { if (info.scaling_enabled) {
Out << "***WARNING*** CPU scaling is enabled, the benchmark " Out << "***WARNING*** CPU scaling is enabled, the benchmark "

View File

@ -577,6 +577,24 @@ double GetCPUCyclesPerSecond() {
return static_cast<double>(cycleclock::Now() - start_ticks); return static_cast<double>(cycleclock::Now() - start_ticks);
} }
std::vector<double> GetLoadAvg() {
#if defined BENCHMARK_OS_FREEBSD || defined(BENCHMARK_OS_LINUX) || \
defined BENCHMARK_OS_MACOSX || defined BENCHMARK_OS_NETBSD || \
defined BENCHMARK_OS_OPENBSD
constexpr int kMaxSamples = 3;
std::vector<double> res(kMaxSamples, 0.0);
const int nelem = getloadavg(res.data(), kMaxSamples);
if (nelem < 1) {
res.clear();
} else {
res.resize(nelem);
}
return res;
#else
return {};
#endif
}
} // end namespace } // end namespace
const CPUInfo& CPUInfo::Get() { const CPUInfo& CPUInfo::Get() {
@ -588,6 +606,7 @@ CPUInfo::CPUInfo()
: num_cpus(GetNumCPUs()), : num_cpus(GetNumCPUs()),
cycles_per_second(GetCPUCyclesPerSecond()), cycles_per_second(GetCPUCyclesPerSecond()),
caches(GetCacheSizes()), caches(GetCacheSizes()),
scaling_enabled(CpuScalingEnabled(num_cpus)) {} scaling_enabled(CpuScalingEnabled(num_cpus)),
load_avg(GetLoadAvg()) {}
} // end namespace benchmark } // end namespace benchmark

View File

@ -29,7 +29,8 @@ static int AddContextCases() {
{"\"mhz_per_cpu\": %float,$", MR_Next}, {"\"mhz_per_cpu\": %float,$", MR_Next},
{"\"cpu_scaling_enabled\": ", MR_Next}, {"\"cpu_scaling_enabled\": ", MR_Next},
{"\"caches\": \\[$", MR_Next}}); {"\"caches\": \\[$", MR_Next}});
auto const& Caches = benchmark::CPUInfo::Get().caches; auto const& Info = benchmark::CPUInfo::Get();
auto const& Caches = Info.caches;
if (!Caches.empty()) { if (!Caches.empty()) {
AddCases(TC_ConsoleErr, {{"CPU Caches:$", MR_Next}}); AddCases(TC_ConsoleErr, {{"CPU Caches:$", MR_Next}});
} }
@ -46,8 +47,13 @@ static int AddContextCases() {
{"\"num_sharing\": %int$", MR_Next}, {"\"num_sharing\": %int$", MR_Next},
{"}[,]{0,1}$", MR_Next}}); {"}[,]{0,1}$", MR_Next}});
} }
AddCases(TC_JSONOut, {{"],$"}}); AddCases(TC_JSONOut, {{"],$"}});
auto const& LoadAvg = Info.load_avg;
if (!LoadAvg.empty()) {
AddCases(TC_ConsoleErr,
{{"Load Average: (%float, ){0,2}%float$", MR_Next}});
}
AddCases(TC_JSONOut, {{"\"load_avg\": \\[(%float,?){0,3}],$", MR_Next}});
return 0; return 0;
} }
int dummy_register = AddContextCases(); int dummy_register = AddContextCases();