diff --git a/src/task.c b/src/task.c index f7bfd893a..5921c01fc 100644 --- a/src/task.c +++ b/src/task.c @@ -438,15 +438,15 @@ void process_runnable_tasks() if (likely(niced_tasks)) max_processed = (max_processed + 3) / 4; - /* run up to max_processed/6 urgent tasklets */ - done = run_tasks_from_list(&tt->tasklets[TL_URGENT], (max_processed + 5) / 6); + /* run up to max_processed/3 urgent tasklets */ + done = run_tasks_from_list(&tt->tasklets[TL_URGENT], (max_processed + 2) / 3); max_processed -= done; - /* pick up to max_processed/3 (~=0.4*(max_processed-done)) regular tasks from prio-ordered run queues */ + /* pick up to max_processed/2 (~=3/4*(max_processed-done)) regular tasks from prio-ordered run queues */ /* Note: the grq lock is always held when grq is not null */ - while (tt->task_list_size < 2 * (max_processed + 4) / 5) { + while (tt->task_list_size < (3 * max_processed + 3) / 4) { if ((global_tasks_mask & tid_bit) && !grq) { #ifdef USE_THREAD HA_SPIN_LOCK(TASK_RQ_LOCK, &rq_lock); @@ -508,11 +508,11 @@ void process_runnable_tasks() grq = NULL; } - /* run between max_processed/3 and max_processed/2 regular tasks */ - done = run_tasks_from_list(&tt->tasklets[TL_NORMAL], 2 * (max_processed + 4) / 5); + /* run between 0.4*max_processed and max_processed/2 regular tasks */ + done = run_tasks_from_list(&tt->tasklets[TL_NORMAL], (3 * max_processed + 3) / 4); max_processed -= done; - /* run between max_processed/2 and max_processed bulk tasklets */ + /* run between max_processed/4 and max_processed bulk tasklets */ done = run_tasks_from_list(&tt->tasklets[TL_BULK], max_processed); max_processed -= done;