On Thu, May 28, 2015 at 03:17:19PM +1000, Paul Mackerras wrote: > When running a virtual core of a guest that is configured with fewer > threads per core than the physical cores have, the extra physical > threads are currently unused. This makes it possible to use them to > run one or more other virtual cores from the same guest when certain > conditions are met. This applies on POWER7, and on POWER8 to guests > with one thread per virtual core. (It doesn't apply to POWER8 guests > with multiple threads per vcore because they require a 1-1 virtual to > physical thread mapping in order to be able to use msgsndp and the > TIR.) > > The idea is that we maintain a list of preempted vcores for each > physical cpu (i.e. each core, since the host runs single-threaded). > Then, when a vcore is about to run, it checks to see if there are > any vcores on the list for its physical cpu that could be > piggybacked onto this vcore's execution. If so, those additional > vcores are put into state VCORE_PIGGYBACK and their runnable VCPU > threads are started as well as the original vcore, which is called > the master vcore. > > After the vcores have exited the guest, the extra ones are put back > onto the preempted list if any of their VCPUs are still runnable and > not idle. > > This means that vcpu->arch.ptid is no longer necessarily the same as > the physical thread that the vcpu runs on. In order to make it easier > for code that wants to send an IPI to know which CPU to target, we > now store that in a new field in struct vcpu_arch, called thread_cpu. > > 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:
pgpaUXvQNEDEe.pgp
Description: PGP signature