mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 19:51:31 -04:00
Apply memory policies to top two highest zones when highest zone is ZONE_MOVABLE
The NUMA layer only supports NUMA policies for the highest zone. When ZONE_MOVABLE is configured with kernelcore=, the the highest zone becomes ZONE_MOVABLE. The result is that policies are only applied to allocations like anonymous pages and page cache allocated from ZONE_MOVABLE when the zone is used. This patch applies policies to the two highest zones when the highest zone is ZONE_MOVABLE. As ZONE_MOVABLE consists of pages from the highest "real" zone, it's always functionally equivalent. The patch has been tested on a variety of machines both NUMA and non-NUMA covering x86, x86_64 and ppc64. No abnormal results were seen in kernbench, tbench, dbench or hackbench. It passes regression tests from the numactl package with and without kernelcore= once numactl tests are patched to wait for vmstat counters to update. akpm: this is the nasty hack to fix NUMA mempolicies in the presence of ZONE_MOVABLE and kernelcore= in 2.6.23. Christoph says "For .24 either merge the mobility or get the other solution that Mel is working on. That solution would only use a single zonelist per node and filter on the fly. That may help performance and also help to make memory policies work better." Signed-off-by: Mel Gorman <[email protected]> Acked-by: Lee Schermerhorn <[email protected]> Tested-by: Lee Schermerhorn <[email protected]> Acked-by: Christoph Lameter <[email protected]> Cc: Andi Kleen <[email protected]> Cc: Paul Mundt <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
This commit is contained in:
parent
8e92f21ba3
commit
b377fd3982
4 changed files with 33 additions and 2 deletions
|
|
@ -149,7 +149,7 @@ static struct zonelist *bind_zonelist(nodemask_t *nodes)
|
|||
lower zones etc. Avoid empty zones because the memory allocator
|
||||
doesn't like them. If you implement node hot removal you
|
||||
have to fix that. */
|
||||
k = policy_zone;
|
||||
k = MAX_NR_ZONES - 1;
|
||||
while (1) {
|
||||
for_each_node_mask(nd, *nodes) {
|
||||
struct zone *z = &NODE_DATA(nd)->node_zones[k];
|
||||
|
|
|
|||
Loading…
Reference in a new issue