From patchwork Mon Dec 5 17:51:36 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nhat Pham X-Patchwork-Id: 13064927 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1437AC4332F for ; Mon, 5 Dec 2022 17:51:45 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 696038E0002; Mon, 5 Dec 2022 12:51:45 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 645D98E0001; Mon, 5 Dec 2022 12:51:45 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 50D158E0002; Mon, 5 Dec 2022 12:51:45 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 4198A8E0001 for ; Mon, 5 Dec 2022 12:51:45 -0500 (EST) Received: from smtpin25.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 05087160959 for ; Mon, 5 Dec 2022 17:51:44 +0000 (UTC) X-FDA: 80208995370.25.E617B2A Received: from mail-pl1-f173.google.com (mail-pl1-f173.google.com [209.85.214.173]) by imf11.hostedemail.com (Postfix) with ESMTP id 9346140012 for ; Mon, 5 Dec 2022 17:51:44 +0000 (UTC) Authentication-Results: imf11.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=l4JO0S1z; spf=pass (imf11.hostedemail.com: domain of nphamcs@gmail.com designates 209.85.214.173 as permitted sender) smtp.mailfrom=nphamcs@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1670262704; a=rsa-sha256; cv=none; b=ey1SX2RbJlOY0rFfmjLHPAm9ZKBsc0ZtfRu5UvWyrh8MOtAwSQfVEub+i1RRHqPZRui4uK Rd6HDMBomRGv+/JGLYkSRWAhR37Ilcu3eAJRnNo5U9klp75cDiCbi2kNjhK0XGXSW3qH8t oIv9jQRYDK3Iu8VmbaHlnboKDjhRs5g= ARC-Authentication-Results: i=1; imf11.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=l4JO0S1z; spf=pass (imf11.hostedemail.com: domain of nphamcs@gmail.com designates 209.85.214.173 as permitted sender) smtp.mailfrom=nphamcs@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1670262704; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:references:dkim-signature; bh=U4iGUxKXjjOVEMJuMdNLNIqO6vUJnd3qD/zTRON5oB0=; b=nRotGBlEfS14AfsoGju2X+0hvsQINVf9GP7PxJewyrHqrHuEv2xbzP6MmA5+i6e5jhfEaV sID+iewC6ECmA2Lngk3xDeI1oa5NaWwW0g4IixsmxBzbbBafya0Ydki5ixKm0buEr0nycC +5QAsmTdD2QnbG0f2yhVIe7g4ElqX58= Received: by mail-pl1-f173.google.com with SMTP id s7so11525857plk.5 for ; Mon, 05 Dec 2022 09:51:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=U4iGUxKXjjOVEMJuMdNLNIqO6vUJnd3qD/zTRON5oB0=; b=l4JO0S1zAOZ9BTlZyHNbVhEOy2tlu82fAp28Wov5NxHhuX0A6+qa7ECv/eWzW6VEKV MeZEK+8uirEsoLiTbhKw4Jg1YPyci4uMoo2W//SBGH0WvK2tweLZWrM6uZF2bj14B232 XIXjEgbXZ1Qp0dePcNAgE7fiW0IHXQYBZpbQpi4rcb06BUqNbCenlLk0LHQBLPfPo6zB Ff3AFy1IYFYuoGE3aPe25fbW5JZo1hNpONd2R0hrskdbO0OOr5778gWWk543mp0/NtDL 9K8NbBMDW4jWaQO12YeEezZvPEhUIipMrftILpKfyC9AeKl70MNIvtN83gU4Im+tbLGM 1j4g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=U4iGUxKXjjOVEMJuMdNLNIqO6vUJnd3qD/zTRON5oB0=; b=8GHY0vq33zGQcnaCR2SMQ/gFO3KlE1WWSWYiDTY8ejFa6zTCAzajwWd63OAU9RXBPy U1tFKD5hKEQ/uzz3ruSggohLQdxp/8ytGnZaAMCeK8rYyQcvs7RWJsxiE/SG7QqRud2y 2/AIKuZJ6OpArZ4AIo62fJZeCDJg2YM70oruIhYNPAk+5K9OagVj3FprRoZ/JhmvW7hU 0NS430YAtcmN49lGwK4CAXXKJmEYddfwVYsWlWmHRjZjvMOxxum7+r7CeRR+0uamjiaB VtSJBSWHIggGDo8IR2G0LTax37qolKP3hk2FvorVMaYLXv71QXeTbj1DrEAyDWDCSIH0 7ZiA== X-Gm-Message-State: ANoB5pn/Iwn5wxqeCL725mN6b9uP65nOfmI/joand3GiJG7CZ+QKjhEY suIvwtt1IsygMmOZ+hSgnlA= X-Google-Smtp-Source: AA0mqf5ak4L8JQjPhq3WEAPzybNj0sOLOLmM7BPytWMDZktVdGjOrytBswm+TNkzR5EZEg/2eiqTBg== X-Received: by 2002:a17:902:e005:b0:189:c62e:ac2f with SMTP id o5-20020a170902e00500b00189c62eac2fmr12430135plo.144.1670262703435; Mon, 05 Dec 2022 09:51:43 -0800 (PST) Received: from localhost (fwdproxy-prn-013.fbsv.net. [2a03:2880:ff:d::face:b00c]) by smtp.gmail.com with ESMTPSA id c10-20020a170902d48a00b00188edd16246sm10860172plg.266.2022.12.05.09.51.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 05 Dec 2022 09:51:42 -0800 (PST) From: Nhat Pham To: akpm@linux-foundation.org Cc: hannes@cmpxchg.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, bfoster@redhat.com, willy@infradead.org, kernel-team@meta.com Subject: [PATCH v2 0/4] cachestat: a new syscall for page cache state of files Date: Mon, 5 Dec 2022 09:51:36 -0800 Message-Id: <20221205175140.1543229-1-nphamcs@gmail.com> X-Mailer: git-send-email 2.30.2 MIME-Version: 1.0 X-Spamd-Result: default: False [0.60 / 9.00]; BAYES_HAM(-6.00)[100.00%]; SORBS_IRL_BL(3.00)[209.85.214.173:from]; R_MISSING_CHARSET(2.50)[]; MID_CONTAINS_FROM(1.00)[]; MIME_GOOD(-0.10)[text/plain]; RCVD_NO_TLS_LAST(0.10)[]; BAD_REP_POLICIES(0.10)[]; PREVIOUSLY_DELIVERED(0.00)[linux-mm@kvack.org]; R_DKIM_ALLOW(0.00)[gmail.com:s=20210112]; RCPT_COUNT_SEVEN(0.00)[7]; RCVD_VIA_SMTP_AUTH(0.00)[]; MIME_TRACE(0.00)[0:+]; FROM_EQ_ENVFROM(0.00)[]; R_SPF_ALLOW(0.00)[+ip4:209.85.128.0/17:c]; DMARC_POLICY_ALLOW(0.00)[gmail.com,none]; TO_MATCH_ENVRCPT_SOME(0.00)[]; TO_DN_NONE(0.00)[]; DKIM_TRACE(0.00)[gmail.com:+]; ARC_SIGNED(0.00)[hostedemail.com:s=arc-20220608:i=1]; RCVD_COUNT_THREE(0.00)[3]; FROM_HAS_DN(0.00)[]; ARC_NA(0.00)[] X-Rspam-User: X-Rspamd-Server: rspam03 X-Rspamd-Queue-Id: 9346140012 X-Stat-Signature: jbm9tessknoow9dhybyoop8z7im3rwy3 X-HE-Tag: 1670262704-289748 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: Changelog: 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 consist of 4 patches: Johannes Weiner (1): workingset: fix confusion around eviction vs refault container Nhat Pham (3): workingset: refactor LRU refault to expose refault recency check cachestat: implement cachestat syscall selftests: Add selftests for cachestat MAINTAINERS | 8 + arch/x86/entry/syscalls/syscall_32.tbl | 1 + arch/x86/entry/syscalls/syscall_64.tbl | 1 + include/linux/swap.h | 1 + include/linux/syscalls.h | 3 + include/uapi/asm-generic/unistd.h | 5 +- include/uapi/linux/mman.h | 8 + kernel/sys_ni.c | 1 + mm/Makefile | 2 +- mm/cachestat.c | 115 +++++++++++ mm/workingset.c | 144 +++++++++----- tools/testing/selftests/Makefile | 1 + tools/testing/selftests/cachestat/.gitignore | 2 + tools/testing/selftests/cachestat/Makefile | 7 + .../selftests/cachestat/test_cachestat.c | 186 ++++++++++++++++++ 15 files changed, 438 insertions(+), 47 deletions(-) create mode 100644 mm/cachestat.c 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 --- 2.30.2