jail/vimage level virtualisation requirements.

Julian Elischer julian at elischer.org
Fri Oct 19 10:12:15 PDT 2007


Bakul Shah wrote:
>> Here are some possibilities for things..
>>
>> most of these are somewhat supported in one way or another somewhere.
>>
>>   be able to specify a different root for the virtual machine.
>>   be able to specify a different output for "uname".
>>   be able to specify a different network address.
>>   be able to specify a different routing table. (+)
>>   be able to specify a completely different network universe (*)
>>   be able to dedicate an interface to it
>>   be able to have a separate PID space for it.
>>   be able to specify a separate UID space for it
>>   be able to specify a CPU maximum quota
>>   be able to confine it to some set of CPUs
>>   be able to have different mount tables for it
>>   be able to specify a different security level for it.
>>
>> (+) without necessarily having a completely different universe. (see below).
>>
>> (*) e.g. being able to have two virtual have the machine get confused.
>>
>> A) this is not an exhaustive list
>> B) this list also may contain items we don't implement.
> 
> Sounds like you are talking about something like rfork()
> except that instead of process resources you want to
> manipulate machine resources.
> 
>> A second question is "what sort of interface would make sense for this?"
>> something like the "jail" program possibly.
> 
> How about something like
> 
>     machine_rfork(int n, Resource* resources)
> 
> where a Resource is one of
>     cpu
>     cpu quota
>     device
>     network interface
>     disk
>     pid space
>     uid space
>     root
>     route table
>     syscalls
>     phys. memory quota
>     ...
> 
> The child starts with the resources specified.  The new
> "machine" would be minimally initialized and the child would
> have to act like init(1) and do further initialization to
> bring it up all the way.  A resource may be exclusive (the
> parent loses it) or shared (with some sharing policy) or
> newly created (where that makes sense).
> 
> Presumably there would be a way to enumerate all the
> resources that can be used in machine_rfork().
> 
> If you allow private virtual net interfaces you may also wish
> allow a way to create virtual networks.  So for example mach0
> can create mach1, mach2 and mach3 and have them be on the
> same virtual ethernet.  Mach{1,2,3} have no way of knowing
> they are not connected to a real network (except indirectly
> via performance measurements).

As a general comment People interested in this thread should look 
at the 'vimage' work.
It does much of this already.

  http://imunes.tel.fer.hr/virtnet/

> 
>> However how about the possibility of a way of "pre-packaging" a machine?
>> or snapshotting a setup?
> 
> Ideally snapshotting is done in a way that allows migrating a
> virtual machine to a different physical machine ("hibernate"
> to disk, and move state to a different machine and "wake up"
> from disk).
> 
> Prepackaging can be done all (or almost all) in a user
> process.  One easy thing would be to extend mtree to fetch
> files from somewhere to populate or update a new machine.



More information about the freebsd-arch mailing list