提交 1e523d15 创建 作者: Silas Boyd-Wickizer's avatar Silas Boyd-Wickizer

initsampler -- use slab_perf to allocate a log buffer.

上级 c6f1d37b
...@@ -35,7 +35,6 @@ struct pmulog { ...@@ -35,7 +35,6 @@ struct pmulog {
u64 head; u64 head;
u64 tail; u64 tail;
u64 size; u64 size;
u64 try;
struct pmuevent *event; struct pmuevent *event;
__padout__; __padout__;
} __mpalign__; } __mpalign__;
...@@ -80,8 +79,8 @@ sampdump(void) ...@@ -80,8 +79,8 @@ sampdump(void)
{ {
for (int c = 0; c < NCPU; c++) { for (int c = 0; c < NCPU; c++) {
struct pmulog *l = &pmulog[c]; struct pmulog *l = &pmulog[c];
cprintf("%u samples:\n", c); cprintf("%u samples %lu\n", c, l->head - l->tail);
for (u64 i = l->tail; i < l->head; i++) for (u64 i = l->tail; i < l->tail+4 && i < l->head; i++)
cprintf(" %lx\n", l->event[i % l->size].rip); cprintf(" %lx\n", l->event[i % l->size].rip);
} }
} }
...@@ -111,7 +110,6 @@ samplog(struct trapframe *tf) ...@@ -111,7 +110,6 @@ samplog(struct trapframe *tf)
{ {
struct pmulog *l; struct pmulog *l;
l = &pmulog[cpunum()]; l = &pmulog[cpunum()];
l->try++;
if ((l->head - l->tail) == l->size) if ((l->head - l->tail) == l->size)
return 0; return 0;
...@@ -163,9 +161,9 @@ initsamp(void) ...@@ -163,9 +161,9 @@ initsamp(void)
u64 cr4 = rcr4(); u64 cr4 = rcr4();
lcr4(cr4 | CR4_PCE); lcr4(cr4 | CR4_PCE);
void *p = kalloc(); void *p = ksalloc(slab_perf);
if (p == NULL) if (p == NULL)
panic("initprof: kalloc"); panic("initprof: ksalloc");
pmulog[cpunum()].event = p; pmulog[cpunum()].event = p;
pmulog[cpunum()].size = PGSIZE / sizeof(struct pmuevent); pmulog[cpunum()].size = PERFSIZE / sizeof(struct pmuevent);
} }
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论