processes.txt
Barret Rhoden

All things processes!  This explains processes from a high level, especially
focusing on the user-kernel boundary and transitions to the many-core state,
which is the way in which parallel processes run.  This doesn't discuss deep
details of the ROS kernel's process code.

This is motivated by two things: kernel scalability and direct support for
parallel applications.

Part 1: Overview
Part 2: How They Work
Part 3: Resource Requests
Part 4: Preemption and Notification
Part 5: Old Arguments (mostly for archival purposes))
Part 6: Parlab app use cases

Revision History:
2009-10-30 - Initial version
2010-03-04 - Preemption/Notification, changed to many-core processes

Part 1: World View of Processes
==================================
A process is the lowest level of control, protection, and organization in the
kernel.

1.1: What's a process?
-------------------------------
Features:
- They are an executing instance of a program.  A program can load multiple
  other chunks of code and run them (libraries), but they are written to work
  with each other, within the same address space, and are in essence one
  entity.
- They have one address space/ protection domain.  
- They run in Ring 3 / Usermode.
- They can interact with each other, subject to permissions enforced by the
  kernel.
- They can make requests from the kernel, for things like resource guarantees.
  They have a list of resources that are given/leased to them.

None of these are new.  Here's what's new:
- They can run in a many-core mode, where its cores run at the same time, and
  it is aware of changes to these conditions (page faults, preemptions).  It
  can still request more resources (cores, memory, whatever).
- Every core in a many-core process (MCP) is *not* backed by a kernel
  thread/kernel stack, unlike with Linux tasks.
	- There are *no* per-core run-queues in the kernel that decide for
	  themselves which kernel thread to run.
- They are not fork()/execed().  They are created(), and then later made
  runnable.  This allows the controlling process (parent) to do whatever it
  wants: pass file descriptors, give resources, whatever.

These changes are directly motivated by what is wrong with current SMP
operating systems as we move towards many-core: direct (first class) support
for truly parallel processes, kernel scalability, and an ability of a process
to see through classic abstractions (the virtual processor) to understand (and
make requests about) the underlying state of the machine.

1.2: What's a partition?
-------------------------------
So a process can make resource requests, but some part of the system needs to
decide what to grant, when to grant it, etc.  This goes by several names:
scheduler / resource allocator / resource manager.  The scheduler simply says
when you get some resources, then calls functions from lower parts of the
kernel to make it happen.

This is where the partitioning of resources comes in.  In the simple case (one
process per partitioned block of resources), the scheduler just finds a slot
and runs the process, giving it its resources.  

A big distinction is that the *partitioning* of resources only makes sense
from the scheduler on up in the stack (towards userspace).  The lower levels
of the kernel know about resources that are granted to a process.  The
partitioning is about the accounting of resources and an interface for
adjusting their allocation.  It is a method for telling the 'scheduler' how
you want resources to be granted to processes.

