From mboxrd@z Thu Jan 1 00:00:00 1970 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 74CE4C54E71 for ; Sat, 24 May 2025 08:36:50 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 848EB6B007B; Sat, 24 May 2025 04:36:49 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 7F9976B0082; Sat, 24 May 2025 04:36:49 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 70F8B6B0085; Sat, 24 May 2025 04:36:49 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 4E25E6B007B for ; Sat, 24 May 2025 04:36:49 -0400 (EDT) Received: from smtpin24.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 9E139120345 for ; Sat, 24 May 2025 08:36:48 +0000 (UTC) X-FDA: 83477145696.24.453F96D Received: from mail-pj1-f44.google.com (mail-pj1-f44.google.com [209.85.216.44]) by imf14.hostedemail.com (Postfix) with ESMTP id CE694100003 for ; Sat, 24 May 2025 08:36:46 +0000 (UTC) Authentication-Results: imf14.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=gAtBET3w; spf=pass (imf14.hostedemail.com: domain of suresh.k.chandrappa@gmail.com designates 209.85.216.44 as permitted sender) smtp.mailfrom=suresh.k.chandrappa@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=1748075806; 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=O0Lk85kbhsElZYJtc7AVIiBQoIYwHbLNrMdyS03HhQE=; b=gbeI6cyK4ROpmIy4eUKza7uceRG8AIVWLpBjvsdzsgzj1DFfMFIAGSvl4kk0KbRn+itpRv U5emyCDJTiSLITc+j5IAdvHGYrmXzkAEDsIo5fja3V9hevopAbthzFNRxpdr3eNvFkAaBK 6yspi7Gqw/X4kbRgYqcWBupGk4wQdnI= ARC-Authentication-Results: i=1; imf14.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=gAtBET3w; spf=pass (imf14.hostedemail.com: domain of suresh.k.chandrappa@gmail.com designates 209.85.216.44 as permitted sender) smtp.mailfrom=suresh.k.chandrappa@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1748075806; a=rsa-sha256; cv=none; b=ZmoWCiwQe8wrNkCTn7ParFAHV1PS/ivzupkdfFrZOuQ1CRsKvlBZGrKrpH+WmKqhLFr7J3 kbNRGS2FYt5bXDx81TrjYO0NmO7/qbxlddh1mmxg+f5Ax39F+/qA5M9QjOfn7gCe7uB2nJ 7YdrOFUJUqSK3VnwOvZjBEANNcSmDqs= Received: by mail-pj1-f44.google.com with SMTP id 98e67ed59e1d1-3109f106867so768483a91.1 for ; Sat, 24 May 2025 01:36:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1748075806; x=1748680606; darn=kvack.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=O0Lk85kbhsElZYJtc7AVIiBQoIYwHbLNrMdyS03HhQE=; b=gAtBET3w54NH+OB9F2DAMger0JHAK5j0RFrq96l1IyCrI3A8TQVTbUln4ETqYaLLcS 24ZUFlIYdtA7DIbtz0KhQdFeioGKZ220pe4NNx7xPv28KxAo1Trx6srW0Z3o23lY/AD9 5SmKqBhwGC0hkeNXPGLYs7QjNj6HurhNrPLnC2Q7/asl4L+WSjQv9V461ZRAiGTU97jv KDJLspXDT+LNNwaB9wNmYr0/ZynEbkv2YZ7RyZDMYsg6VZtz1P+Qvs7INhEHbGxugDDz Ssj1njOoy3oqzuP014grfK2HdMvzGMgeNWIHj5XzH5m/QZqTFh49/amuxt2LXbFKN3PW OmsA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748075806; x=1748680606; 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=O0Lk85kbhsElZYJtc7AVIiBQoIYwHbLNrMdyS03HhQE=; b=rT+dsvNdKKWJcnmtYlXfIXfLu5yn/eGyvxvJJWC1oGO1xQ3hllX9BYj58xkZIPvnAe SmJMHrKuBnRNxXotiyXEMIaAN1WRZcwvYMBIuM7AAsGONVqEp0cV9t1rfzytp+JDmO4n e5I++2InbyJI1nq+XJ6uBNC9GDwRo7GdKCjMcz/hSIez4ZbUQDvFlnoUimbeJlVcF39t RPVh1lkFBiQgMD+4yUvHHM/7hDVzRLWcDbUvpTFSBblFC0Wv+l9wY5eQu3dLmsmMztF5 SewtDl9xObqtPkrmfYtjCZvw2RgdubV52i8AZSpIClItJfpdVIHVw8cdzu/qv01xbcdL mc3w== X-Gm-Message-State: AOJu0YxU6jkzZfbuwTUe/r7vPpuaxFdFHpg7y9f3o8/lZRLFK1Kn5/4W QertuPcDBVYuCXxK9ufjB0g+d2zknLvFMQ94zLvB2PhqX03DUVZ/pzU+ X-Gm-Gg: ASbGncvBXARQld/5e1hgG8m4fmKEWmPBKjnITj3Dd+oGGOWaNyGkGP5hiCADtMIDm3u Ta1Z2WlKC+8pK4k+IKEJmGbcQpAd93XwhVork/9+VzBI8t9CEH+ORi2GOdTTmRhV91FTCG8zaIr Zj7vVQy7m/HR212HkKwJZ5oYXw9fcDiHoZezgJB27ChmHKfpprI0TYwX0UbDA/9HMkdGee/mYIq KJNWuSIU8SieDNZDI1HSFPS6onmg4ffExMyvsJCt6Fki5S6O1oR4R+b4M3B/DjyVNhTdZ6cKVoW +p+y/wgRPXGlOQKXGQUfUrM90jfhbBqcareBbp/MlOIO8WG6TPIZ X-Google-Smtp-Source: AGHT+IFM32ImrgqZh4uQ2khJGbITCWZn9AIrjpGoD5wryt9f6rYAjA+v2pzFW0SWlQy+zAEvv+NfzA== X-Received: by 2002:a17:90b:3f8d:b0:310:fcf1:36b with SMTP id 98e67ed59e1d1-3110f321c86mr2723418a91.21.1748075805563; Sat, 24 May 2025 01:36:45 -0700 (PDT) Received: from skc-Dell-Pro-16-Plus-PB16250.. ([139.167.223.130]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-30f365e5d31sm8617539a91.38.2025.05.24.01.36.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 24 May 2025 01:36:45 -0700 (PDT) From: Suresh K C X-Google-Original-From: Suresh K C To: nphamcs@gmail.com, hannes@cmpxchg.org, shuah@kernel.org Cc: linux-mm@kvack.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, Suresh K C Subject: [PATCH] selftests: cachestat: add tests for mmap and /proc/cpuinfo Date: Sat, 24 May 2025 14:06:18 +0530 Message-ID: <20250524083618.29615-1-suresh.k.chandrappa@gmail.com> X-Mailer: git-send-email 2.43.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: CE694100003 X-Stat-Signature: csjo7reufzc1akhbxndego7upowbxw8r X-Rspam-User: X-Rspamd-Server: rspam04 X-HE-Tag: 1748075806-81431 X-HE-Meta: U2FsdGVkX1+5i/wB7U5m3qXBx5W9uEjerfzmv2C+fSvcOyChy1PKG4Rc5Fp/0HyGRRpFgbFTH351+hXSbHuJFf0rONlcQLdYhucStBKo1RAu8/AXLfPjPNG3SWQl/cO44miM33onkKxlBoVKB2L8yYb5P9vwZ5sbLeqgW84gJx82FwC/Y4QixrE044pl3tGWgO5IL/3MiKhmuqsHSxOAE49leF1YZmnABtyTEGnqRjdpGDepWlEmDrCn+i3G29rN1BqMotfnPTceDr3pWNGQXGKzXWSUUsyK8rMy0JiJ66jpLrr+zeoRt6KKjNSKPim2Q00VZUNVVjZnpXp11dAPCjVGVfwsrVHfyeTxpCzbgLF64vkmuvTii2huPPHwpAAo6aBjC3YagSLpG7a3WX+a5WCy1dKwHEjnxEZRtqH7U/nqXxl7aZxnK5+RaA3ToAvjGZqeVvpy1BCrZv2CZmAFD0Hmonj8bZ6ItKEX4wj0fFr2HOF4Ar97b5rQogRzAxvyOirUJYKm8ri7pioS3XB5UTT8yiao6sWzHw3ZOUddRJF1iZ2fOTutDyTWi5WvK70Atp2zJOAiugpMgOMqmcrsFSdWHmuCC2jPYap73VTzlEXSm0Zi46aOknB+1V2gO8WZmXXT31sYs813CXJrm8wdDiN//1oUAOW7CPOHvVpN60t9eztmTSeuLHt4TsbjQMBg+KeD20gy0NR/GqXzQHH4g/u+b2WpHpQ4pkmb9IliD8yY1fdwtJbj1X4fo2128zfdJB0IkoR+J2V1PKUjZWnQiMVTFCj8w5EHDAUlb9Y9+3wlLFXjde2egm7kxrCceUIdAy6bSTcNc4/783RhiJekgqc4vCZQiMfrf9Zmjcd5EcY6UMQtMsdPGvLbi5Q6Ih/3mYwHj+OJgdyjX4Ude9BMBcy2+ZvyK2Py0qR4D/wLiWpRRSxN7ZuSLL9GxEO5bbB75xXQwoW5KDER4NaDsOo HgEzpaAx JgDgdRc9sGyFbScUeU+rm2JqJl+IUBoZ9re2tw0b4hBf+aB5NLz1kvlyQaXbBEFj5gz9svgw/V/NJ7uRVBUaoIlU0A0PsD+anDMpgdpl88S1M3J92U76OMp6u+TsRQNrsRcDPD0H/6ORKl5cE4Vp1VtSan4JGeiphe+8ocX7byNMReydbnxhQE7IWtkePLZ+LOQx0pv7+41LMx0bvbmylX/GKxA3A5YyFLi9Gndc3aYbgOKBBS396HCjldf+3VU9HXUzOg54upKFuBMsTYcI7jZuG8FfRXC78x53ApkCpIF/qS04N9IkjIk9btWCRklDj008xxngmC184g5a5HoSpXGPGaCWHnuV2TCN2c8nCCLx1TkN8ejP6bKa5+mtnRL8FS257kgSMg0TbscvBx2zNvwyUrfbbaD+cDrQ9KdueDyvvVvfafWAs6ooBRioxLZN8cJu6eVDuVaTq+Vz/PDaNxVFxqUC6AMup7xPs 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: List-Subscribe: List-Unsubscribe: From: Suresh K C Add a test case to verify cachestat behavior with memory-mapped files using mmap(). This ensures that pages accessed via mmap are correctly accounted for in the page cache. Also add a test for /proc/cpuinfo to validate cachestat's handling of virtual files in pseudo-filesystems. This improves test coverage for edge cases involving non-regular files. Tested on x86_64 with default kernel config. Signed-off-by: Suresh K C --- .../selftests/cachestat/test_cachestat.c | 69 ++++++++++++++++++- 1 file changed, 67 insertions(+), 2 deletions(-) diff --git a/tools/testing/selftests/cachestat/test_cachestat.c b/tools/testing/selftests/cachestat/test_cachestat.c index 632ab44737ec..81e7f6dd2279 100644 --- a/tools/testing/selftests/cachestat/test_cachestat.c +++ b/tools/testing/selftests/cachestat/test_cachestat.c @@ -22,7 +22,7 @@ static const char * const dev_files[] = { "/dev/zero", "/dev/null", "/dev/urandom", - "/proc/version", "/proc" + "/proc/version","/proc/cpuinfo","/proc" }; void print_cachestat(struct cachestat *cs) @@ -202,6 +202,65 @@ static int test_cachestat(const char *filename, bool write_random, bool create, return ret; } +bool test_cachestat_mmap(void){ + + size_t PS = sysconf(_SC_PAGESIZE); + size_t filesize = PS * 512 * 2;; + int syscall_ret; + size_t compute_len = PS * 512; + struct cachestat_range cs_range = { PS, compute_len }; + char *filename = "tmpshmcstat"; + unsigned long num_pages = compute_len / PS; + struct cachestat cs; + bool ret = true; + int fd = open(filename, O_RDWR | O_CREAT | O_TRUNC, 0666); + if (fd < 0) { + ksft_print_msg("Unable to create mmap file.\n"); + ret = false; + goto out; + } + if (ftruncate(fd, filesize)) { + ksft_print_msg("Unable to truncate mmap file.\n"); + ret = false; + goto close_fd; + } + if (!write_exactly(fd, filesize)) { + ksft_print_msg("Unable to write to mmap file.\n"); + ret = false; + goto close_fd; + } + char *map = mmap(NULL, filesize, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); + if (map == MAP_FAILED) { + ksft_print_msg("mmap failed.\n"); + ret = false; + goto close_fd; + } + + for (int i = 0; i < filesize; i++) { + map[i] = 'A'; + } + map[filesize - 1] = 'X'; + + syscall_ret = syscall(__NR_cachestat, fd, &cs_range, &cs, 0); + + if (syscall_ret) { + ksft_print_msg("Cachestat returned non-zero.\n"); + ret = false; + } else { + print_cachestat(&cs); + if (cs.nr_cache + cs.nr_evicted != num_pages) { + ksft_print_msg("Total number of cached and evicted pages is off.\n"); + ret = false; + } + } + +close_fd: + close(fd); + unlink(filename); +out: + return ret; +} + bool test_cachestat_shmem(void) { size_t PS = sysconf(_SC_PAGESIZE); @@ -274,7 +333,7 @@ int main(void) ret = 1; } - for (int i = 0; i < 5; i++) { + for (int i = 0; i < 6; i++) { const char *dev_filename = dev_files[i]; if (test_cachestat(dev_filename, false, false, false, @@ -315,5 +374,11 @@ int main(void) ret = 1; } + if (test_cachestat_mmap()) + ksft_test_result_pass("cachestat works with a mmap file\n"); + else { + ksft_test_result_fail("cachestat fails with a mmap file\n"); + ret = 1; + } return ret; } -- 2.43.0