sched stuff

上级 1b7c801d
...@@ -41,9 +41,10 @@ private: ...@@ -41,9 +41,10 @@ private:
std::atomic<u64> enqs; std::atomic<u64> enqs;
std::atomic<u64> deqs; std::atomic<u64> deqs;
std::atomic<u64> steals; std::atomic<u64> steals;
std::atomic<u64> misses;
} stats_; } stats_;
u64 ncansteal_ __mpalign__; volatile u64 ncansteal_ __mpalign__;
}; };
percpu<schedule> schedule_; percpu<schedule> schedule_;
...@@ -58,6 +59,7 @@ schedule::schedule(void) ...@@ -58,6 +59,7 @@ schedule::schedule(void)
stats_.enqs = 0; stats_.enqs = 0;
stats_.deqs = 0; stats_.deqs = 0;
stats_.steals = 0; stats_.steals = 0;
stats_.misses = 0;
} }
void void
...@@ -88,7 +90,7 @@ schedule::deq(void) ...@@ -88,7 +90,7 @@ schedule::deq(void)
entry->next->prev = entry->prev; entry->next->prev = entry->prev;
entry->prev->next = entry->next; entry->prev->next = entry->next;
if (cansteal((proc*)entry, true)) if (cansteal((proc*)entry, true))
ncansteal_--; --ncansteal_;
sanity(); sanity();
stats_.deqs++; stats_.deqs++;
return (proc*)entry; return (proc*)entry;
...@@ -104,26 +106,30 @@ schedule::steal(bool nonexec) ...@@ -104,26 +106,30 @@ schedule::steal(bool nonexec)
if (cansteal((proc*)ptr, nonexec)) { if (cansteal((proc*)ptr, nonexec)) {
ptr->next->prev = ptr->prev; ptr->next->prev = ptr->prev;
ptr->prev->next = ptr->next; ptr->prev->next = ptr->next;
ncansteal_--; --ncansteal_;
sanity(); sanity();
stats_.steals++; ++stats_.steals;
release(&lock_); release(&lock_);
return (proc*)ptr; return (proc*)ptr;
} }
release(&lock_); release(&lock_);
++stats_.misses;
return nullptr; return nullptr;
} }
void void
schedule::dump(void) schedule::dump(void)
{ {
cprintf("%lu %lu %lu\n", cprintf("%lu %lu %lu %lu\n",
stats_.enqs.load(), stats_.enqs.load(),
stats_.deqs.load(), stats_.deqs.load(),
stats_.steals.load()); stats_.steals.load(),
stats_.misses.load());
stats_.enqs = 0; stats_.enqs = 0;
stats_.deqs = 0; stats_.deqs = 0;
stats_.steals = 0; stats_.steals = 0;
stats_.misses = 0;
} }
void void
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论