提交 10a20d0c 创建 作者: Nickolai Zeldovich's avatar Nickolai Zeldovich

get rid of dynamic memory allocation for scopedperf,

which allows moving initsperf() to before initkalloc().
上级 3ae1d7bd
...@@ -409,6 +409,7 @@ class tsc_ctr : public namedctr<64> { ...@@ -409,6 +409,7 @@ class tsc_ctr : public namedctr<64> {
__asm __volatile("rdtsc" : "=a" (a), "=d" (d)); __asm __volatile("rdtsc" : "=a" (a), "=d" (d));
return a | (d << 32); return a | (d << 32);
} }
NEW_DELETE_OPS(tsc_ctr)
}; };
class tscp_ctr : public namedctr<64> { class tscp_ctr : public namedctr<64> {
......
#pragma once #pragma once
#include "scopedperf.hh" #include "scopedperf.hh"
extern scopedperf::ctrgroup_chain<scopedperf::tsc_ctr> *perfgroup; extern scopedperf::ctrgroup_chain<scopedperf::tsc_ctr> perfgroup;
...@@ -76,11 +76,11 @@ cmain(u64 mbmagic, u64 mbaddr) ...@@ -76,11 +76,11 @@ cmain(u64 mbmagic, u64 mbaddr)
inituart(); inituart();
initcga(); initcga();
initconsole(); initconsole();
initsperf();
inittrap(); inittrap();
initmp(); initmp();
initlapic(); initlapic();
initkalloc(mbaddr); initkalloc(mbaddr);
initsperf();
initproc(); // process table initproc(); // process table
initsched(); // scheduler run queues initsched(); // scheduler run queues
initgc(); // gc epochs and threads initgc(); // gc epochs and threads
......
...@@ -7,11 +7,13 @@ ...@@ -7,11 +7,13 @@
using namespace scopedperf; using namespace scopedperf;
ctrgroup_chain<tsc_ctr> *perfgroup; static tsc_ctr tsc;
ctrgroup_chain<tsc_ctr> perfgroup(&tsc);
// but xv6 doesn't run static constructors, so call them explicitly below..
void void
initsperf() initsperf()
{ {
static tsc_ctr tsc; new (&tsc) tsc_ctr();
perfgroup = new ctrgroup_chain<tsc_ctr>(&tsc); new (&perfgroup) ctrgroup_chain<tsc_ctr>(&tsc);
} }
...@@ -86,7 +86,7 @@ sys_uptime(void) ...@@ -86,7 +86,7 @@ sys_uptime(void)
long long
sys_map(uptr addr, u64 len) sys_map(uptr addr, u64 len)
{ {
ANON_REGION(__func__, perfgroup); ANON_REGION(__func__, &perfgroup);
vmnode *vmn = new vmnode(PGROUNDUP(len) / PGSIZE); vmnode *vmn = new vmnode(PGROUNDUP(len) / PGSIZE);
if (vmn == 0) if (vmn == 0)
...@@ -103,7 +103,7 @@ sys_map(uptr addr, u64 len) ...@@ -103,7 +103,7 @@ sys_map(uptr addr, u64 len)
long long
sys_unmap(uptr addr, u64 len) sys_unmap(uptr addr, u64 len)
{ {
ANON_REGION(__func__, perfgroup); ANON_REGION(__func__, &perfgroup);
uptr align_addr = PGROUNDDOWN(addr); uptr align_addr = PGROUNDDOWN(addr);
uptr align_len = PGROUNDUP(addr + len) - align_addr; uptr align_len = PGROUNDUP(addr + len) - align_addr;
......
...@@ -274,7 +274,7 @@ vmap::lookup(uptr start, uptr len) ...@@ -274,7 +274,7 @@ vmap::lookup(uptr start, uptr len)
int int
vmap::insert(vmnode *n, uptr vma_start, int dotlb) vmap::insert(vmnode *n, uptr vma_start, int dotlb)
{ {
ANON_REGION("vmap::insert", perfgroup); ANON_REGION("vmap::insert", &perfgroup);
vma *e; vma *e;
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论