Hello all,
I have an x86 based platform which is running android. I wanted to play around with the EAS patches to see if it would improve power numbers on it.
I had a few basic questions regarding this: 1) Can EAS be used with x86 based platforms ? I see some arm/arm64 energy model related patches in the eas integration tree (git://linux-arm.org/linux-power.git). However, there aren't any x86 specific changes present. Is that because no x86 specific changes are required or just that it is untested there ?
2) Is it expected that EAS would show significant power savings on SMP systems or just on HMP systems ?
3) Would there be any cpufreq/cpuidle integration be required for x86 specifically ? If so, would I need to base them on the arm stuff or is there any other reference code.
4) Are there other in-flight patches that need to be applied over the patches in the eas integration tree for best results ?
If indeed the EAS patches can be used on x86. then I would be interested in integrating and providing results on my platform. Please guide.
Regards, Darren
Hi Darren,
On 01/02/17 16:37, Darren Greene wrote:
Hello all,
I have an x86 based platform which is running android. I wanted to play around with the EAS patches to see if it would improve power numbers on it.
This sounds very interesting!
I had a few basic questions regarding this:
- Can EAS be used with x86 based platforms ? I see some arm/arm64
energy model related patches in the eas integration tree (git://linux-arm.org/linux-power.git). However, there aren't any x86 specific changes present. Is that because no x86 specific changes are required or just that it is untested there ?
EAS is designed to work on heterogeneous dual-cluster systems but we also support a dual-cluster ARM64 SMP platform (Hikey) in our integration repo. So EAS currently operates in MC and DIE sched_domain level. It attempts to do a better job of packing vs spreading tasks based on PM related energy model data.
SMT is currently not supported though.
A list of x86 specific changes:
Create an energy model for your processor similar to the ARM64 example and provide it to the task scheduler via struct sched_domain_topology_level x86_topology[].
Create a frequency invariant engine (based on X86_FEATURE_APERFMPERF ?) and wire it up to the task scheduler.
Set the EAS sched_domain flag SD_SHARE_CAP_STATES indicating which cores are sharing a DVFS domain.
Depending on the actual cpu topology and PM subsystem design there might be more to do.
- Is it expected that EAS would show significant power savings on SMP
systems or just on HMP systems ?
We expect to see power savings even on SMP platforms due to better control over packing vs spreading of tasks.
- Would there be any cpufreq/cpuidle integration be required for x86
specifically ? If so, would I need to base them on the arm stuff or is there any other reference code.
You would need to use cpufreq driver with target_index() callback (e.g. acpi-cpufreq), so not the current Intel P-State driver. Turbo Boost is not supported, you would have to disable it.
- Are there other in-flight patches that need to be applied over the
patches in the eas integration tree for best results ?
Besides the EAS integration tree we have the EAS product integration which has additional features. Chris' email '[Eas-dev] EAS 1.2 Pre-alpha Experimental Branch now available for Pixel/Pixel XL' he sent out yesterday on eas-dev has more on this.
If indeed the EAS patches can be used on x86. then I would be interested in integrating and providing results on my platform. Please guide.
Let us know if we can support you further on this.
Cheers,
-- Dietmar
[...]