mm: swap: Optimize per-order cluster scanning
Add CLUSTER_FLAG_SKIP_SCAN cluster flag, which is applied to a cluster
under 1 of 2 conditions. When present, the cluster will be skipped
during a scan.
- When the number of free entries is less than the number of entries
that would be required for a new allocation of the order that the
cluster serves.
- When scanning completes for the cluster, and no further scanners are
active for the cluster and no swap entries were freed for the cluster
since the last scan began. In this case, it has been proven that there
are no contiguous free entries of sufficient size to allcoate the
order that the cluster serves. In this case the cluster is made
eligible for scanning again when the next entry is freed.
The latter is implemented to permit multiple CPUs to scan the same
cluster, which in turn garrantees that if there is a free block
available in a cluster allocated for the desired order then it will be
allocated on a first come, first served basis.
As a result, the number of active scanners for a cluster must be
tracked, costing 4 bytes per cluster.
Signed-off-by:
Ryan Roberts <ryan.roberts@arm.com>
Loading
Please register or sign in to comment