A possible interface for this is procfs, which has a nice hierarchy.
Processes can be grouped together, and resources can be granted to them.  Who
does this?  A process can create it's own directory entry (a partition), and
move anyone it controls (parent of, though that's not necessary) into its
partition or a sub-partition.  Likewise, a sysadmin/user can simply move PIDs
around in the tree, creating partitions consisting of processes completely
unaware of each other.

Now you can say things like "give 25% of the system's resources to apache and
mysql".  They don't need to know about each other.  If you want finer-grained
control, you can create subdirectories (subpartitions), and give resources on
a per-process basis.  This is back to the simple case of one process for one
(sub)partition.

This is all influenced by Linux's cgroups (process control groups).
http://www.mjmwired.net/kernel/Documentation/cgroups.txt. They group processes
together, and allow subsystems to attach meaning to those groups.

Ultimately, I view partitioning as something that tells the kernel how to
grant resources.  It's an abstraction presented to userspace and higher levels
of the kernel.  The specifics still need to be worked out, but by separating
them from the process abstraction, we can work it out and try a variety of
approaches.

The actual granting of resources and enforcement is done by the lower levels
of the kernel (or by hardware, depending on future architectural changes).

Part 2: How They Work
===============================
2.1: States
-------------------------------
PROC_CREATED
PROC_RUNNABLE_S
PROC_RUNNING_S
PROC_WAITING
PROC_DYING
PROC_DYING_ABORT
PROC_RUNNABLE_M
PROC_RUNNING_M

Difference between the _M and the _S states:
- _S : legacy process mode.  There is no need for a second-level scheduler, and
  the code running is analogous to a user-level thread.
- RUNNING_M implies *guaranteed* core(s).  You can be a single core in the
  RUNNING_M state.  The guarantee is subject to time slicing, but when you
  run, you get all of your cores.
- The time slicing is at a coarser granularity for _M states.  This means that
  when you run an _S on a core, it should be interrupted/time sliced more
  often, which also means the core should be classified differently for a
  while.  Possibly even using it's local APIC timer.
- A process in an _M state will be informed about changes to its state, e.g.,
  will have a handler run in the event of a page fault

For more details, check out kern/inc/process.h  For valid transitions between
these, check out kern/src/process.c's proc_set_state().

2.2: Creation and Running
-------------------------------
Unlike the fork-exec model, processes are created, and then explicitly made
runnable.  In the time between creation and running, the parent (or another
controlling process) can do whatever it wants with the child, such as pass
specific file descriptors, map shared memory regions (which can be used to
pass arguments).

New processes are not a copy-on-write version of the parent's address space.
Due to our changes in the threading model, we no longer need (or want) this
behavior left over from the fork-exec model.

By splitting the creation from the running and by explicitly sharing state
between processes (like inherited file descriptors), we avoid a lot of
concurrency and security issues.

2.3: Vcoreid vs Pcoreid
-------------------------------
The vcoreid is a virtual cpu number.  Its purpose is to provide an easy way
for the kernel and userspace to talk about the same core.  pcoreid (physical)
would also work.  The vcoreid makes things a little easier, such as when a
process wants to refer to one of its other cores (not the calling core).  It
also makes the event notification mechanisms easier to specify and maintain.

Processes that care about locality should check what their pcoreid is.  This
is currently done via sys_getcpuid().  The name will probably change.

2.4: Transitioning to and from states
-------------------------------
2.4.1: To go from _S to _M, a process requests cores.
--------------
A resource request from 0 to 1 or more causes a transition from _S to _M.  The
calling context is saved in the uthread slot (uthread_ctx) in vcore0's
preemption data (in procdata).  The second level scheduler needs to be able to
restart the context when vcore0 starts up.  To do this, it will need to save the
TLS/TCB descriptor and the floating point/silly state (if applicable) in the
user-thread control block, and do whatever is needed to signal vcore0 to run the
_S context when it starts up.  One way would be to mark vcore0's "active thread"
variable to point to the _S thread.  When vcore0 starts up at
_start/vcore_entry() (like all vcores), it will see a thread was running there
and restart it.  The kernel will migrate the _S thread's silly state (FP) to the
new pcore, so that it looks like the process was simply running the _S thread
and got notified.  Odds are, it will want to just restart that thread, but the
kernel won't assume that (hence the notification).

In general, all cores (and all subsequently allocated cores) start at the elf
entry point, with vcoreid in eax or a suitable arch-specific manner.  There is
also a syscall to get the vcoreid, but this will save an extra trap at vcore
start time.

Future proc_runs(), like from RUNNABLE_M to RUNNING_M start all cores at the
entry point, including vcore0.  The saving of a _S context to vcore0's
uthread_ctx only happens on the transition from _S to _M (which the process
needs to be aware of for a variety of reasons).  This also means that userspace
needs to handle vcore0 coming up at the entry point again (and not starting the
program over).  This is currently done in sysdeps-ros/start.c, via the static
variable init.  Note there are some tricky things involving dynamically linked
programs, but it all works currently.

When coming in to the entry point, whether as the result of a startcore or a
notification, the kernel will set the stack pointer to whatever is requested
by userspace in procdata.  A process should allocate stacks of whatever size
it wants for its vcores when it is in _S mode, and write these location to
procdata.  These stacks are the transition stacks (in Lithe terms) that are
used as jumping-off points for future function calls.  These stacks need to be
used in a continuation-passing style, and each time they are used, they start
from the top.

2.4.2: To go from _M to _S, a process requests 0 cores
--------------
The caller becomes the new _S context.  Everyone else gets trashed
(abandon_core()).  Their stacks are still allocated and it is up to userspace
to deal with this.  In general, they will regrab their transition stacks when
they come back up.  Their other stacks and whatnot (like TBB threads) need to
be dealt with.

When the caller next switches to _M, that context (including its stack)
maintains its old vcore identity.  If vcore3 causes the switch to _S mode, it
ought to remain vcore3 (lots of things get broken otherwise).
As of March 2010, the code does not reflect this.  Don't rely on anything in
this section for the time being.

2.4.3: Requesting more cores while in _M
--------------
Any core can request more cores and adjust the resource allocation in any way.
These new cores come up just like the original new cores in the transition
from _S to _M: at the entry point.

2.4.4: Yielding
--------------
sys_yield()/proc_yield() will give up the calling core, and may or may not
adjust the desired number of cores, subject to its parameters.  Yield is
performing two tasks, both of which result in giving up the core.  One is for
not wanting the core anymore.  The other is in response to a preemption.  Yield
may not be called remotely (ARSC).

In _S mode, it will transition from RUNNING_S to RUNNABLE_S.  The context is
saved in scp_ctx.

In _M mode, this yields the calling core.  A yield will *not* transition from _M
to _S.  The kernel will rip it out of your vcore list.  A process can yield its
cores in any order.  The kernel will "fill in the holes of the vcoremap" for any
future new cores requested (e.g., proc A has 4 vcores, yields vcore2, and then
asks for another vcore.  The new one will be vcore2).  When any core starts in
_M mode, even after a yield, it will come back at the vcore_entry()/_start point.

Yield will normally adjust your desired amount of vcores to the amount after the
calling core is taken.  This is the way a process gives its cores back.

Yield can also be used to say the process is just giving up the core in response
to a pending preemption, but actually wants the core and does not want resource
requests to be readjusted.  For example, in the event of a preemption
notification, a process may yield (ought to!) so that the kernel does not need
to waste effort with full preemption.  This is done by passing in a bool
(being_nice), which signals the kernel that it is in response to a preemption.
The kernel will not readjust the amt_wanted, and if there is no preemption
pending, the kernel will ignore the yield.

There may be an m_yield(), which will yield all or some of the cores of an MPC,
remotely.  This is discussed farther down a bit.  It's not clear what exactly
it's purpose would be.

We also haven't addressed other reasons to yield, or more specifically to wait,
such as for an interrupt or an event of some sort.

2.4.5: Others
--------------
There are other transitions, mostly self-explanatory.  We don't currently use
any WAITING states, since we have nothing to block on yet.  DYING is a state
when the kernel is trying to kill your process, which can take a little while
to clean up.

Part 3: Resource Requests
===============================
A process can ask for resources from the kernel.  The kernel either grants
these requests or not, subject to QoS guarantees, or other scheduler-related
criteria.

A process requests resources, currently via sys_resource_req.  The form of a
request is to tell the kernel how much of a resource it wants.  Currently,
this is the amt_wanted.  We'll also have a minimum amount wanted, which tells
the scheduler not to run the process until the minimum amount of resources are
available.

How the kernel actually grants resources is resource-specific.  In general,
there are functions like proc_give_cores() (which gives certain cores to a
process) that actually does the allocation, as well as adjusting the
amt_granted for that resource.

For expressing QoS guarantees, we'll probably use something like procfs (as
mentioned above) to explicitly tell the scheduler/resource manager what the
user/sysadmin wants.  An interface like this ought to be usable both by
programs as well as simple filesystem tools (cat, etc).

Guarantees exist regardless of whether or not the allocation has happened.  An
example of this is when a process may be guaranteed to use 8 cores, but
currently only needs 2.  Whenever it asks for up to 8 cores, it will get them.
The exact nature of the guarantee is TBD, but there will be some sort of
latency involved in the guarantee for systems that want to take advantage of
idle resources (compared to simply reserving and not allowing anyone else to
use them).  A latency of 0 would mean a process wants it instantly, which
probably means they ought to be already allocated (and billed to) that
process.  

Part 4: Preemption and Event Notification
===============================
Preemption and Notification are tied together.  Preemption is when the kernel
takes a resource (specifically, cores).  There are two types core_preempt()
(one core) and gang_preempt() (all cores).  Notification (discussed below) is
when the kernel informs a process of an event, usually referring to the act of
running a function on a core (active notification).

The rough plan for preemption is to notify beforehand, then take action if
userspace doesn't yield.  This is a notification a process can ignore, though
it is highly recommended to at least be aware of impending core_preempt()
events.

4.1: Notification Basics
-------------------------------
One of the philosophical goals of ROS is to expose information up to userspace
(and allow requests based on that information).  There will be a variety of
events in the system that processes will want to know about.  To handle this,
we'll eventually build something like the following.

All events will have a number, like an interrupt vector.  Each process will
have an event queue (per core, described below).  On most architectures, it
will be a simple producer-consumer ring buffer sitting in the "shared memory"
procdata region (shared between the kernel and userspace).  The kernel writes
a message into the buffer with the event number and some other helpful
information.

