| From: Baoquan He <bhe@redhat.com> |
| Subject: mm/swap: skip scanning cluster range if it's empty cluster |
| Date: Wed, 5 Feb 2025 17:27:13 +0800 |
| |
| Since ci->lock has been taken when isolating cluster from |
| si->free_clusters or taking si->percpu_cluster->next[order], it's |
| unnecessary to scan and check the cluster range availability if i'ts empty |
| cluster, and this can accelerate the huge page swapping. |
| |
| Link: https://lkml.kernel.org/r/20250205092721.9395-5-bhe@redhat.com |
| Signed-off-by: Baoquan He <bhe@redhat.com> |
| Cc: Chris Li <chrisl@kernel.org> |
| Cc: Kairui Song <ryncsn@gmail.com> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| --- |
| |
| mm/swapfile.c | 3 +++ |
| 1 file changed, 3 insertions(+) |
| |
| --- a/mm/swapfile.c~mm-swap-skip-scanning-cluster-range-if-its-empty-cluster |
| +++ a/mm/swapfile.c |
| @@ -730,6 +730,9 @@ static bool cluster_scan_range(struct sw |
| unsigned long offset, end = start + nr_pages; |
| unsigned char *map = si->swap_map; |
| |
| + if (cluster_is_empty(ci)) |
| + return true; |
| + |
| for (offset = start; offset < end; offset++) { |
| switch (READ_ONCE(map[offset])) { |
| case 0: |
| _ |