CPU state tracking
authorBarret Rhoden <brho@cs.berkeley.edu>
Mon, 29 Sep 2014 00:31:34 +0000 (17:31 -0700)
committerBarret Rhoden <brho@cs.berkeley.edu>
Mon, 29 Sep 2014 01:42:54 +0000 (18:42 -0700)
commitbcff46ad124ec4a167a70cbba38beab0aa2ca85c
tree943889aa867bcde554410883ef39ff4b0a41c56e
parenta4f3197452f1c6842d790352b5ff82ffbfbd246a
CPU state tracking

Whenever the CPU transitions between states, we account for the amount
of time spent in the previous state in pcpui.  This will be useful for
accounting.  The downside is that we have a few more rdtsc calls, each
of which costs about 30 TSC ticks/cycles (Core i7-950, I think).

For example, given a process in userspace (state == USER), we take an
interrupt (change to IRQ), then after hard IRQ context, we go into the
kernel (change to KERN), and then eventually pop back to userspace
(change to USER).  Three rdtsc calls.  For a syscall, the transitions
are just USER->KERN, then KERN->USER.

In the future, we can add helpers to disable the rdtsc part, if it turns
into a pain.  I'll look into it more when I speed up syscalls.
kern/arch/x86/trap.c
kern/include/smp.h
kern/src/process.c
kern/src/smp.c