Additionally, the process may request to be actively notified of specific
events.  This is done by having the process write into an event vector table
(like an IDT) in procdata.  For each event, the process writes the vcoreid it
wants to be notified on.

4.2: Notification Specifics
-------------------------------
In procdata there is an array of per-vcore data, holding some
preempt/notification information and space for two trapframes: one for
notification and one for preemption.

4.2.1: Overall
-----------------------------
When a notification arrives to a process under normal circumstances, the
kernel places the previous running context in the notification trapframe, and
returns to userspace at the program entry point (the elf entry point) on the
transition stack.  If a process is already handling a notification on that
core, the kernel will not interrupt it.  It is the processes's responsibility
to check for more notifications before returning to its normal work.  The
process must also unmask notifications (in procdata) before it returns to do
normal work.  Unmasking notifications is the signal to the kernel to not
bother sending IPIs, and if an IPI is sent before notifications are masked,
then the kernel will double-check this flag to make sure interrupts should
have arrived.

Notification unmasking is done by clearing the notif_disabled flag (similar to
turning interrupts on in hardware).  When a core starts up, this flag is on,
meaning that notifications are disabled by default.  It is the process's
responsibility to turn on notifications for a given vcore.

4.2.2: Notif Event Details
-----------------------------
When the process runs the handler, it is actually starting up at the same
location in code as it always does.  To determine if it was a notification or
not, simply check the queue and bitmask.  This has the added benefit of allowing
a process to notice notifications that it missed previously, or notifs it wanted
without active notification (IPI).  If we want to bypass this check by having a
magic register signal, we can add that later.  Additionally, the kernel will
mask notifications (much like an x86 interrupt gate).  It will also mask
notifications when starting a core with a fresh trapframe, since the process
will be executing on its transition stack.  The process must check its per-core
event queue to see why it was called, and deal with all of the events on the
queue.  In the case where the event queue overflows, the kernel will up a
counter so the process can at least be aware things are missed.  At the very
least, the process will see the notification marked in a bitmask.

These notification events include things such as: an IO is complete, a
preemption is pending to this core, the process just returned from a
preemption, there was a trap (divide by 0, page fault), and many other things.
We plan to allow this list to grow at runtime (a process can request new event
notification types).  These messages will often need some form of a timestamp,
especially ones that will expire in meaning (such as a preempt_pending).

Note that only one notification can be active at a time, including a fault.
This means that if a process page faults or something while notifications are
masked, the process will simply be killed.    It is up to the process to make
sure the appropriate pages are pinned, which it should do before entering _M
mode.

