Frame rate is artificially low on Diamondville Intel Atom systems due to aggressive power management
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
Mir |
Fix Released
|
Medium
|
Daniel van Vugt | ||
mir (Ubuntu) |
Fix Released
|
Undecided
|
Unassigned |
Bug Description
Running a server and a few clients on an Atom N270 (requires vivid) is very stuttery and apparently limited to around 20 FPS.
However this limitation is a bug. Firstly I notice the system is still 70% idle according to top. And if I drag the mouse constantly over a surface or move a window constantly, the rendering (of everything) becomes perfectly smooth ~60 FPS. Also using --compositor-
So we have a scheduling problem and forcing re-compositing via input is working around it. Obviously the clients themselves are not able to wake up the compositor frequently enough to ensure new frames get scheduled. However if I wake up the compositor using demo-shell mouse gestures then all is fast and smooth.
This seems to be the same kind of scheduling problem also observed on higher-end systems when the compositor buffer pipeline is reduced --> bug 1377872
Related branches
- Alan Griffiths: Approve
- Kevin DuBois (community): Approve
- Mir CI Bot: Approve (continuous-integration)
- Cemil Azizoglu (community): Approve
-
Diff: 1547 lines (+1049/-22)24 files modifiedinclude/client/mir_toolkit/mir_buffer_stream.h (+0/-1)
include/client/mir_toolkit/mir_surface.h (+0/-1)
include/core/mir_toolkit/common.h (+7/-4)
src/client/CMakeLists.txt (+1/-0)
src/client/buffer_stream.cpp (+111/-6)
src/client/buffer_stream.h (+12/-1)
src/client/error_stream.cpp (+6/-0)
src/client/error_stream.h (+2/-0)
src/client/frame_clock.cpp (+156/-0)
src/client/frame_clock.h (+73/-0)
src/client/mir_buffer_stream_api.cpp (+8/-1)
src/client/mir_surface.cpp (+113/-5)
src/client/mir_surface.h (+10/-0)
src/client/mir_surface_api.cpp (+1/-1)
src/client/screencast_stream.cpp (+8/-0)
src/client/screencast_stream.h (+2/-0)
src/include/client/mir/mir_buffer_stream.h (+2/-0)
tests/acceptance-tests/test_client_library.cpp (+5/-0)
tests/acceptance-tests/test_latency.cpp (+27/-2)
tests/include/mir/test/doubles/mock_mir_buffer_stream.h (+2/-0)
tests/unit-tests/client/CMakeLists.txt (+1/-0)
tests/unit-tests/client/test_client_mir_surface.cpp (+81/-0)
tests/unit-tests/client/test_frame_clock.cpp (+420/-0)
tests/unit-tests/platforms/android/server/test_hwc_device.cpp (+1/-0)
description: | updated |
tags: | added: performance |
Changed in mir: | |
assignee: | Daniel van Vugt (vanvugt) → nobody |
description: | updated |
Changed in mir: | |
assignee: | nobody → Cemil Azizoglu (cemil-azizoglu) |
Changed in mir: | |
milestone: | 0.9.0 → 0.10.0 |
Changed in mir: | |
assignee: | Cemil Azizoglu (cemil-azizoglu) → nobody |
Changed in mir: | |
milestone: | 0.10.0 → none |
summary: |
- Frame rate is artificially low on some systems + Frame rate is artificially low on some systems due to Intel C-States |
Changed in mir: | |
importance: | High → Medium |
description: | updated |
summary: |
- Frame rate is artificially low on some systems due to Intel C-States + Frame rate is artificially low on older Intel Atom systems due to + aggressive power management |
summary: |
- Frame rate is artificially low on older Intel Atom systems due to + Frame rate is artificially low on Diamondville Intel Atom systems due to aggressive power management |
Changed in mir: | |
milestone: | 1.0.0 → 0.26.0 |
tags: | added: atom |
Changed in mir: | |
status: | Fix Committed → Fix Released |
Workaround: Start an _additional_ client that is not sync'd to vblank (frame dropping): client_ egltriangle -q -n -s 1x1 &
mir_demo_
This speeds up compositing and all clients to the full frame rate. Just like bug 1377872 :)