• Yu Zhao's avatar
    mm: add vma_has_recency() · 8788f678
    Yu Zhao authored
    Add vma_has_recency() to indicate whether a VMA may exhibit temporal
    locality that the LRU algorithm relies on.
    
    This function returns false for VMAs marked by VM_SEQ_READ or
    VM_RAND_READ.  While the former flag indicates linear access, i.e., a
    special case of spatial locality, both flags indicate a lack of temporal
    locality, i.e., the reuse of an area within a relatively small duration.
    
    "Recency" is chosen over "locality" to avoid confusion between temporal
    and spatial localities.
    
    Before this patch, the active/inactive LRU only ignored the accessed bit
    from VMAs marked by VM_SEQ_READ.  After this patch, the active/inactive
    LRU and MGLRU share the same logic: they both ignore the accessed bit if
    vma_has_recency() returns false.
    
    For the active/inactive LRU, the following fio test showed a [6, 8]%
    increase in IOPS when randomly accessing mapped files under memory
    pressure.
    
      kb=$(awk '/MemTotal/ { print $2 }' /proc/meminfo)
      kb=$((kb - 8*1024*1024))
    
      modprobe brd rd_nr=1 rd_size=$kb
      dd if=/dev/zero of=/dev/ram0 bs=1M
    
      mkfs.ext4 /dev/ram0
      mount /dev/ram0 /mnt/
      swapoff -a
    
      fio --name=test --directory=/mnt/ --ioengine=mmap --numjobs=8 \
          --size=8G --rw=randrw --time_based --runtime=10m \
          --group_reporting
    
    The discussion that led to this patch is here [1].  Additional test
    results are available in that thread.
    
    [1] https://lore.kernel.org/r/Y31s%2FK8T85jh05wH@google.com/
    
    Link: https://lkml.kernel.org/r/20221230215252.2628425-1-yuzhao@google.comSigned-off-by: default avatarYu Zhao <yuzhao@google.com>
    Cc: Alexander Viro <viro@zeniv.linux.org.uk>
    Cc: Andrea Righi <andrea.righi@canonical.com>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Cc: Michael Larabel <Michael@MichaelLarabel.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    8788f678
memory.c 159 KB