Skip to content
Snippets Groups Projects
Commit c6721c50 authored by Florian Schmaus's avatar Florian Schmaus
Browse files

Merge branch 'stats-queue-high-water' into 'master'

[stats] Add max-queue-length stats to AbstractWorkStealingScheduler

See merge request !223
parents d6e35882 a448bfb1
No related branches found
No related tags found
1 merge request!223[stats] Add max-queue-length stats to AbstractWorkStealingScheduler
Pipeline #66511 passed
......@@ -29,6 +29,11 @@ class LockedQueue {
return SIZE - deque.size();
}
auto usedSlots() -> size_t {
std::lock_guard<std::mutex> lock(queue_mutex);
return deque.size();
}
auto pushBottom(const I item) -> bool {
std::lock_guard<std::mutex> lock(queue_mutex);
......
......@@ -48,7 +48,8 @@ void AbstractWorkStealingScheduler::scheduleViaWorkStealing(Fiber& fiber) {
ABORT("Could not push fiber " << &fiber << " into queue");
}
} else if constexpr (emper::STATS) {
awss::stats.scheduledFibersToLocal++;
uint64_t queueLength = queue.usedSlots();
awss::stats.recordScheduledToLocalAndQueueLength(queueLength);
}
// Classes using this method are supposed to always invoke this
......
......@@ -21,6 +21,8 @@ void AbstractWorkStealingStats::print() {
<< std::to_string(comulatedWorkerStats.scheduledFibersToLocal) << std::endl
<< "total-scheduled-fibers-to-overflow-queue: "
<< std::to_string(comulatedWorkerStats.scheduledFibersToOverflowQueue) << std::endl
<< "global-max-queue-length: " << std::to_string(comulatedWorkerStats.maxQueueLength)
<< std::endl
<< "total-next-fiber-from-local: "
<< std::to_string(comulatedWorkerStats.nextFiberFromLocal) << std::endl
<< "total-next-fiber-hint-local: "
......
......@@ -8,6 +8,7 @@ auto AbstractWorkStealingWorkerStats::operator+=(const AbstractWorkStealingWorke
-> AbstractWorkStealingWorkerStats& {
scheduledFibersToLocal += other.scheduledFibersToLocal;
scheduledFibersToOverflowQueue += other.scheduledFibersToOverflowQueue;
maxQueueLength = std::max(maxQueueLength, other.maxQueueLength);
nextFiberFromLocal += other.nextFiberFromLocal;
nextFiberStolen += other.nextFiberStolen;
nextFiberFromAnywhereQueue += other.nextFiberFromAnywhereQueue;
......@@ -27,3 +28,8 @@ void AbstractWorkStealingWorkerStats::recordFibersLiftedFromAnywhereQueue(
std::max(maxFibersLiftedFromAnywhereQueue, fibersLiftedFromAnywhereQueue);
avgFibersLiftedFromAnywhereQueue.update(fibersLiftedFromAnywhereQueue);
}
void AbstractWorkStealingWorkerStats::recordScheduledToLocalAndQueueLength(uint64_t queueLength) {
scheduledFibersToLocal++;
maxQueueLength = std::max(maxQueueLength, queueLength);
}
......@@ -15,6 +15,7 @@ class AbstractWorkStealingWorkerStats {
public:
uint64_t scheduledFibersToLocal = 0;
uint64_t scheduledFibersToOverflowQueue = 0;
uint64_t maxQueueLength = 0;
uint64_t nextFiberFromLocal = 0;
uint64_t nextFiberFromHintLocal = 0;
uint64_t nextFiberFromHintAnywhere = 0;
......@@ -29,4 +30,6 @@ class AbstractWorkStealingWorkerStats {
private:
void recordFibersLiftedFromAnywhereQueue(size_t fibersLiftedFromAnywhere);
void recordScheduledToLocalAndQueueLength(uint64_t queueLength);
};
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment