staging: ion: Optimize zeroing when allocating from system heap
Currently when allocating from system heap each page is individually
mapped and zero'ed in the page pool code. Under high memory pressure when
we allocate a lot of small pages this becomes a bottleneck. Instead,
do the zeroing in one fell swoop at the end of allocating all the pages
but only for the pages that are not already zero'ed and sync'ed (pages
coming from the page pool).
Test results
------------
Time recorded for allocating 20 x 19MB ION buffers from System heap with
forced 4K page allocations (all pages allocated was order-0) right after
boot to Android homescreen using performance kernel configuration.
Before change (non-cached allocations):
Run 1: 768ms
Run 2: 752ms
Run 3: 759ms
Before change (cached allocations):
Run 1: 726ms
Run 2: 769ms
Run 3: 645ms
After change (cached allocations):
Run 1: 262ms
Run 2: 249ms
Run 3: 310ms
After change (non-cached allocations):
Run 1: 275ms
Run 2: 234ms
Run 3: 259ms
Time recorded for allocating 20 x 19MB ION buffers from System heap (with no
forced page size) right after boot to Android homescreen using
performance kernel configuration. Run 1 is taken right after boot while
run 2 and 3 are subsequent runs without reboot between.
Before change (non-cached allocations):
Run 1: 181ms
Run 2: 1ms
Run 3: 1ms
Before change (cached allocations):
Run 1: 220ms
Run 2: 1ms
Run 3: 2ms
After change (non-cached allocations):
Run 1: 166ms
Run 2: 1ms
Run 3: 1ms
After change (cached allocations):
Run 1: 170ms
Run 2: 1ms
Run 3: 3ms
CRs-fixed: 660049
Change-Id: I8dcfdb4adb8d5f4480768f951523fa5c64db87b1
Signed-off-by:
Olav Haugan <ohaugan@codeaurora.org>
Loading
Please register or sign in to comment