On Thu, May 28, 2015 at 03:17:20PM +1000, Paul Mackerras wrote: > This builds on the ability to run more than one vcore on a physical > core by using the micro-threading (split-core) modes of the POWER8 > chip. Previously, only vcores from the same VM could be run together, > and (on POWER8) only if they had just one thread per core. With the > ability to split the core on guest entry and unsplit it on guest exit, > we can run up to 8 vcpu threads from up to 4 different VMs, and we can > run multiple vcores with 2 or 4 vcpus per vcore. > > Dynamic micro-threading is only available if the static configuration > of the cores is whole-core mode (unsplit), and only on POWER8. > > To manage this, we introduce a new kvm_split_mode struct which is > shared across all of the subcores in the core, with a pointer in the > paca on each thread. In addition we extend the core_info struct to > have information on each subcore. When deciding whether to add a > vcore to the set already on the core, we now have two possibilities: > (a) piggyback the vcore onto an existing subcore, or (b) start a new > subcore. > > Currently, when any vcpu needs to exit the guest and switch to host > virtual mode, we interrupt all the threads in all subcores and switch > the core back to whole-core mode. It may be possible in future to > allow some of the subcores to keep executing in the guest while > subcore 0 switches to the host, but that is not implemented in this > patch. > > This adds a module parameter called dynamic_mt_modes which controls > which micro-threading (split-core) modes the code will consider, as a > bitmap. In other words, if it is 0, no micro-threading mode is > considered; if it is 2, only 2-way micro-threading is considered; if > it is 4, only 4-way, and if it is 6, both 2-way and 4-way > micro-threading mode will be considered. The default is 6. > > With this, we now have secondary threads which are the primary thread > for their subcore and therefore need to do the MMU switch. These > threads will need to be started even if they have no vcpu to run, so > we use the vcore pointer in the PACA rather than the vcpu pointer to > trigger them. > > Signed-off-by: Paul Mackerras <paulus@xxxxxxxxx> Reviewed-by: David Gibson <david@xxxxxxxxxxxxxxxxxxxxx> -- David Gibson | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_ | _way_ _around_! http://www.ozlabs.org/~dgibson
Attachment:
pgp94CV7lUBbk.pgp
Description: PGP signature