4.2.3: Event Overflow and Non-Messages
-----------------------------
For missed/overflowed events, and for events that do not need messages (they
have no parameters and multiple notifications are irrelevant), the kernel will
toggle that event's bit in a bitmask.  For the events that don't want messages,
we may have a flag that userspace sets, meaning they just want to know it
happened.  This might be too much of a pain, so we'll see.  For notification
events that overflowed the queue, the parameters will be lost, but hopefully the
application can sort it out.  Again, we'll see.  A specific notif_event should
not appear in both the event buffers and in the bitmask.

It does not make sense for all events to have messages.  Others, it does not
make sense to specify a different core on which to run the handler (e.g. page
faults).  The notification methods that the process expresses via procdata are
suggestions to the kernel.  When they don't make sense, they will be ignored.
Some notifications might be unserviceable without messages.  A process needs to
have a fallback mechanism.  For example, they can read the vcoremap to see who
was lost, or they can restart a thread to cause it to page fault again.

Event overflow sucks - it leads to a bunch of complications.  Ultimately, what
we really want is a limitless amount of notification messages (per core), as
well as a limitless amount of notification types.  And we want these to be
relayed to userspace without trapping into the kernel. 

We could do this if we had a way to dynamically manage memory in procdata, with
a distrusted process on one side of the relationship.  We could imagine growing
procdata dynamically (we plan to, mostly to grow the preempt_data struct as we
request more vcores), and then run some sort of heap manager / malloc.  Things
get very tricky since the kernel should never follow pointers that userspace can
touch.  Additionally, whatever memory management we use becomes a part of the
kernel interface.  

Even if we had that, dynamic notification *types* is tricky - they are
identified by a number, not by a specific (list) element.

For now, this all seems like an unnecessary pain in the ass.  We might adjust it
in the future if we come up with clean, clever ways to deal with the problem,
which we aren't even sure is a problem yet.

4.2.4: How to Use and Leave a Transition Stack
-----------------------------
We considered having the kernel be aware of a process's transition stacks and
sizes so that it can detect if a vcore is in a notification handler based on
the stack pointer in the trapframe when a trap or interrupt fires.  While
cool, the flag for notif_disabled is much easier and just as capable.
Userspace needs to be aware of various races, and only enable notifications
when it is ready to have its transition stack clobbered.  This means that when
switching from big user-thread to user-thread, the process should temporarily
disable notifications and reenable them before starting the new thread fully.
This is analogous to having a kernel that disables interrupts while in process
context.

A process can fake not being on its transition stack, and even unmapping their
stack.  At worst, a vcore could recursively page fault (the kernel does not
know it is in a handler, if they keep enabling notifs before faulting), and
that would continue til the core is forcibly preempted.  This is not an issue
for the kernel.

When a process wants to use its transition stack, it ought to check
preempt_pending, mask notifications, jump to its transition stack, do its work
(e.g. process notifications, check for new notifications, schedule a new
thread) periodically checking for a pending preemption, and making sure the
notification queue/list is empty before moving back to real code.  Then it
should jump back to a real stack, unmask notifications, and jump to the newly
scheduled thread.

This can be really tricky.  When userspace is changing threads, it will need to
unmask notifs as well as jump to the new thread.  There is a slight race here,
but it is okay.  The race is that an IPI can arrive after notifs are unmasked,
but before returning to the real user thread.  Then the code will think the
uthread_ctx represents the new user thread, even though it hasn't started (and
the PC is wrong).  The trick is to make sure that all state required to start
the new thread, as well as future instructions, are all saved within the "stuff"
that gets saved in the uthread_ctx.  When these threading packages change
contexts, they ought to push the PC on the stack of the new thread, (then enable
notifs) and then execute a return.  If an IPI arrives before the "function
return", then when that context gets restarted, it will run the "return" with
the appropriate value on the stack still.

