omapfb module floods system with udev events on samsung galaxy nexus
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
upstart |
Fix Released
|
Undecided
|
Unassigned | ||
linux (Ubuntu) |
Invalid
|
Undecided
|
Colin Ian King | ||
Saucy |
Invalid
|
Undecided
|
Unassigned | ||
Trusty |
Invalid
|
Undecided
|
Colin Ian King | ||
lxc-android-config (Ubuntu) |
Invalid
|
Undecided
|
Dimitri John Ledkov | ||
Saucy |
Invalid
|
Undecided
|
Unassigned | ||
Trusty |
Invalid
|
Undecided
|
Dimitri John Ledkov | ||
powerd (Ubuntu) |
Fix Released
|
Undecided
|
Unassigned | ||
Saucy |
Fix Released
|
Undecided
|
Unassigned | ||
Trusty |
Fix Released
|
Undecided
|
Unassigned | ||
systemd (Ubuntu) |
Fix Released
|
High
|
Martin Pitt | ||
Saucy |
Fix Released
|
Undecided
|
Unassigned | ||
Trusty |
Fix Released
|
High
|
Martin Pitt |
Bug Description
[SRU justification]
On the Galaxy Nexus (maguro) phone, the video driver wakes up udev and upstart 60 times a second sending "vsync" uevents. This is a deeply flawed driver design, but we can't easily change it because the userspace side of the driver relies on the current behavior. The only feasible workaround is to have udev filter out these events, so that the device isn't kept busy (with about 5% load) waking up system daemons.
[Test case]
1. Install the updated package on an x86 system.
2. Reboot.
3. Confirm that the machine boots successfully.
4. Install the updated package on a non-maguro arm system.
5. Reboot.
6. Confirm that the machine boots successfully.
7. Install the updated package on a maguro system.
8. Reboot.
9. Confirm that the machine boots successfully.
10. Confirm using 'top' that udev is not taking up a significant percentage of the CPU time.
[Regression potential]
This is a change to a core system daemon, and while the code change is guarded by an architecture check, we should be careful about updating such a core package which could cause regressions, in particular on other ARM devices. The test case should guard against this by ensuring we verify the effect of this change on non-maguro systems prior to releasing the SRU.
Playing an mp4 on a Samsung Galaxy Nexus using today's image (3 Oct 2013) for 30 minutes I observed that init is busy and also consuming heap quite rapidly.
Attached is the output from running health-check (found in PPA:colin-
Key points:
1. messages being read/written at ~600 messages a second, hence the high context switch rate and ~4.9% CPU load.
2. heap consumption: ~30K a second using brk() and 2K a second via mmap
To reproduce:
Install health-check:
sudo add-apt-repository ppa:colin-
sudo apt-get update && sudo apt-get install health-check
Download a large mp4 to the phone. Keep screen from blanking using:
sudo powerd-cli display on bright &
then play the mp4:
dbus-launch mediaplayer-app test.mp4 --desktop_
And then observe that init is busy for 300 seconds:
ps -e | grep init
1 ? 00:02:56 init
348 ? 00:00:00 init
1114 ? 00:03:22 init
sudo health-check -p 1114 -d 300
Attached are my results for a 30 minute run.
Changed in upstart (Ubuntu): | |
importance: | Undecided → High |
Changed in lxc-android-config (Ubuntu): | |
status: | In Progress → Invalid |
tags: | added: patch |
tags: | removed: verification-needed |
Changed in linux (Ubuntu Saucy): | |
status: | New → Invalid |
Changed in lxc-android-config (Ubuntu Saucy): | |
status: | New → Invalid |
Changed in powerd (Ubuntu Saucy): | |
status: | New → Fix Released |
Colin, could you please put upstart into debug mode with 'initctl log-priority debug', and capture the log output from upstart when running this test, so we can see what events upstart is spending its time on?