Messages in this thread | | | Date | Sat, 9 May 2015 11:49:01 +0300 (EEST) | From | Julian Anastasov <> | Subject | Re: [PATCH] sched: Introduce TASK_NOLOAD and TASK_IDLE |
| |
Hello,
On Fri, 8 May 2015, Peter Zijlstra wrote:
> Subject: sched: Introduce TASK_NOLOAD and TASK_IDLE > From: Peter Zijlstra <peterz@infradead.org> > Date: Fri May 8 14:23:45 CEST 2015 > > Currently people use TASK_INTERRUPTIBLE to idle kthreads and wait for > 'work' because TASK_UNINTERRUPTIBLE contributes to the loadavg. Having > all idle kthreads contribute to the loadavg is somewhat silly. > > Now mostly this works OK, because kthreads have all their signals > masked. However there's a few sites where this is causing problems and > TASK_UNINTERRUPTIBLE should be used, except for that loadavg issue. > > This patch adds TASK_NOLOAD which, when combined with > TASK_UNINTERRUPTIBLE avoids the loadavg accounting. > > As most of imagined usage sites are loops where a thread wants to > idle, waiting for work, a helper TASK_IDLE is introduced.
After checking our code in net/netfilter/ipvs/ip_vs_sync.c, sync_thread_master(), we may also need some wrappers:
- schedule_timeout_idle (instead of schedule_timeout call): __set_current_state(TASK_IDLE); return schedule_timeout(timeout);
- we here are really idle, so "N" looks ok
- pair of __wait_event_idle(wq, condition) and wait_event_idle(wq, condition) macros
- we here are write-blocked for socket, not sure if this blocked vs idle difference is useful to represent, in new bit for this blocked state "B"=2048, with 2 TASK_NOLOAD variants: N(idle) and B(blocked, 2|1024|2048, eg. for read-blocked or write-blocked). It will need additional argument 'state'/'blocked' for *wait_event_idle().
Regards
-- Julian Anastasov <ja@ssi.bg>
| |