There is a further complication.  The kernel can send an IPI that the process
wanted, but the vcore did not get truly interrupted since its notifs were
disabled.  There is a race between checking the queue/bitmask and then enabling
notifications.  The way we deal with it is that the kernel posts the
message/bit, then sets notif_pending.  Then it sends the IPI, which may or may
not be received (based on notif_disabled).  (Actually, the kernel only ought to
send the IPI if notif_pending was 0 (atomically) and notif_disabled is 0).  When
leaving the transition stack, userspace should clear the notif_pending, then
check the queue do whatever, and then try to pop the tf.  When popping the tf,
after enabling notifications, check notif_pending.  If it is still clear, return
without fear of missing a notif.  If it is not clear, it needs to manually
notify itself (sys_self_notify) so that it can process the notification that it
missed and for which it wanted to receive an IPI.  Before it does this, it needs
to clear notif_pending, so the kernel will send it an IPI.  These last parts are
handled in pop_user_ctx().

4.3: Preemption Specifics
-------------------------------
There's an issue with a preempted vcore getting restarted while a remote core
tries to restart that context.  They resolve this fight with a variety of VC
flags (VC_UTHREAD_STEALING).  Check out handle_preempt() in uthread.c.

4.4: Other trickiness
-------------------------------
Take all of these with a grain of salt - it's quite old.

4.4.1: Preemption -> deadlock
-------------------------------
One issue is that a context can be holding a lock that is necessary for the
userspace scheduler to manage preempted threads, and this context can be
preempted.  This would deadlock the scheduler.  To assist a process from
locking itself up, the kernel will toggle a preempt_pending flag in
procdata for that vcore before sending the actual preemption.  Whenever the
scheduler is grabbing one of these critical spinlocks, it needs to check that
flag first, and yield if a preemption is coming in.

Another option we may implement is for the process to be able to signal to the
kernel that it is in one of these ultra-critical sections by writing a magic
value to a specific register in the trapframe.  If there kernel sees this, it
will allow the process to run for a little longer.  The issue with this is
that the kernel would need to assume processes will always do this (malicious
ones will) and add this extra wait time to the worst case preemption time.

Finally, a scheduler could try to use non-blocking synchronization (no
spinlocks), or one of our other long-term research synchronization methods to
avoid deadlock, though we realize this is a pain for userspace for now.  FWIW,
there are some OSs out there with only non-blocking synchronization (I think).

4.4.2: Cascading and overflow
-------------------------------
There used to be issues with cascading interrupts (when contexts are still
running handlers).  Imagine a pagefault, followed by preempting the handler.
It doesn't make sense to run the preempt context after the page fault.
Earlier designs had issues where it was hard for a vcore to determine the
order of events and unmixing preemption, notification, and faults.  We deal
with this by having separate slots for preemption and notification, and by
treating faults as another form of notification.  Faulting while handling a
notification just leads to death.  Perhaps there is a better way to do that.

Another thing we considered would be to have two stacks - transition for
notification and an exception stack for faults.  We'd also need a fault slot
for the faulting trapframe.  This begins to take up even more memory, and it
is not clear how to handle mixed faults and notifications.  If you fault while
on the notification slot, then fine.  But you could fault for other reasons,
and then receive a notification.  And then if you fault in that handler, we're
back to where we started - might as well just kill them.

Another issue was overload.  Consider if vcore0 is set up to receive all
events.  If events come in faster than it can process them, it will both nest
too deep and process out of order.  To handle this, we only notify once, and
will not send future active notifications / interrupts until the process
issues an "end of interrupt" (EOI) for that vcore.  This is modelled after
hardware interrupts (on x86, at least).

4.4.3: Restarting a Preempted Notification
-------------------------------
Nowadays, to restart a preempted notification, you just restart the vcore.
The kernel does, either if it gives the process more cores or if userspace asked
it to with a sys_change_vcore().

4.4.4: Userspace Yield Races
-------------------------------
Imagine a vcore realizes it is getting preempted soon, so it starts to yield.
However, it is too slow and doesn't make it into the kernel before a preempt
message takes over.  When that vcore is run again, it will continue where it
left off and yield its core.  The desired outcome is for yield to fail, since
the process doesn't really want to yield that core.  To sort this out, yield
will take a parameter saying that the yield is in response to a pending
preemption.  If the phase is over (preempted and returned), the call will not
yield and simply return to userspace.

4.4.5: Userspace m_yield
-------------------------------
There are a variety of ways to implement an m_yield (yield the entire MCP).
We could have a "no niceness" yield - just immediately preempt, but there is a
danger of the locking business.  We could do the usual delay game, though if
userspace is requesting its yield, arguably we don't need to give warning. 

