Merged to master at c605eba524ad..61c8ea961808 (from, to] You can see the entire diff with 'git diff' or at https://github.com/brho/akaros/compare/c605eba524ad...61c8ea961808
On 2016-04-28 at 22:30 Barret Rhoden <[email protected]> wrote: > Hi - > > This patchset adds a 2LS for VMMs and uses it to replace a large chunk > of vmrunkernel. Guest physical cores are mapped to uthreads. > > Now, a VMM is just like any other app, and it happens to have its own > custom scheduler. It's scheduler and support utilities are all in > user/vmm. > > One cool feature of this is that the VMM can act like any other > multithreaded program: it can run on as many cores as you'd like, > including as an SCP on core 0. Right now, it's hardcoded to be an MCP > that yields unused cores. We can change that later. > > Other notable changes: > - vcore_request() (the "ghetto incremental interface") is now > vcore_request_more(), and there is an absolute vcore_request_total() > - There is a per-vcore timer tick, in virtual time, that a 2LS can use > in it's sched_entry(). > - Fixed two brutal bugs > - Lots of other parlib helper changes. > > The VMM 2LS is actually a little primitive, but anything else we do > with it will at least use this framework. I'll have more changes > later, but figured I'd get these patches out there. > > Barret > > > The following changes since commit > 5fa9f64d90ae46c25fedd00626048cb5729ad297: > > Don't look at the block after calling qbypass (2016-04-28 15:48:48 > -0400) > > are available in the git repository at: > > [email protected]:brho/akaros.git vmm > > for you to fetch changes up to > 141d9431ef3e22e2d95aa8d3090ad111c188866c: > > VMM: Use safe MSR accessors (2016-04-28 17:18:29 -0400) > > ---------------------------------------------------------------- > View this online at: > https://github.com/brho/akaros/compare/5fa9f64d90ae...141d9431ef3e > > ---------------------------------------------------------------- > Barret Rhoden (33): > Mark parlib 2LS functions as noreturn > Add a helper for yielding from 2LSs > Add a helper for stopping current_uthread > Fix bitmask last-byte accounting > Demacro-ify the user BITMASK helpers > Provide vcore timer ticks for 2LSs > Rename vcore_request() -> vcore_request_more() > Refactor vcore_request_more() > Allow requesting a total number of vcores > Replace uses of the "ghetto incremental interface" > Remove the return value from vcore_request_more() > Remove vcore32.h > Move pop_user_ctx implementations to a .c file > Check notif_pending early in pop_user_ctx() > Add a notif_pending comment to proc_notify() > Add a helper to get a context's SP > Add a helper to sleep a uthread forever > Make user/vmm depend on benchutil > VMM: Add struct virtual_machine, use it in MMIO > VMM: Fix gpa address lookup > VMM: Remove the stack > VMM: Push globals into struct virtual_machine > Add a parlib debug_print helper > Use a lock when printing trap info > Add a parlib control variable for yielding > Add a test for file-backed mmap page faults > Add a helper for blocking a uthread from VC ctx > Add a 2LS for VMMs > Remove struct vmctl (XCC) > x86: Fix write_msr() casting > VMM: Fix MSR emulation (XCC) > Rename safe_read_msr() -> read_msr_safe() > VMM: Use safe MSR accessors > > Makefile | 2 +- > kern/arch/riscv/trap.h | 22 + > kern/arch/x86/bitmask.h | 6 +- > kern/arch/x86/msr.c | 4 +- > kern/arch/x86/ros/vmx.h | 9 +- > kern/arch/x86/trap64.h | 15 + > kern/arch/x86/uaccess.h | 4 +- > kern/arch/x86/vmm/vmm.c | 36 +- > kern/arch/x86/x86.h | 10 +- > kern/drivers/dev/cons.c | 1 - > kern/include/ros/vmm.h | 26 -- > kern/include/trap.h | 1 + > kern/src/monitor.c | 1 + > kern/src/process.c | 9 + > kern/src/trap.c | 17 + > tests/Makefile | 2 +- > tests/lock_test.c | 6 +- > tests/mcp_halt.c | 2 +- > tests/mhello.c | 8 +- > tests/old/condvar_test.c | 2 +- > tests/old/eth_audio.c | 2 +- > tests/old/manycore_test.c | 2 +- > tests/old/mproctests.c | 33 +- > tests/old/msr_cycling_vcores.c | 4 +- > tests/old/msr_dumb_while.c | 2 +- > tests/old/msr_get_cores.c | 6 +- > tests/old/msr_get_singlecore.c | 13 +- > tests/old/syscall.c | 6 +- > tests/pthread_barrier_test.c | 2 +- > tests/pthread_test.c | 2 +- > tests/vmm/vmrunkernel.c | 491 > ++-------------------- user/benchutil/include/benchutil/vcore_tick.h > | 43 ++ user/benchutil/vcore_tick.c | 152 +++++++ > user/parlib/include/parlib/parlib.h | 1 + > user/parlib/include/parlib/riscv/vcore.h | 1 + > user/parlib/include/parlib/ros_debug.h | 7 + > user/parlib/include/parlib/uthread.h | 9 +- > user/parlib/include/parlib/vcore.h | 6 +- > user/parlib/include/parlib/x86/bitmask.h | 129 +++--- > user/parlib/include/parlib/x86/vcore.h | 138 ++++++- > user/parlib/include/parlib/x86/vcore32.h | 357 ---------------- > user/parlib/include/parlib/x86/vcore64.h | 391 > ------------------ user/parlib/parlib.c | > 1 + user/parlib/thread0_sched.c | 41 +- > user/parlib/uthread.c | 59 ++- > user/parlib/vcore.c | 200 +++++---- > user/parlib/x86/vcore.c | 280 +++++++++++++ > user/pthread/pthread.c | 18 +- > user/utest/mmap_pf.c | 75 ++++ > user/utest/pvcalarm.c | 2 +- > user/vmm/apic.c | 4 +- > user/vmm/decode.c | 16 - > user/vmm/include/vmm/sched.h | 67 ++- > user/vmm/include/vmm/virtio_mmio.h | 5 +- > user/vmm/include/vmm/vmm.h | 40 ++ > user/vmm/sched.c | 565 > ++++++++++++++++++++++++++ > user/vmm/virtio-mmio.c | 23 +- > user/vmm/vmexit.c | 158 +++++++ 58 files > changed, 1971 insertions(+), 1563 deletions(-) create mode 100644 > user/benchutil/include/benchutil/vcore_tick.h create mode 100644 > user/benchutil/vcore_tick.c delete mode 100644 > user/parlib/include/parlib/x86/vcore32.h delete mode 100644 > user/parlib/include/parlib/x86/vcore64.h create mode 100644 > user/utest/mmap_pf.c create mode 100644 user/vmm/sched.c > create mode 100644 user/vmm/vmexit.c -- You received this message because you are subscribed to the Google Groups "Akaros" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. For more options, visit https://groups.google.com/d/optout.
