lkml.org 
[lkml]   [2024]   [Mar]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    SubjectRe: [PATCH v4 3/6] mm: swap: Simplify struct percpu_cluster
    Date
    Ryan Roberts <ryan.roberts@arm.com> writes:

    > 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.
    >
    > Signed-off-by: Ryan Roberts <ryan.roberts@arm.com>

    LGTM, Thanks!

    --
    Best Regards,
    Huang, Ying


    \
     
     \ /
      Last update: 2024-05-27 15:45    [W:4.737 / U:0.020 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site