Another approach would be to not have an explicit m_yield call.  Instead, we
can provide a notify_all call, where the notification sent to every vcore is
to yield.  I imagine we'll have a notify_all (or rather, flags to the notify
call) anyway, so we can do this for now.

The fastest way will probably be the no niceness way.  One way to make this
work would be for vcore0 to hold all of the low-level locks (from 4.4.1) and
manually unlock them when it wakes up.  Yikes!

4.5: Random Other Stuff
-------------------------------
Pre-Notification issues: how much time does userspace need to clean up and
yield?  How quickly does the kernel need the core back (for scheduling
reasons)?

Part 5: Old Arguments about Processes vs Partitions
===============================
This is based on my interpretation of the cell (formerly what I thought was
called a partition).

5.1: Program vs OS
-------------------------------
A big difference is what runs inside the object.  I think trying to support
OS-like functionality is a quick path to unnecessary layers and complexity,
esp for the common case.  This leads to discussions of physical memory
management, spawning new programs, virtualizing HW, shadow page tables,
exporting protection rings, etc.

This unnecessarily brings in the baggage and complexity of supporting VMs,
which are a special case.  Yes, we want processes to be able to use their
resources, but I'd rather approach this from the perspective of "what do they
need?" than "how can we make it look like a real machine."  Virtual machines
are cool, and paravirtualization influenced a lot of my ideas, but they have
their place and I don't think this is it.

For example, exporting direct control of physical pages is a bad idea.  I
wasn't clear if anyone was advocating this or not.  By exposing actual machine
physical frames, we lose our ability to do all sorts of things (like swapping,
for all practical uses, and other VM tricks).  If the cell/process thinks it
is manipulating physical pages, but really isn't, we're in the VM situation of
managing nested or shadow page tables, which we don't want.

For memory, we'd be better off giving an allocation of a quantity frames, not
specific frames.  A process can pin up to X pages, for instance.  It can also
pick pages to be evicted when there's memory pressure.  There are already
similar ideas out there, both in POSIX and in ACPM.

Instead of mucking with faking multiple programs / entities within an cell,
just make more processes.  Otherwise, you'd have to export weird controls that
the kernel is doing anyway (and can do better!), and have complicated middle
layers.

5.2: Multiple "Things" in a "partition"
-------------------------------
In the process-world, the kernel can make a distinction between different
entities that are using a block of resources.  Yes, "you" can still do
whatever you want with your resources.  But the kernel directly supports
useful controls that you want. 
- Multiple protection domains are no problem.  They are just multiple
  processes.  Resource allocation is a separate topic.
- Processes can control one another, based on a rational set of rules.  Even
  if you have just cells, we still need them to be able to control one another
  (it's a sysadmin thing).

"What happens in a cell, stays in a cell."  What does this really mean?  If
it's about resource allocation and passing of resources around, we can do that
with process groups.  If it's about the kernel not caring about what code runs
inside a protection domain, a process provides that.  If it's about a "parent"
program trying to control/kill/whatever a "child" (even if it's within a cell,
in the cell model), you *want* the kernel to be involved.  The kernel is the
one that can do protection between entities.

5.3: Other Things
-------------------------------
Let the kernel do what it's made to do, and in the best position to do: manage
protection and low-level resources.

Both processes and partitions "have" resources.  They are at different levels
in the system.  A process actually gets to use the resources.  A partition is
a collection of resources allocated to one or more processes.

In response to this:

On 2009-09-15 at 22:33 John Kubiatowicz wrote:
> John Shalf wrote:  
> >
> > Anyhow, Barret is asking that resource requirements attributes be 
> > assigned on a process basis rather than partition basis.  We need
> > to justify why gang scheduling of a partition and resource
> > management should be linked.  

I want a process to be aware of it's specific resources, as well as the other
members of it's partition.  An individual process (which is gang-scheduled in
many-core mode) has a specific list of resources.  Its just that the overall
'partition of system resources' is separate from the list of specific
resources of a process, simply because there can be many processes under the
same partition (collection of resources allocated).

