Thanks for working on this Gabriele, that was long overdue, and thanks
to Dave for the reviews!
I have one question: afaik we still use ICS for emulator tests. I guess
try runs went fine but I wonder if that impacted test flakiness in any way.
Fabrice
On 01/08/2015 01:13 PM, Gabriele Svelto wrote:
> [cross-posting to dev-gaia because this will affect everybody]
>
> TL;DR I am about to land cgroup support; this changes the low-level
> mechanism we use to prioritize applications. If you see unsual
> slow-downs during application startup or when more than one app is
> active at the same time, leave a comment on bug 1081871 [1]. We'll back
> it out mercilessly if perceived performance regresses.
>
> ---
>
> Now for the long story. I'm delving in a bit of project history here
> because this topic is rather obscure to most and I'd like more people to
> be aware of it and of the reasoning behind our past and current choices.
>
> In the early days of the B2G project we were looking for a mechanism to
> prioritize applications' CPU usage. Our very first implementation relied
> on changing a process' nice value (bug 768832 [2]) but turned out to be
> broken as changing a process' nice value on Linux only affects the main
> thread.
>
> So we decided to try another mechanism that provided a reliable way to
> re-prioritize an entire process: control groups, cgroups in short [3].
> Control groups use a pseudo file-system that allows creating classes of
> applications with certain properties assigned to them, such as how much
> CPU should be allocated to the group. cgroups allow splitting CPU
> priority by group rather than by app which is very convenient(e.g. all
> background applications together should get no more than 5% of the total
> CPU time in the presence of a foreground app requiring as much CPU as
> possible).
>
> While they would have made a perfect fit for our requirements, ICS'
> cgroup implementation proved to be buggy as we found out in bug 861441
> [4]. While we might have worked around its bugs we feared the resulting
> system would be fragile. Instead we decided to keep using the tested and
> true nice values even though using them to re-prioritize an entire
> process required a lot of syscalls (which was expensive) and would
> expose us to rare race conditions.
>
> The resulting implementation worked for most cases but fell apart under
> extreme scenarios such as receiving a call with both high CPU usage and
> strong memory pressure (bug 870181 [5]). This was also fixed but only at
> the cost of a lot of added complexity in the process priority manager.
>
> Enter post-ICS kernels. cgroups now work properly, are obviously a
> better fit than nice values for CPU priority assignment, and also offer
> additional features such as altering an application swappiness which is
> handy on devices using zram. In this new scenario we decided it's time
> to switch to using cgroups for all our prioritization needs; this is
> happening in bug 1081871 [1].
>
> What does this mean to you? First of all switching an app priority
> should become a lot faster and should work reliably no matter how much
> load the phone is subject to. Second, the rigid segregation of processes
> within groups means it will be a lot harder for background apps to
> significantly slow down the phone; foreground apps should stay
> responsive at all times. Third, being able to balance CPU usage using
> relative proportions means we can now have a more fair allocation
> between the main process and content processes. Last but not least this
> will simplify the affected code a lot and shedding useless complexity is
> one of my favorite activities.
>
> One final note: if you're on an ICS device and you're on the master
> branch once bug 1081871 lands you might experience significant
> performance regressions. I will try to implement a workaround in bug
> 1119467 [6] so CC yourself there if you're affected. Geeksphone's
> devices (peak, keon) will also require some kernel modifications so I'll
> need to get them involved too.
>
> [1] Evaluate using cgroups instead of nice values for prioritizing processes
> https://bugzilla.mozilla.org/show_bug.cgi?id=1081871
> [2] Set oom_adj values for background/foreground content processes
> https://bugzilla.mozilla.org/show_bug.cgi?id=768832
> [3] https://www.kernel.org/doc/Documentation/cgroups/cgroups.txt
> [4] GonkHal::SetPriority does not set CPU priorities properly
> https://bugzilla.mozilla.org/show_bug.cgi?id=861441
> [5] Downgrade processes' CPU priorities when we receive a call
> https://bugzilla.mozilla.org/show_bug.cgi?id=870181
> [6] Implement a workaround to have working cgroup assignments on
> ICS-based devices
> https://bugzilla.mozilla.org/show_bug.cgi?id=1119467
>
>
>
> _______________________________________________
> dev-gaia mailing list
> [email protected]
> https://lists.mozilla.org/listinfo/dev-gaia
>
--
Fabrice Desré
b2g team
Mozilla Corporation
_______________________________________________
dev-b2g mailing list
[email protected]
https://lists.mozilla.org/listinfo/dev-b2g