Re: [PATCH -mm -v6 1/9] mm, swap: Make swap cluster size same of THP size on x86_64

From: Matthew Wilcox
Date: Wed Mar 08 2017 - 08:21:01 EST


On Wed, Mar 08, 2017 at 03:26:05PM +0800, Huang, Ying wrote:
> In this patch, the size of the swap cluster is changed to that of the
> THP (Transparent Huge Page) on x86_64 architecture (512). This is for
> the THP swap support on x86_64. Where one swap cluster will be used to
> hold the contents of each THP swapped out. And some information of the
> swapped out THP (such as compound map count) will be recorded in the
> swap_cluster_info data structure.
>
> For other architectures which want THP swap support,
> ARCH_USES_THP_SWAP_CLUSTER need to be selected in the Kconfig file for
> the architecture.
>
> In effect, this will enlarge swap cluster size by 2 times on x86_64.
> Which may make it harder to find a free cluster when the swap space
> becomes fragmented. So that, this may reduce the continuous swap space
> allocation and sequential write in theory. The performance test in 0day
> shows no regressions caused by this.

Well ... if there are no regressions found, why not change it
unconditionally? The value '256' seems relatively arbitrary (I bet it
was tuned by some doofus with a 486, 8MB RAM and ST506 hard drive ...
it certainly hasn't changed since git started in 2005)

Might be worth checking with the PowerPC people to see if their larger
pages causes this smaller patch to perform badly:

diff --git a/mm/swapfile.c b/mm/swapfile.c
--- a/mm/swapfile.c
+++ b/mm/swapfile.c
@@ -199,7 +199,7 @@ static void discard_swap_cluster(struct swap_info_struct *si,
}
}

-#define SWAPFILE_CLUSTER 256
+#define SWAPFILE_CLUSTER HPAGE_PMD_NR
#define LATENCY_LIMIT 256

static inline void cluster_set_flag(struct swap_cluster_info *info,