[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [RFC 0/5] xen/arm: support big.little SoC
On 22/09/16 10:27, Peng Fan wrote: > On Thu, Sep 22, 2016 at 10:50:23AM +0200, Dario Faggioli wrote: >> On Thu, 2016-09-22 at 14:49 +0800, Peng Fan wrote: >>> On Wed, Sep 21, 2016 at 08:11:43PM +0100, Julien Grall wrote: >>>> >>>> Hi Stefano, >>>> >>>> On 21/09/2016 19:13, Stefano Stabellini wrote: >>>>> >>>>> On Wed, 21 Sep 2016, Julien Grall wrote: >>>>>> >>>>>> (CC a couple of ARM folks) >>>>>> >>>>>> On 21/09/16 11:22, George Dunlap wrote: >>>>>>> >>>>>>> On 21/09/16 11:09, Julien Grall wrote: >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> On 20/09/16 21:17, Stefano Stabellini wrote: >>>>>>>>> >>>>>>>>> On Tue, 20 Sep 2016, Julien Grall wrote: >>>>>>>>>> >>>>>>>>>> Hi Stefano, >>>>>>>>>> >>>>>>>>>> On 20/09/2016 20:09, Stefano Stabellini wrote: >>>>>>>>>>> >>>>>>>>>>> On Tue, 20 Sep 2016, Julien Grall wrote: >>>>>>>>>>>> >>>>>>>>>>>> Hi, >>>>>>>>>>>> >>>>>>>>>>>> On 20/09/2016 12:27, George Dunlap wrote: >>>>>>>>>>>>> >>>>>>>>>>>>> On Tue, Sep 20, 2016 at 11:03 AM, Peng Fan >>>>>>>>>>>>> <van.freenix@xxxxxxxxx> >>>>>>>>>>>>> wrote: >>>>>>>>>>>>>> >>>>>>>>>>>>>> On Tue, Sep 20, 2016 at 02:54:06AM +0200, Dario >>>>>>>>>>>>>> Faggioli >>>>>>>>>>>>>> wrote: >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> On Mon, 2016-09-19 at 17:01 -0700, Stefano >>>>>>>>>>>>>>> Stabellini wrote: >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> On Tue, 20 Sep 2016, Dario Faggioli wrote: >>>>>>>>>>>>>> I'd like to add a computing capability in >>>>>>>>>>>>>> xen/arm, like this: >>>>>>>>>>>>>> >>>>>>>>>>>>>> struct compute_capatiliby >>>>>>>>>>>>>> { >>>>>>>>>>>>>> ?? char *core_name; >>>>>>>>>>>>>> ?? uint32_t rank; >>>>>>>>>>>>>> ?? uint32_t cpu_partnum; >>>>>>>>>>>>>> }; >>>>>>>>>>>>>> >>>>>>>>>>>>>> struct compute_capatiliby cc= >>>>>>>>>>>>>> { >>>>>>>>>>>>>> ??{"A72", 4, 0xd08}, >>>>>>>>>>>>>> ??{"A57", 3, 0xxxx}, >>>>>>>>>>>>>> ??{"A53", 2, 0xd03}, >>>>>>>>>>>>>> ??{"A35", 1, ...}, >>>>>>>>>>>>>> } >>>>>>>>>>>>>> >>>>>>>>>>>>>> Then when identify cpu, we decide which cpu is >>>>>>>>>>>>>> big and which >>>>>>>>>>>>>> cpu is >>>>>>>>>>>>>> little >>>>>>>>>>>>>> according to the computing rank. >>>>>>>>>>>>>> >>>>>>>>>>>>>> Any comments? >>>>>>>>>>>>> >>>>>>>>>>>>> I think we definitely need to have Xen have some >>>>>>>>>>>>> kind of idea >>>>>>>>>>>>> the >>>>>>>>>>>>> order between processors, so that the user >>>>>>>>>>>>> doesn't need to >>>>>>>>>>>>> figure out >>>>>>>>>>>>> which class / pool is big and which pool is >>>>>>>>>>>>> LITTLE.????Whether >>>>>>>>>>>>> this >>>>>>>>>>>>> sort >>>>>>>>>>>>> of enumeration is the best way to do that I'll >>>>>>>>>>>>> let Julien and >>>>>>>>>>>>> Stefano >>>>>>>>>>>>> give their opinion. >>>>>>>>>>>> >>>>>>>>>>>> I don't think an hardcoded list of processor in Xen >>>>>>>>>>>> is the right >>>>>>>>>>>> solution. >>>>>>>>>>>> There are many existing processors and combinations >>>>>>>>>>>> for big.LITTLE >>>>>>>>>>>> so it >>>>>>>>>>>> will >>>>>>>>>>>> nearly be impossible to keep updated. >>>>>>>>>>>> >>>>>>>>>>>> I would expect the firmware table (device tree, >>>>>>>>>>>> ACPI) to provide >>>>>>>>>>>> relevant >>>>>>>>>>>> data >>>>>>>>>>>> for each processor and differentiate big from >>>>>>>>>>>> LITTLE core. >>>>>>>>>>>> Note that I haven't looked at it for now. A good >>>>>>>>>>>> place to start is >>>>>>>>>>>> looking >>>>>>>>>>>> at >>>>>>>>>>>> how Linux does. >>>>>>>>>>> >>>>>>>>>>> That's right, see >>>>>>>>>>> Documentation/devicetree/bindings/arm/cpus.txt. It >>>>>>>>>>> is >>>>>>>>>>> trivial to identify the two different CPU classes and >>>>>>>>>>> which cores >>>>>>>>>>> belong >>>>>>>>>>> to which class.t, as >>>>>>>>>> >>>>>>>>>> The class of the CPU can be found from the MIDR, there >>>>>>>>>> is no need to >>>>>>>>>> use the >>>>>>>>>> device tree/acpi for that. Note that I don't think >>>>>>>>>> there is an easy >>>>>>>>>> way in >>>>>>>>>> ACPI (i.e not in AML) to find out the class. >>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> It is harder to figure out which one is supposed to >>>>>>>>>>> be >>>>>>>>>>> big and which one LITTLE. Regardless, we could >>>>>>>>>>> default to using the >>>>>>>>>>> first cluster (usually big), which is also the >>>>>>>>>>> cluster of the boot >>>>>>>>>>> cpu, >>>>>>>>>>> and utilize the second cluster only when the user >>>>>>>>>>> demands it. >>>>>>>>>> >>>>>>>>>> Why do you think the boot CPU will usually be a big >>>>>>>>>> one? In the case >>>>>>>>>> of Juno >>>>>>>>>> platform it is configurable, and the boot CPU is a >>>>>>>>>> little core on r2 >>>>>>>>>> by >>>>>>>>>> default. >>>>>>>>>> >>>>>>>>>> In any case, what we care about is differentiate >>>>>>>>>> between two set of >>>>>>>>>> CPUs. I >>>>>>>>>> don't think Xen should care about migrating a guest >>>>>>>>>> vCPU between big >>>>>>>>>> and >>>>>>>>>> LITTLE cpus. So I am not sure why we would want to know >>>>>>>>>> that. >>>>>>>>> >>>>>>>>> No, it is not about migrating (at least yet). It is about >>>>>>>>> giving useful >>>>>>>>> information to the user. It would be nice if the user had >>>>>>>>> to choose >>>>>>>>> between "big" and "LITTLE" rather than "class 0x1" and >>>>>>>>> "class 0x100", or >>>>>>>>> even "A7" or "A15". >>>>>>>> >>>>>>>> I don't think it is wise to assume that we may have only 2 >>>>>>>> kind of CPUs >>>>>>>> on the platform. We may have more in the future, if so how >>>>>>>> would you >>>>>>>> name them? >>>>>>> >>>>>>> I would suggest that internally Xen recognize an arbitrary >>>>>>> number of >>>>>>> processor "classes", and order them according to more >>>>>>> powerful -> less >>>>>>> powerful.????Then if at some point someone makes a platform >>>>>>> with three >>>>>>> processors, you can say "class 0", "class 1" or "class >>>>>>> 2".????"big" would >>>>>>> be an alias for "class 0" and "little" would be an alias for >>>>>>> "class 1". >>>>>> >>>>>> As mentioned earlier, there is no upstreamed yet device tree >>>>>> bindings to know >>>>>> the "power" of a CPU (see [1] >>>>>> >>>>>>> >>>>>>> >>>>>>> And in my suggestion, we allow a richer set of labels, so >>>>>>> that the user >>>>>>> could also be more specific -- e.g., asking for "A15" >>>>>>> specifically, for >>>>>>> example, and failing to build if there are no A15 cores >>>>>>> present, while >>>>>>> allowing users to simply write "big" or "little" if they want >>>>>>> simplicity >>>>>>> / things which work across different platforms. >>>>>> >>>>>> Well, before trying to do something clever like that (i.e >>>>>> naming "big" and >>>>>> "little"), we need to have upstreamed bindings available to >>>>>> acknowledge the >>>>>> difference. AFAICT, it is not yet upstreamed for Device Tree >>>>>> (see [1]) and I >>>>>> don't know any static ACPI tables providing the similar >>>>>> information. >>>>> >>>>> I like George's idea that "big" and "little" could be just >>>>> convenience >>>>> aliases. Of course they are predicated on the necessary device >>>>> tree >>>>> bindings being upstream. We don't need [1] to be upstream in >>>>> Linux, just >>>>> the binding: >>>>> >>>>> http://marc.info/?l=linux-arm-kernel&m=147308556729426&w=2 >>>>> >>>>> which has already been acked by the relevant maintainers. >>>> >>>> This is device tree only. What about ACPI? >>>> >>>>> >>>>> >>>>> >>>>>> >>>>>> I had few discussions and????more thought about big.LITTLE >>>>>> support in Xen. The >>>>>> main goal of big.LITTLE is power efficiency by moving task >>>>>> around and been >>>>>> able to idle one cluster. All the solutions suggested >>>>>> (including mine) so far, >>>>>> can be replicated by hand (except the VPIDR) so they are mostly >>>>>> an automatic >>>>>> way. This will also remove the real benefits of big.LITTLE >>>>>> because Xen will >>>>>> not be able to migrate vCPU across cluster for power >>>>>> efficiency. >>>>> >>>>> The goal of the architects of big.LITTLE might have been power >>>>> efficiency, but of course we are free to use any features that >>>>> the >>>>> hardware provides in the best way for Xen and the Xen community. >>>> >>>> This is very dependent on how the big.LITTLE has been implemented >>>> by the >>>> hardware. Some platform can not run both big and LITTLE cores at >>>> the same >>>> time. You need a proper switch in the firmware/hypervisor. >>>> >>>>> >>>>> >>>>>> >>>>>> If we care about power efficiency, we would have to handle >>>>>> seamlessly >>>>>> big.LITTLE in Xen (i.e a guess would only see a kind of CPU). >>>>>> This arise quite >>>>>> few problem, nothing insurmountable, similar to migration >>>>>> across two platforms >>>>>> with different micro-architecture (e.g processors): errata, >>>>>> features >>>>>> supported... The guest would have to know the union of all the >>>>>> errata (this is >>>>>> done so far via the MIDR, so we would a PV way to do it), and >>>>>> only the >>>>>> intersection of features would be exposed to the guest. This >>>>>> also means the >>>>>> scheduler would have to be modified to handle power efficiency >>>>>> (not strictly >>>>>> necessary at the beginning). >>>>>> >>>>>> I agree that a such solution would require some work to >>>>>> implement, although >>>>>> Xen will have a better control of the energy consumption of the >>>>>> platform. >>>>>> >>>>>> So the question here, is what do we want to achieve with >>>>>> big.LITTLE? >>>>> >>>>> I don't think that handling seamlessly big.LITTLE in Xen is the >>>>> best way >>>>> to do it in the scenarios where Xen on ARM is being used today. I >>>>> understand the principles behind it, but I don't think that it >>>>> will lead >>>>> to good results in a virtualized environment, where there is more >>>>> activity and more vcpus than pcpus. >>>> >>>> Can you detail why you don't think it will give good results? >>>> >>>>> >>>>> >>>>> What we discussed in this thread so far is actionable, and gives >>>>> us >>>>> big.LITTLE support in a short time frame. It is a good fit for >>>>> Xen on >>>>> ARM use cases and still leads to lower power consumption with an >>>>> wise >>>>> allocation of big and LITTLE vcpus and pcpus to guests. >>>> >>>> How this would lead to lower power consumption? If there is nothing >>>> running >>>> of the processor we would have a wfi loop which will never put the >>>> physical >>>> CPU in deep sleep. The main advantage of big.LITTLE is too be able >>>> to switch >>>> off a cluster/cpu when it is not used. >>>> >>>> Without any knowledge in Xen (such as CPU freq), I am afraid the >>>> the power >>>> consumption will still be the same. >>>> >>>>> >>>>> >>>>> I would start from this approach, then if somebody comes along >>>>> with a >>>>> plan to implement a big.LITTLE switcher in Xen, I welcome her to >>>>> do it >>>>> and I would be happy to accept the code in Xen. We'll just make >>>>> it >>>>> optional. >>>> >>>> I think we are discussing here a simple design for big.LITTLE. I >>>> never asked >>>> Peng to do all the work. I am worry that if we start to expose the >>>> big.LITTLE >>>> to the userspace it will be hard in the future to step back from >>>> it. >>> >>> Hello Julien, >>> >>> >>> I prefer the simple doable method, and As Stefano said, actionable. >>> >> Yep, this is a very good starting point, IMO. >> >>> ??- introduce a hypercall interface to let xl can get the different >>> classes cpu info. >>> >> +1 >> >>> ??- Use vcpuclass in xl cfg file to let user create different vcpus >>> >> Yep. >> >>> ??- extract cpu computing cap from dts to differentiate cpus. As you >>> said, bindings >>> ??????not upstreamed. But this is not the hardpoint, we could change the >>> info, whether >>> ??????dmips or cap in future. >>> >> Yes (or I should say, "whatever", as I know nothing about all >> this! :-P) >> >>> ??- use cpu hard affinity to block vcpu scheduling bwtween little and >>> big pcpu. >>> >> "to block vcpu scheduling within the specified classes, for each vcpu" >> >> But, again, yes. >> >>> ??- block user setting vcpu hard affinity bwtween big and LITTLE. >>> >> "between the specified class" >> >> Indeed. >> >>> ??- only hard affinity seems enough, no need soft affinity. >>> >> Correct. Just don't care at all and don't touch soft affinity for now. >> >>> Anyway, for vcpu scheduling bwtween big and LITTLE, if this is the >>> right >>> direction and you have an idea on how to implement, I could follow >>> you on >>> enabling this feature with you leading the work. I do not have much >>> idea on this. >>> >> This can come later, either as an enhancement of this affinity based >> solution, or being implemented on top of it. >> >> In any case, let's start with the affinity based solution for now. It's >> a good level support already, and a nice first step toward future >> improvements. >> >> Oh, btw, please don't throw away this cpupool patch series either! > > Ok -:) > >> >> A feature like `xl cpupool-biglittle-split' can still be interesting, > > "cpupool-cluster-split" maybe a better name? I think we should name this however we name the different types of cpus. i.e., if we're going to call these "cpu classes", then we should call this "cpupool-cpuclass-split" or something. -George _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |