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

inline range::next for now.. our kmalloc is just amazingly slow!

上级 0538397f
...@@ -87,7 +87,7 @@ struct range : public rcu_freed { ...@@ -87,7 +87,7 @@ struct range : public rcu_freed {
std::atomic<int> curlevel; // the current levels it appears on std::atomic<int> curlevel; // the current levels it appears on
const int nlevel; // the number of levels this range should appear const int nlevel; // the number of levels this range should appear
crange *const cr; // the crange this range is part of crange *const cr; // the crange this range is part of
markptr<range>* const next; // one next pointer per level markptr<range> next[11]; // one next pointer per level
spinlock lock; // on separate cache line? spinlock lock; // on separate cache line?
void print(int l); void print(int l);
......
...@@ -92,7 +92,6 @@ range::~range() ...@@ -92,7 +92,6 @@ range::~range()
next[l] = (struct range *) 0xDEADBEEF; next[l] = (struct range *) 0xDEADBEEF;
} }
destroylock(&lock); destroylock(&lock);
delete[] next;
} }
void void
...@@ -111,12 +110,11 @@ range::range(crange *crarg, u64 k, u64 sz, int nl) ...@@ -111,12 +110,11 @@ range::range(crange *crarg, u64 k, u64 sz, int nl)
: rcu_freed("range_delayed"), : rcu_freed("range_delayed"),
key(k), size(sz), curlevel(0), key(k), size(sz), curlevel(0),
nlevel(nl ?: range_draw_nlevel(crarg->nlevel)), nlevel(nl ?: range_draw_nlevel(crarg->nlevel)),
cr(crarg), next(new markptr<range>[nlevel]) cr(crarg)
{ {
dprintf("range::range: %lu %lu %d\n", k, sz, nl); dprintf("range::range: %lu %lu %d\n", k, sz, nl);
assert(cr->nlevel > 0); assert(cr->nlevel > 0);
assert(next); assert(sizeof(next) / sizeof(next[0]) >= nlevel);
for (int l = 0; l < nlevel; l++) next[l] = 0;
initlock(&lock, "crange", LOCKSTAT_CRANGE); initlock(&lock, "crange", LOCKSTAT_CRANGE);
} }
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论