Re: [PATCH v5 0/3] cachestat: a new syscall for page cache state of files

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Jan 4, 2023 at 3:11 PM Nhat Pham <nphamcs@xxxxxxxxx> wrote:
>
> Changelog:
> v5:
>   * Separate first patch into its own series.
>     (suggested by Andrew Morton)
>   * Expose filemap_cachestat() to non-syscall usage
>     (patch 2) (suggested by Brian Foster).
>   * Fix some build errors from last version.
>     (patch 2)
>   * Explain eviction and recent eviction in the draft man page and
>     documentation (suggested by Andrew Morton).
>     (patch 2)
> v4:
>   * Refactor cachestat and move it to mm/filemap.c (patch 3)
>     (suggested by Brian Foster)
>   * Remove redundant checks (!folio, access_ok)
>     (patch 3) (suggested by Matthew Wilcox and Al Viro)
>   * Fix a bug in handling multipages folio.
>     (patch 3) (suggested by Matthew Wilcox)
>   * Add a selftest for shmem files, which can be used to test huge
>     pages (patch 4) (suggested by Johannes Weiner)
> v3:
>   * Fix some minor formatting issues and build errors.
>   * Add the new syscall entry to missing architecture syscall tables.
>     (patch 3).
>   * Add flags argument for the syscall. (patch 3).
>   * Clean up the recency refactoring (patch 2) (suggested by Yu Zhao)
>   * Add the new Kconfig (CONFIG_CACHESTAT) to disable the syscall.
>     (patch 3) (suggested by Josh Triplett)
> v2:
>   * len == 0 means query to EOF. len < 0 is invalid.
>     (patch 3) (suggested by Brian Foster)
>   * Make cachestat extensible by adding the `cstat_size` argument in the
>     syscall (patch 3)
>
> There is currently no good way to query the page cache state of large
> file sets and directory trees. There is mincore(), but it scales poorly:
> the kernel writes out a lot of bitmap data that userspace has to
> aggregate, when the user really doesn not care about per-page information
> in that case. The user also needs to mmap and unmap each file as it goes
> along, which can be quite slow as well.
>
> This series of patches introduces a new system call, cachestat, that
> summarizes the page cache statistics (number of cached pages, dirty
> pages, pages marked for writeback, evicted pages etc.) of a file, in a
> specified range of bytes. It also include a selftest suite that tests some
> typical usage
>
> This interface is inspired by past discussion and concerns with fincore,
> which has a similar design (and as a result, issues) as mincore.
> Relevant links:
>
> https://lkml.indiana.edu/hypermail/linux/kernel/1302.1/04207.html
> https://lkml.indiana.edu/hypermail/linux/kernel/1302.1/04209.html
>
> For comparison with mincore, I ran both syscalls on a 2TB sparse file:
>
> Using mincore:
> real    0m37.510s
> user    0m2.934s
> sys     0m34.558s
>
> Using cachestat:
> real    0m0.009s
> user    0m0.000s
> sys     0m0.009s
>
> This series should be applied on top of:
>
> workingset: fix confusion around eviction vs refault container
> https://lkml.org/lkml/2023/1/4/1066
>
> This series consist of 3 patches:
>
> Nhat Pham (3):
>   workingset: refactor LRU refault to expose refault recency check
>   cachestat: implement cachestat syscall
>   selftests: Add selftests for cachestat
>
>  MAINTAINERS                                   |   7 +
>  arch/alpha/kernel/syscalls/syscall.tbl        |   1 +
>  arch/arm/tools/syscall.tbl                    |   1 +
>  arch/ia64/kernel/syscalls/syscall.tbl         |   1 +
>  arch/m68k/kernel/syscalls/syscall.tbl         |   1 +
>  arch/microblaze/kernel/syscalls/syscall.tbl   |   1 +
>  arch/parisc/kernel/syscalls/syscall.tbl       |   1 +
>  arch/powerpc/kernel/syscalls/syscall.tbl      |   1 +
>  arch/s390/kernel/syscalls/syscall.tbl         |   1 +
>  arch/sh/kernel/syscalls/syscall.tbl           |   1 +
>  arch/sparc/kernel/syscalls/syscall.tbl        |   1 +
>  arch/x86/entry/syscalls/syscall_32.tbl        |   1 +
>  arch/x86/entry/syscalls/syscall_64.tbl        |   1 +
>  arch/xtensa/kernel/syscalls/syscall.tbl       |   1 +
>  include/linux/fs.h                            |   3 +
>  include/linux/swap.h                          |   1 +
>  include/linux/syscalls.h                      |   3 +
>  include/uapi/asm-generic/unistd.h             |   5 +-
>  include/uapi/linux/mman.h                     |   9 +
>  init/Kconfig                                  |  10 +
>  kernel/sys_ni.c                               |   1 +
>  mm/filemap.c                                  | 143 ++++++++++
>  mm/workingset.c                               | 129 ++++++---
>  tools/testing/selftests/Makefile              |   1 +
>  tools/testing/selftests/cachestat/.gitignore  |   2 +
>  tools/testing/selftests/cachestat/Makefile    |   8 +
>  .../selftests/cachestat/test_cachestat.c      | 259 ++++++++++++++++++
>  27 files changed, 555 insertions(+), 39 deletions(-)
>  create mode 100644 tools/testing/selftests/cachestat/.gitignore
>  create mode 100644 tools/testing/selftests/cachestat/Makefile
>  create mode 100644 tools/testing/selftests/cachestat/test_cachestat.c
>
>
> base-commit: 1440f576022887004f719883acb094e7e0dd4944
> prerequisite-patch-id: 171a43d333e1b267ce14188a5beaea2f313787fb
> --
> 2.30.2

Oops, I think I accidentally sent out v5 twice :(

Please ignore the first set of emails and review this one only,

LKML link for convenience:
https://lkml.org/lkml/2023/1/4/1095




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux