Hi -
I updated this patchset. Other than minor typos, I fixed a couple bugs
and added flags to vmrunkernel to control the 2LS a little.
[email protected]:brho/akaros.git vmm 7654137693f3
Barret
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.