> >  
> Simplicity!
> 
> Yes, we can allow lots of options, but at the end of the day, the 
> simplest model that does what we need is likely the best. I don't
> want us to hack together a frankenscheduler.  

My view is also simple in the case of one address space/process per
'partition.'  Extending it to multiple address spaces is simply asking that
resources be shared between processes, but without design details that I
imagine will be brutally complicated in the Cell model.


Part 6: Use Cases
===============================
6.1: Matrix Multiply / Trusting Many-core app
-------------------------------
The process is created by something (bash, for instance).  It's parent makes
it runnable.  The process requests a bunch of cores and RAM.  The scheduler
decides to give it a certain amount of resources, which creates it's partition
(aka, chunk of resources granted to it's process group, of which it is the
only member).  The sysadmin can tweak this allocation via procfs.

The process runs on its cores in it's many-core mode.  It is gang scheduled,
and knows how many cores there are.  When the kernel starts the process on
it's extra cores, it passes control to a known spot in code (the ELF entry
point), with the virtual core id passed as a parameter.

The code runs from a single binary image, eventually with shared
object/library support.  It's view of memory is a virtual address space, but
it also can see it's own page tables to see which pages are really resident
(similar to POSIX's mincore()).

When it comes time to lose a core, or be completely preempted, the process is
notified by the OS running a handler of the process's choosing (in userspace).
The process can choose what to do (pick a core to yield, prepare to be
preempted, etc).

To deal with memory, the process is notified when it page faults, and keeps
its core.  The process can pin pages in memory.  If there is memory pressure,
the process can tell the kernel which pages to unmap.

This is the simple case.

6.2: Browser
-------------------------------
In this case, a process wants to create multiple protection domains that share
the same pool of resources.  Or rather, with it's own allocated resources.

The browser process is created, as above.  It creates, but does not run, it's
untrusted children.  The kernel will have a variety of ways a process can
"mess with" a process it controls.  So for this untrusted child, the parent
can pass (for example), a file descriptor of what to render, "sandbox" that
process (only allow a whitelist of syscalls, e.g. can only read and write
descriptors it has).  You can't do this easily in the cell model.

The parent can also set up a shared memory mapping / channel with the child.

For resources, the parent can put the child in a subdirectory/ subpartition
and give a portion of its resources to that subpartition.  The scheduler will
ensure that both the parent and the child are run at the same time, and will
give the child process the resources specified.  (cores, RAM, etc).

After this setup, the parent will then make the child "runnable".  This is why
we want to separate the creation from the runnability of a process, which we
can't do with the fork/exec model.

The parent can later kill the child if it wants, reallocate the resources in
the partition (perhaps to another process rendering a more important page),
preempt that process, whatever.

6.3: SMP Virtual Machines
-------------------------------
The main issue (regardless of paravirt or full virt), is that what's running
on the cores may or may not trust one another.  One solution is to run each
VM-core in it's own process (like with Linux's KVM, it uses N tasks (part of
one process) for an N-way SMP VM).  The processes set up the appropriate
shared memory mapping between themselves early on.  Another approach would be
to allow a many-cored process to install specific address spaces on each
core, and interpose on syscalls, privileged instructions, and page faults.
This sounds very much like the Cell approach, which may be fine for a VM, but
not for the general case of a process.

Or with a paravirtualized SMP guest, you could (similar to the L4Linux way,)
make any Guest OS processes actual processes in our OS.  The resource
allocation to the Guest OS partition would be managed by the parent process of
the group (which would be running the Guest OS kernel).  We still need to play
tricks with syscall redirection.

For full virtualization, we'd need to make use of hardware virtualization
instructions. Dealing with the VMEXITs, emulation, and other things is a real
pain, but already done.  The long range plan was to wait til the
http://v3vee.org/ project supported Intel's instructions and eventually
incorporate that.

All of these ways involve subtle and not-so-subtle difficulties.  The
Cell-as-OS mode will have to deal with them for the common case, which seems
brutal.  And rather unnecessary.
