Add temporary stats

This commit is contained in:
Eelco Dolstra 2018-06-11 16:10:50 +02:00
parent 24c6806994
commit 30964103dc
No known key found for this signature in database
GPG key ID: 8170B4726D7198DE
2 changed files with 28 additions and 1 deletions

View file

@ -13,6 +13,9 @@
#include <sys/time.h> #include <sys/time.h>
#include <sys/resource.h> #include <sys/resource.h>
#include <sys/time.h>
#include <sys/resource.h>
#if HAVE_BOEHMGC #if HAVE_BOEHMGC
#include <gc/gc.h> #include <gc/gc.h>
@ -574,10 +577,19 @@ inline Value * EvalState::lookupVar(Env * env, const ExprVar & var, bool noEval)
} }
std::atomic<uint64_t> nrValuesFreed{0};
void finalizeValue(void * obj, void * data)
{
nrValuesFreed++;
}
Value * EvalState::allocValue() Value * EvalState::allocValue()
{ {
nrValues++; nrValues++;
return (Value *) allocBytes(sizeof(Value)); auto v = (Value *) allocBytes(sizeof(Value));
//GC_register_finalizer_no_order(v, finalizeValue, nullptr, nullptr, nullptr);
return v;
} }
@ -1707,6 +1719,20 @@ bool EvalState::eqValues(Value & v1, Value & v2)
} }
void EvalState::printStats2()
{
struct rusage ru;
getrusage(RUSAGE_SELF, &ru);
GC_prof_stats_s gc;
GC_get_prof_stats(&gc, sizeof(gc));
printError("STATS %d %d %d %d %d %d",
nrValues, nrValuesFreed.load(), nrValues - nrValuesFreed,
ru.ru_maxrss,
gc.heapsize_full, gc.free_bytes_full);
}
void EvalState::printStats() void EvalState::printStats()
{ {
bool showStats = getEnv("NIX_SHOW_STATS", "0") != "0"; bool showStats = getEnv("NIX_SHOW_STATS", "0") != "0";

View file

@ -276,6 +276,7 @@ public:
/* Print statistics. */ /* Print statistics. */
void printStats(); void printStats();
void printStats2();
void realiseContext(const PathSet & context); void realiseContext(const PathSet & context);