More timing/scheduling stats

上级 f029295e
...@@ -30,7 +30,7 @@ UPROGS= \ ...@@ -30,7 +30,7 @@ UPROGS= \
wqsh \ wqsh \
cp \ cp \
perf \ perf \
pmc \ xtime \
asharing \ asharing \
xls \ xls \
xdu \ xdu \
......
...@@ -71,12 +71,13 @@ main(int ac, const char *av[]) ...@@ -71,12 +71,13 @@ main(int ac, const char *av[])
sys_stat* s1 = sys_stat::read(); sys_stat* s1 = sys_stat::read();
pmc_count pmc1 = pmc_count::read(0); pmc_count pmc1 = pmc_count::read(0);
u64 t1 = rdtsc(); u64 t1 = rdtsc();
sys_stat* s2 = s1->delta(s0); sys_stat* s2 = s1->delta(s0);
fprintf(1, "%s cycles\n", valstr(t1-t0)); fprintf(1, "%s cycles\n", valstr(t1-t0));
fprintf(1, "%s %s\n", valstr(pmc1.delta(pmc0).sum()), fprintf(1, "%s %s\n", valstr(pmc1.delta(pmc0).sum()),
pmc_selector[pmci].name); pmc_selector[pmci].name);
fprintf(1, "%lu %lu\n", s2->busy(), s2->idle());
u64 tot = s2->busy() + s2->idle();
fprintf(1, ".%lu idle\n", (s2->idle()*100)/tot);
exit(); exit();
} }
...@@ -6,18 +6,20 @@ struct pmc_count { ...@@ -6,18 +6,20 @@ struct pmc_count {
perf_start(sel, 0); perf_start(sel, 0);
} }
static pmc_count read(unsigned int ctr) { static pmc_count read(unsigned int ctr, bool* map = nullptr) {
pmc_count n; pmc_count n;
// XXX(sbw) we loose our original affinity // XXX(sbw) we loose our original affinity
for (int i = 0; i < NCPU; i++) { for (int i = 0; i < NCPU; i++) {
setaffinity(i); if (map == nullptr || map[i]) {
// XXX(sbw) qemu doesn't seem to support CR4_PCE setaffinity(i);
// XXX(sbw) qemu doesn't seem to support CR4_PCE
#if defined(HW_qemu) #if defined(HW_qemu)
n.count_[i] = 0; n.count_[i] = 0;
#else #else
n.count_[i] = rdpmc(ctr); n.count_[i] = rdpmc(ctr);
#endif #endif
}
} }
setaffinity(-1); setaffinity(-1);
return n; return n;
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论