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 D0CF1C4828D for ; Mon, 5 Feb 2024 23:05:07 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 662536B0095; Mon, 5 Feb 2024 18:05:07 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 5EB876B00A4; Mon, 5 Feb 2024 18:05:07 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 48C7F6B00A8; Mon, 5 Feb 2024 18:05:07 -0500 (EST) 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 2FD2A6B0095 for ; Mon, 5 Feb 2024 18:05:07 -0500 (EST) Received: from smtpin25.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id EE5D080AE7 for ; Mon, 5 Feb 2024 23:05:06 +0000 (UTC) X-FDA: 81759282612.25.7E23448 Received: from mail-yw1-f202.google.com (mail-yw1-f202.google.com [209.85.128.202]) by imf28.hostedemail.com (Postfix) with ESMTP id 37C22C0007 for ; Mon, 5 Feb 2024 23:05:04 +0000 (UTC) Authentication-Results: imf28.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=yQVLGwvW; spf=pass (imf28.hostedemail.com: domain of 3oGnBZQoKCK0lbfelNUZRQTbbTYR.PbZYVahk-ZZXiNPX.beT@flex--yosryahmed.bounces.google.com designates 209.85.128.202 as permitted sender) smtp.mailfrom=3oGnBZQoKCK0lbfelNUZRQTbbTYR.PbZYVahk-ZZXiNPX.beT@flex--yosryahmed.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1707174305; 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-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=BZxrWnq5zjsPkEKkrjYrS8M9CKMdrdKLinApXAx16Nw=; b=w5qoVd+LpRLd37OeySZDtrUKACKlJElNCO5KNjVkJxBbmvQFbHFUdJvstp+hCNOKSNagfE SxX3xoK5eO9a97+eRl8dYCeGabu0iYnGARb9I1vjipnJh95uwLY2Fq82wuPv0aGEo2Ou71 5uWP8CZ7Yb44XVp16yMXF3cOAblljLI= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1707174305; a=rsa-sha256; cv=none; b=Ffja9j3DMF3xChQ5FXpHBemZAi+GWNE0HohLdxBImirFA6O5kknPlWNQjHBvIjaQs2ppMf NxyMbfIUdD+DFPe2+W7jqA8VcA7HrZyhe5/AMQQDq+mmyxOy0GCXyAt7ZtQikuBwFjXD3s BdNAzhWMDhignS/zzEZpUryEeYZ0sbo= ARC-Authentication-Results: i=1; imf28.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=yQVLGwvW; spf=pass (imf28.hostedemail.com: domain of 3oGnBZQoKCK0lbfelNUZRQTbbTYR.PbZYVahk-ZZXiNPX.beT@flex--yosryahmed.bounces.google.com designates 209.85.128.202 as permitted sender) smtp.mailfrom=3oGnBZQoKCK0lbfelNUZRQTbbTYR.PbZYVahk-ZZXiNPX.beT@flex--yosryahmed.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com Received: by mail-yw1-f202.google.com with SMTP id 00721157ae682-6043fdfddfeso42801547b3.3 for ; Mon, 05 Feb 2024 15:05:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1707174304; x=1707779104; darn=kvack.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=BZxrWnq5zjsPkEKkrjYrS8M9CKMdrdKLinApXAx16Nw=; b=yQVLGwvWubnJt7RTw8tlcYFV1E2mALoGwKjDHkK2isMWlAR99gF3aBG92I05utUiaw CCRnD1Yg2VgVWUmtKP175IGsMO83SpBdW7+A5GsLJmikmedpFkNUApYVdX9km+/ztwss UdGLtTKl1vAncXC2GYIBVw40ovjKt5Z4/AHo35JTT1Et0elvyAtUTBrjB/hfd7ajHOI9 ZwwAi5b6tgT9NdC5G6pMTj3NyJXcOIozc1e3Kedgu1boUcnDSUVIXUuioymTKzyCpLWz On4eFdN2bWXa3Y/tCvEP3dfISLAz8Iv+32R5HWNlNuNGlkrkksAliVTy+wlwIvO0nLl9 wIsg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707174304; x=1707779104; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=BZxrWnq5zjsPkEKkrjYrS8M9CKMdrdKLinApXAx16Nw=; b=WubQJISQDAtOr8kAl84OOFdOI/hWJKJWx+zY/mVf/8OVGdl/5up06UtPC2Drj3vZMv sZ6TihkExJLwXOOruGVgQY3SPlTdC+q+iWzFLiWleEKH6wslqQHpvyf9nl3IhkKTvWLR 7DMLAyY2q+NAmoaVROpfeems0KKYWk6aJgJMMlNLJMfhWBEt2Bs7FPWY+XAm7jjFm9xU j2lpmt6UFF1gaczJvnrl+2EsvgtJ/FILuIj6lqlxz7WbW5GCl29PSBjeyx0bn2QpdlE4 0oy29JyzhqRWVIqVbaCecMlT2o9tl3KEd4PJdQR4AspI7i1dsYEvFRW5uoh+mZGUF/23 FX6g== X-Gm-Message-State: AOJu0YweTu3rdinieEMKvZ32ruRw6AIFBk3SIo65VlIo4SOBZ0npV4nf 8oxCnzjdeOSnjGDCoAeaW2llKvOXrdNz6Bp5BruVqyOvNcZHavUEsb75kj6WkmOGtNBuWk+kYvq DccapVDDO9La3VrPZFg== X-Google-Smtp-Source: AGHT+IEUIGBmonf8OUL3+nxDnw4mX6xBUsQEC+uMCjLlLfEloLx4Ka+Rv5WbqnXlV8aBShzzt7LSfSBY3cgF6gyX X-Received: from yosry.c.googlers.com ([fda3:e722:ac3:cc00:20:ed76:c0a8:29b4]) (user=yosryahmed job=sendgmr) by 2002:a05:6902:e04:b0:dc6:af9a:8cfa with SMTP id df4-20020a0569020e0400b00dc6af9a8cfamr225097ybb.6.1707174304249; Mon, 05 Feb 2024 15:05:04 -0800 (PST) Date: Mon, 5 Feb 2024 23:05:02 +0000 In-Reply-To: <20240205225608.3083251-4-nphamcs@gmail.com> Mime-Version: 1.0 References: <20240205225608.3083251-1-nphamcs@gmail.com> <20240205225608.3083251-4-nphamcs@gmail.com> Message-ID: Subject: Re: [PATCH v3 3/3] selftests: add zswapin and no zswap tests From: Yosry Ahmed To: Nhat Pham Cc: akpm@linux-foundation.org, riel@surriel.com, shuah@kernel.org, hannes@cmpxchg.org, tj@kernel.org, lizefan.x@bytedance.com, roman.gushchin@linux.dev, linux-mm@kvack.org, kernel-team@meta.com, linux-kernel@vger.kernel.org, cgroups@vger.kernel.org, linux-kselftest@vger.kernel.org Content-Type: text/plain; charset="us-ascii" X-Rspamd-Queue-Id: 37C22C0007 X-Rspam-User: X-Rspamd-Server: rspam11 X-Stat-Signature: nsyq3s4egn9wnerg7z8itedjj8y6k4gh X-HE-Tag: 1707174304-153168 X-HE-Meta: U2FsdGVkX19dMUIQU8Y35vw2fZozUDY27c7tBQO2HuTJ+MTbrzV+aJ7xmY/5WwEDap1m17FUR6/r1JKfXRBJ9P+W9L2vp+XI6UWTovi5Le9rw7cWSabkCEFkqfoBPR5/NQyzp7QJEkymEWU7TekK6p2vviWKMLOVXqryp0YT4DWIRElyJ+y0IT3TBkCIIi9yF8ovUkjcJE0sXFPljFDsjv6yPuM1r2GT1zn3ZCBc5OcBquyU0kCN1SDIBt5rOE4I8fvWrafzlN/fA+oWlC3eWkK8IerNE4UaTlok+SlTy7ttDHqnLPyZDMP8ypMDljvx8FTggDotqDRbCu9fa+ew8NZ1bx1fl7A/o9UyVGL5g03eejfqBxDe9q/27TEp7HnW9F5WUjgyGsVGwnDkYqEooKQMjL0UvN/lbFzlaq70VJ0/H2JdUVmG7aV10TqaY8KAvzpM/ojld4Tl91N6QjDz84q0VExiIK6/TUfMzbVrwMxGK620tHm7sWlhr8Btn1NSZrfFWak0uhhxVxI7mZh7X+0903Z/pNzH8C0f6O9BaZIdmAxzcdSl/NBPff2ilTnYp8omHDOAXU+EbsQ747QcufOCJe5AS2BTJHsN+1+dcsMyS0FIpJIae/ZaULaOv/KwWXDzNdMBYfzWYHpYf4XBUeOgSSWeb7l9xmVRE1Z0fAys2NVqySlCHw6mUZbVSjbbbl5U1hiTT0v9cfj/0YkIkSlUQaoYPa7sL5b78YKOqLmdlNsJf5Vf7POuN9VbfwGamF8u6gg+4LmWYJQsmyY2AM+8qi+lPG3JKSttwZTatT7NaS6fY/N9b4UD64zIRZp1uRCJhDgQWAxe28XaGWBtdn0T/f52wSwLqKBVBmx8NtHHsSRtNeLqtx9gyRM4umG14cETkKOw2wVgr46eE4Au9udmTOrXvatSEw/l/uzKVsT4oIe0HVVu45MnlL6iViimC0YsU9lyj6x5XcWVE7W ssJ4zRd4 K7Yi8NOOYFgMaxabhWV/d+nNE7z2JtqqPCdqeE2HAi5TnMFSLrBcoA+1ilDKTzHJzWVdWt4NEg3wmFi+cfM7v7ei5uq28rWjr7sJFSxpeSDLeY9L06yEd8m9Qqpn91L7KFBKNrx0j8GeNi1n6Fq7zI33Yts5vzAsSVEYsSstrA7ff1RJdGBn1hdUSz31WyRPctbGSb3ykH+qTZgwzk79ZPFa4WDUrNmkRJPiHrxOyX1iNrDjNj//aAWVc2Mztp+UqZtquva91inpgC6GiynJ5CoA9yW9cHTLV+04CfabyvM8twNhOba5MgENQxFpKgiS+MHPKljOnJnKjYJy0ztwxDl1R/Qg2S1/VuRSSteujBmU0MeSCZZjwLAMrkg6cFGORcQDVGhnF9pcNKtdleP6eJsPr3Avh7LF87jVsnXoSER/Gnc30LFw8kF9Oo5tahPT+5VWllHX0puyf/4zQ35YKEjrkUcUVd+OOgEN18GWSIC0JaUjYLJt4iSx8s7T4/y/pw1LmuH0VvqnL/PPKIvkqjYiLcTl3/f2Kj17In1TO/vGYr5adRKuWo5iJy4Qbd3ug7BGWbfF22iV0szi+X+tWPMaR4Y+lk7XNU2Q8EoC/Xf0RZmVgk2SEPO9Op5VaBZayKzBao/cGU0360wfRr5KsPDMid87E9JBSs1Jb5lKREiUbR2HYNKajNvUsCegErH/Nn5ETe3kblw92stmlSpnGjII00Zl7/3nLZbV2 X-Bogosity: Ham, tests=bogofilter, spamicity=0.335157, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: On Mon, Feb 05, 2024 at 02:56:08PM -0800, Nhat Pham wrote: > Add a selftest to cover the zswapin code path, allocating more memory > than the cgroup limit to trigger swapout/zswapout, then reading the > pages back in memory several times. This is inspired by a recently > encountered kernel crash on the zswapin path in our internal kernel, > which went undetected because of a lack of test coverage for this path. > > Add a selftest to verify that when memory.zswap.max = 0, no pages can go > to the zswap pool for the cgroup. > > Suggested-by: Rik van Riel > Suggested-by: Yosry Ahmed > Signed-off-by: Nhat Pham LGTM with a few nits below: Acked-by: Yosry Ahmed Thanks! > --- > tools/testing/selftests/cgroup/test_zswap.c | 120 +++++++++++++++++++- > 1 file changed, 119 insertions(+), 1 deletion(-) > > diff --git a/tools/testing/selftests/cgroup/test_zswap.c b/tools/testing/selftests/cgroup/test_zswap.c > index 32ce975b21d1..c263610a4a60 100644 > --- a/tools/testing/selftests/cgroup/test_zswap.c > +++ b/tools/testing/selftests/cgroup/test_zswap.c > @@ -60,6 +60,27 @@ static long get_zswpout(const char *cgroup) > return cg_read_key_long(cgroup, "memory.stat", "zswpout "); > } > > +static int allocate_and_read_bytes(const char *cgroup, void *arg) > +{ > + size_t size = (size_t)arg; > + char *mem = (char *)malloc(size); > + int ret = 0; > + > + if (!mem) > + return -1; > + for (int i = 0; i < size; i += 4095) > + mem[i] = 'a'; > + > + /* go through the allocated memory to (z)swap in and out pages */ nit: s/go/Go > + for (int i = 0; i < size; i += 4095) { > + if (mem[i] != 'a') > + ret = -1; > + } > + > + free(mem); > + return ret; > +} > + > static int allocate_bytes(const char *cgroup, void *arg) > { > size_t size = (size_t)arg; > @@ -100,7 +121,6 @@ static int test_zswap_usage(const char *root) > int ret = KSFT_FAIL; > char *test_group; > > - /* Set up */ We removed this comment here. > test_group = cg_name(root, "no_shrink_test"); > if (!test_group) > goto out; > @@ -133,6 +153,102 @@ static int test_zswap_usage(const char *root) > return ret; > } > > +/* > + * Check that when memory.zswap.max = 0, no pages can go to the zswap pool for > + * the cgroup. > + */ > +static int test_swapin_nozswap(const char *root) > +{ > + int ret = KSFT_FAIL; > + char *test_group; > + long swap_peak, zswpout; > + > + test_group = cg_name(root, "no_zswap_test"); > + if (!test_group) > + goto out; > + if (cg_create(test_group)) > + goto out; > + if (cg_write(test_group, "memory.max", "8M")) > + goto out; > + if (cg_write(test_group, "memory.zswap.max", "0")) > + goto out; > + > + /* Allocate and read more than memory.max to trigger swapin */ > + if (cg_run(test_group, allocate_and_read_bytes, (void *)MB(32))) > + goto out; > + > + /* Verify that pages are swapped out, but no zswap happened */ > + swap_peak = cg_read_long(test_group, "memory.swap.peak"); > + if (swap_peak < 0) { > + ksft_print_msg("failed to get cgroup's swap_peak\n"); > + goto out; > + } > + > + if (swap_peak == 0) { > + ksft_print_msg("pages should be swapped out\n"); > + goto out; > + } We can actually check that this number is >= 24M instead. Not a big deal, but might as well. > + > + zswpout = get_zswpout(test_group); > + if (zswpout < 0) { > + ksft_print_msg("failed to get zswpout\n"); > + goto out; > + } > + > + if (zswpout > 0) { > + ksft_print_msg("zswapout > 0 when memory.zswap.max = 0\n"); > + goto out; > + } > + > + ret = KSFT_PASS; > + > +out: > + cg_destroy(test_group); > + free(test_group); > + return ret; > +} > + > +/* Simple test to verify the (z)swapin code paths */ > +static int test_zswapin(const char *root) > +{ > + int ret = KSFT_FAIL; > + char *test_group; > + long zswpin; > + > + /* Set up */ Yet we added a similar one here :) > + test_group = cg_name(root, "zswapin_test"); > + if (!test_group) > + goto out; > + if (cg_create(test_group)) > + goto out; > + if (cg_write(test_group, "memory.max", "8M")) > + goto out; > + if (cg_write(test_group, "memory.zswap.max", "max")) > + goto out; > + > + /* Allocate and read more than memory.max to trigger (z)swap in */ > + if (cg_run(test_group, allocate_and_read_bytes, (void *)MB(32))) > + goto out; > + > + zswpin = cg_read_key_long(test_group, "memory.stat", "zswpin "); > + if (zswpin < 0) { > + ksft_print_msg("failed to get zswpin\n"); > + goto out; > + } > + > + if (zswpin == 0) { > + ksft_print_msg("zswpin should not be 0\n"); > + goto out; > + } Same here, we can check that zswpin is at least 24M worth of events. Again, not a big deal, but might as well.