Can a host OS user process create a zillion BHyVe VM:s and microcontrol them?

Peter Grehan grehan at freebsd.org
Sun Dec 7 02:25:40 UTC 2014


> Can the following under any circumstance be done with BHyVe?

  Depends on how you define "any" :)

> BHyVe_sandbox* s = BHyVe_createSandbox(100KB RAM, 2 CPU cores,void*
> pointer to the audio codec binary code,int size of the same code);
>
> and then pass in data for procedure invocation like BHyVe_call(s,
> "encoder_iterate",   my arguments);

  bhyve provides what looks like a bare-metal system. While you can 
inject code and register state (ala bhyveload/grub-bhyve), the code has 
to be essentially an operating system, since the only interface provided 
is hardware.

  For example, to run with > 1 CPUs, you would have to program APIC 
registers to startup up additional CPUs - very much less friendly than 
pthread_create() in a POSIX environment.

> And I'd have 50 000 of these running simultaneously on one machine, but
> their respective heap size is 100KB each so that's only 5GB RAM in total.
>
> As I get more data to encode from the network from any of the 50 000
> audio streams I'm listening to, I feed the respective audio encoder
> instance with the respective data with it, reactively.
>
> Key characteristics here are
>   * How light a BHyVe instance is (like, does a BHyVe instance require
> allocation of any device file or FD otherwise), and

  Not too much. It requires an amount of kernel memory for guest data 
structures, maybe in the order of 10s of KBs.

>   * How lightweight trampolines between OS host process and guest code is,

  You have to do a VT-x context switch into the guest each time you'd 
want to run it - that's a few thousand cycles.

>   * I guess, if an OS scheduler context switch is needed for switching
> between my host "my_audio_encoding_service_program.c" code and the guest
> library code - can this be done like 100 000 times in a second.

  It could be done, but perhaps something like FreeBSD's capsicum 
sandboxing would be a better fit for this type of task than a VM.

  That's not to day it couldn't be done, just that it's a lot of work to 
get there.

later,

Peter.



More information about the freebsd-virtualization mailing list