Pin ktasks to core 0
authorBarret Rhoden <brho@cs.berkeley.edu>
Wed, 30 Jan 2019 17:03:13 +0000 (12:03 -0500)
committerBarret Rhoden <brho@cs.berkeley.edu>
Wed, 30 Jan 2019 17:03:13 +0000 (12:03 -0500)
commitbabe106ae71809d837a94471103af0cd34b40e9c
tree6de154e30238d756a4e34743034ca1bbbd812aad
parent828f5ad57f415f00ea30c090ec834ed4eaaad8dd
Pin ktasks to core 0

Kthreads can migrate due to the hardcoded policy of "run kthreads on
whichever core woke them up."  This is technically a source of
interference for any MCP - consider a process that does as SYS_block /
kthread_usleep on core 6, then yields.  The alarm goes off on that core
and interferes with whoever is there.  The core timer IRQ is one issue,
and the kthread scheduling is another.

That kthread scheduling issue is worse for ktasks, since they are long
running.

This commit ensures that ktasks only run on core 0.  Eventually, we will
probably want ktasks to run on all sorts of cores - consider polling the
NIC / driving the NAPI stack on a dedicated core.  The kernel alarm
service was briefly (out-of-tree) done with per-core ktasks.  For now,
think of ktasks as having affinity to core 0.

This is all a scheduling choice, so arguably we should be calling out to
sched.c.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
kern/src/kthread.c