Skip to content

Commit 1230f00

Browse files
slompMarcos Slomp
andauthored
Adding worker_thread_idle() for more informative profiling (#8719)
* wrapping the thread idle condition in a function for more informative profiling * making distinction between idle and stall situations * adding comments about why these functions/symbols were added --------- Co-authored-by: Marcos Slomp <[email protected]>
1 parent 75ddeaf commit 1230f00

File tree

1 file changed

+26
-15
lines changed

1 file changed

+26
-15
lines changed

src/runtime/thread_pool_common.h

Lines changed: 26 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,27 @@ WEAK void dump_job_state() {
253253

254254
WEAK void worker_thread(void *);
255255

256+
WEAK void worker_thread_stall(work *owned_job) {
257+
work_queue.owners_sleeping++;
258+
owned_job->owner_is_sleeping = true;
259+
work_queue.wake_owners.wait(&work_queue.mutex);
260+
owned_job->owner_is_sleeping = false;
261+
work_queue.owners_sleeping--;
262+
}
263+
264+
WEAK void worker_thread_idle() {
265+
work_queue.workers_sleeping++;
266+
if (work_queue.a_team_size > work_queue.target_a_team_size) {
267+
// Transition to B team
268+
work_queue.a_team_size--;
269+
work_queue.wake_b_team.wait(&work_queue.mutex);
270+
work_queue.a_team_size++;
271+
} else {
272+
work_queue.wake_a_team.wait(&work_queue.mutex);
273+
}
274+
work_queue.workers_sleeping--;
275+
}
276+
256277
WEAK void worker_thread_already_locked(work *owned_job) {
257278
while (owned_job ? owned_job->running() : !work_queue.shutdown) {
258279
work *job = work_queue.jobs;
@@ -330,23 +351,13 @@ WEAK void worker_thread_already_locked(work *owned_job) {
330351

331352
if (!job) {
332353
// There is no runnable job. Go to sleep.
354+
// The "stall" and "idle" function calls are not strictly necessary
355+
// and could be inlined here, but having symbols for these situations
356+
// is very informative when profiling.
333357
if (owned_job) {
334-
work_queue.owners_sleeping++;
335-
owned_job->owner_is_sleeping = true;
336-
work_queue.wake_owners.wait(&work_queue.mutex);
337-
owned_job->owner_is_sleeping = false;
338-
work_queue.owners_sleeping--;
358+
worker_thread_stall(owned_job);
339359
} else {
340-
work_queue.workers_sleeping++;
341-
if (work_queue.a_team_size > work_queue.target_a_team_size) {
342-
// Transition to B team
343-
work_queue.a_team_size--;
344-
work_queue.wake_b_team.wait(&work_queue.mutex);
345-
work_queue.a_team_size++;
346-
} else {
347-
work_queue.wake_a_team.wait(&work_queue.mutex);
348-
}
349-
work_queue.workers_sleeping--;
360+
worker_thread_idle();
350361
}
351362
continue;
352363
}

0 commit comments

Comments
 (0)