Commit 913fff31 authored by Kairui Song's avatar Kairui Song Committed by Andrew Morton
Browse files

mm, swap: remove fragment clusters counter

It was used for calculating the iteration number when the swap allocator
wants to scan the whole fragment list.  Now the allocator only scans one
fragment cluster at a time, so no one uses this counter anymore.

Remove it as a cleanup; the performance change is marginal:

Build linux kernel using 10G ZRAM, make -j96, defconfig with 2G cgroup
memory limit, on top of tmpfs, 64kB mTHP enabled:

Before:  sys time: 6278.45s
After:   sys time: 6176.34s

Change to 8G ZRAM:

Before:  sys time: 5572.85s
After:   sys time: 5531.49s

Link: https://lkml.kernel.org/r/20250806161748.76651-3-ryncsn@gmail.com


Signed-off-by: default avatarKairui Song <kasong@tencent.com>
Reviewed-by: default avatarNhat Pham <nphamcs@gmail.com>
Acked-by: default avatarChris Li <chrisl@kernel.org>
Cc: Baoquan He <bhe@redhat.com>
Cc: Barry Song <baohua@kernel.org>
Cc: "Huang, Ying" <ying.huang@linux.alibaba.com>
Cc: Kemeng Shi <shikemeng@huaweicloud.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
parent b25786b4
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -310,7 +310,6 @@ struct swap_info_struct {
					/* list of cluster that contains at least one free slot */
	struct list_head frag_clusters[SWAP_NR_ORDERS];
					/* list of cluster that are fragmented or contented */
	atomic_long_t frag_cluster_nr[SWAP_NR_ORDERS];
	unsigned int pages;		/* total of usable pages of swap */
	atomic_long_t inuse_pages;	/* number of those currently in use */
	struct swap_sequential_cluster *global_cluster; /* Use one global cluster for rotating device */
+0 −7
Original line number Diff line number Diff line
@@ -470,11 +470,6 @@ static void move_cluster(struct swap_info_struct *si,
	else
		list_move_tail(&ci->list, list);
	spin_unlock(&si->lock);

	if (ci->flags == CLUSTER_FLAG_FRAG)
		atomic_long_dec(&si->frag_cluster_nr[ci->order]);
	else if (new_flags == CLUSTER_FLAG_FRAG)
		atomic_long_inc(&si->frag_cluster_nr[ci->order]);
	ci->flags = new_flags;
}

@@ -965,7 +960,6 @@ static unsigned long cluster_alloc_swap_entry(struct swap_info_struct *si, int o
		 * allocation, but reclaim may drop si->lock and race with another user.
		 */
		while ((ci = isolate_lock_cluster(si, &si->frag_clusters[o]))) {
			atomic_long_dec(&si->frag_cluster_nr[o]);
			found = alloc_swap_scan_cluster(si, ci, cluster_offset(si, ci),
							0, usage);
			if (found)
@@ -3217,7 +3211,6 @@ static struct swap_cluster_info *setup_clusters(struct swap_info_struct *si,
	for (i = 0; i < SWAP_NR_ORDERS; i++) {
		INIT_LIST_HEAD(&si->nonfull_clusters[i]);
		INIT_LIST_HEAD(&si->frag_clusters[i]);
		atomic_long_set(&si->frag_cluster_nr[i], 0);
	}

	/*