• Ryan Roberts's avatar
    mm: swap: simplify struct percpu_cluster · 14c62da2
    Ryan Roberts authored
    struct percpu_cluster stores the index of cpu's current cluster and the
    offset of the next entry that will be allocated for the cpu.  These two
    pieces of information are redundant because the cluster index is just
    (offset / SWAPFILE_CLUSTER).  The only reason for explicitly keeping the
    cluster index is because the structure used for it also has a flag to
    indicate "no cluster".  However this data structure also contains a spin
    lock, which is never used in this context, as a side effect the code
    copies the spinlock_t structure, which is questionable coding practice in
    my view.
    
    So let's clean this up and store only the next offset, and use a sentinal
    value (SWAP_NEXT_INVALID) to indicate "no cluster".  SWAP_NEXT_INVALID is
    chosen to be 0, because 0 will never be seen legitimately; The first page
    in the swap file is the swap header, which is always marked bad to prevent
    it from being allocated as an entry.  This also prevents the cluster to
    which it belongs being marked free, so it will never appear on the free
    list.
    
    This change saves 16 bytes per cpu.  And given we are shortly going to
    extend this mechanism to be per-cpu-AND-per-order, we will end up saving
    16 * 9 = 144 bytes per cpu, which adds up if you have 256 cpus in the
    system.
    
    Link: https://lkml.kernel.org/r/20240408183946.2991168-4-ryan.roberts@arm.comSigned-off-by: default avatarRyan Roberts <ryan.roberts@arm.com>
    Reviewed-by: default avatar"Huang, Ying" <ying.huang@intel.com>
    Cc: Barry Song <21cnbao@gmail.com>
    Cc: Barry Song <v-songbaohua@oppo.com>
    Cc: Chris Li <chrisl@kernel.org>
    Cc: David Hildenbrand <david@redhat.com>
    Cc: Gao Xiang <xiang@kernel.org>
    Cc: Kefeng Wang <wangkefeng.wang@huawei.com>
    Cc: Lance Yang <ioworker0@gmail.com>
    Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
    Cc: Michal Hocko <mhocko@suse.com>
    Cc: Yang Shi <shy828301@gmail.com>
    Cc: Yu Zhao <yuzhao@google.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    14c62da2
swapfile.c 94.1 KB