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 353BFC4345F for ; Wed, 1 May 2024 17:16:37 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id C5FFD6B0085; Wed, 1 May 2024 13:16:36 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id C0FFD6B0089; Wed, 1 May 2024 13:16:36 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id ADA516B008A; Wed, 1 May 2024 13:16:36 -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 8A9D46B0085 for ; Wed, 1 May 2024 13:16:36 -0400 (EDT) Received: from smtpin27.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 4EDD440B27 for ; Wed, 1 May 2024 17:16:36 +0000 (UTC) X-FDA: 82070481192.27.E402C40 Received: from mail-ej1-f45.google.com (mail-ej1-f45.google.com [209.85.218.45]) by imf05.hostedemail.com (Postfix) with ESMTP id 5B402100016 for ; Wed, 1 May 2024 17:16:34 +0000 (UTC) Authentication-Results: imf05.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=dOIQIxb4; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf05.hostedemail.com: domain of yosryahmed@google.com designates 209.85.218.45 as permitted sender) smtp.mailfrom=yosryahmed@google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1714583794; 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:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=ONQyBcD8VRLw4uQD2Qcjp9+m2MW2Gbhx15MpCK/CXQs=; b=VGh8AjrVWaaniYLW5cmsXiGg3XkpOEE6EZ1HSAaai/9BQjNK5pUR13OJGb2YNQvDIrXAmr YvWqUNPjac4YG0Fbd4S5WyJn2xgJgzO8dCYVNM1098wY9p4dbX37PFt0aqWhpzFWwMlr2u VkPWaalRCCbVXMZlBxNgl98NrTfAQjM= ARC-Authentication-Results: i=1; imf05.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=dOIQIxb4; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf05.hostedemail.com: domain of yosryahmed@google.com designates 209.85.218.45 as permitted sender) smtp.mailfrom=yosryahmed@google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1714583794; a=rsa-sha256; cv=none; b=qWenrHCw1YH2EFQqZCv3BICiqsXI+JsmrIrYEpQlqXVAa7PE+VERc0yQKwzFrMNnLqJB+e zgJGdwdMTyp6OcimjwijvVi2phUwOFdETb6OTBf2sK3H3nbjD4KbuoJWwxjofNzc5PE6VO MSBeeC7KkXRo5kwMjOzcX5+o7VEyuR0= Received: by mail-ej1-f45.google.com with SMTP id a640c23a62f3a-a5872b74c44so796178266b.3 for ; Wed, 01 May 2024 10:16:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1714583793; x=1715188593; darn=kvack.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=ONQyBcD8VRLw4uQD2Qcjp9+m2MW2Gbhx15MpCK/CXQs=; b=dOIQIxb4kYefQbPxYkR/f5uFzELlmsLL8XzPKLxqr/SCymKWbc7R3mf/dsxT0o/NMS QLPsdCPcbBjjGKb/iejnTIkNsjkBAs6hZ1EAV8d8xB+k8avLBxuhYEw/sgT3P/Q3IqCa z29hPchyQOemI4rcUeBmb2f1239Kc/F4kwgIPf/ZHgNOl6sfOy72hbtwO0dU/Pfu/tp1 LXOcUdjT8TrAZL8VpOWSoD5h452oBMIgoNHOVO7D5nUWUuT7wsdnxUznUePujtwHnpAi v1LOrKynrMBXwym5PnRRFwNUBegFjCe0y/FcrvPjMBH2QuO94BLs7XkCzb0mIhjyLAgv 3Ong== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714583793; x=1715188593; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ONQyBcD8VRLw4uQD2Qcjp9+m2MW2Gbhx15MpCK/CXQs=; b=W3g2jgCaDNM0Nf6aSdI+TkHsJ8+dGgj8FhypLvMRlBL7KFl7kqQTpmJ7GSzpxKgZBF 6gxK2XVqnJw7R5x1xq9mrnw7lcVhohdTs7pZTVMO3ifVn+m9KFvekbvqg+8xfRYzSTKK hn7NcQuPSKH0aVXx2TO3zlio3oZHjTvYLG17pgFp4UqriG+J85lP+CYZpR2NNB5ux/Ot vpUGTepRK+H5R361HJDw2qI1JyrtIIotE0R/G1YI0UBEv8jX/pEP2y7oIaplKmqG/7yq gHWNsUuYt7BxXYUb7wK/4NzQKrJN5QkVPAGQV/60e/2IIN2oDl6nwucnIRfKNr88zkTe UIKw== X-Forwarded-Encrypted: i=1; AJvYcCU3QT5SUePMg2d8j7EWGXtaelLskk2ojr7fQYzcqrVOedIOtufTVbZ5XbxKkJ9zmDffHMS08Wb+aeRiN6Au2OsZavs= X-Gm-Message-State: AOJu0Yz+Qps3oXkxK8KV0RbQoLndAJ1od0AKcRGsITT2ZkwKRIQedvM5 kqa+Nwz4qgx/MPxMXQsp0Q33MvnBkGa34XKzWnimSsynUVKH1nw0x9y9DZF+RaPqpKz7qV/3tjB VMBu4ZbhiIDba9k9P7E4hE3UsAkQ3C8qBM8sH X-Google-Smtp-Source: AGHT+IHowXyWVWUMsYZG3v7H2VTVJc9cyGycjNtSuZrYRRdK9YOB+oIJBeQ/0JwCKLpK+peFqmNZF1398qplDqqYd6E= X-Received: by 2002:a17:906:f8d4:b0:a52:5baf:23d with SMTP id lh20-20020a170906f8d400b00a525baf023dmr2258407ejb.15.1714583792458; Wed, 01 May 2024 10:16:32 -0700 (PDT) MIME-Version: 1.0 References: <20240501100446.1454264-1-usamaarif642@gmail.com> In-Reply-To: <20240501100446.1454264-1-usamaarif642@gmail.com> From: Yosry Ahmed Date: Wed, 1 May 2024 10:15:54 -0700 Message-ID: Subject: Re: [PATCH] selftests: cgroup: add tests to verify the zswap writeback path To: Usama Arif Cc: akpm@linux-foundation.org, hannes@cmpxchg.org, nphamcs@gmail.com, chengming.zhou@linux.dev, linux-mm@kvack.org, linux-kernel@vger.kernel.org, kernel-team@meta.com Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Server: rspam01 X-Stat-Signature: oicn5hqx4wmuz3thgfbgedrykbdmdwpu X-Rspam-User: X-Rspamd-Queue-Id: 5B402100016 X-HE-Tag: 1714583794-58892 X-HE-Meta: U2FsdGVkX18SD2HMShrIpyx00TjjR9UyL+l5IhzVxhBDdNaYF+TbrY+wHdYObEfyERfLlZhHKhHB3TmIi/YOMr586vtbCxfVqwbQq0rMh+1H6ypHulKES5tro/nwHwo/i4GYOPESMOI9expQ7pfPNOAmmd0nkDGHepbAdlGIjRXzX8M8q04M/mq+X4MJY/BXfWloHafdSmXosBQ6kdJAwuJh3fi9b0YAt/BauMGTLtSpXHHQAblAIZuuHhhkXRbZ2/9LBaj9y8kYjCBarQ6SLlO1Eb9VkZUrA4MV0ITf+jiSnMuAdh+fuUPHOE5MSEidXupAl7WAkO1ip+QpcXxWT4y4SQ8ZsGUIZSDOosJuQy7rKu3UOp51PJZd+2mAeWswmEvR1cJzFk6AguSHydRRFXVTEHzUHcyQe9QL0RxT0H0S0rPBnmRDA74e/XqOu1ka3BGlS1+Z5WW4Ff9wop6ajYo5y1AiXdJ3oXDe+8nLU7lMcPA80PvCRyOO1qHtzNWrJEb67olcV2VdMJx2GldRZtS+1VDa9VHsayLrCsobAQkpL5sbpYKVTm9O33djvStNWFJLyjD7cPM9dzTkPep4dHzhjJwhdT8LbzhmqBnf4+EY3fXU1q5KgczQnxkSuD1x1DLLn0uzO0wr0lLSlzvBU+D05MX1UwiDfijnIpmFD7rPyrRfARCPpfzQx4tIDUTs+N2CcHjvnutjaVEeCNuQaHK6WW4mwsUaEzURuc9gnN2g0EsieMIGA/z4qKZKyY0h/aiZHisYdtY7p3MU66sClfiwsxioofvxZ+GTdUkmkGKt+lIS8TFX87imhzRunog5g/4OY5nOf0tARLpIGh1GNuPPXfRj8qxsnL9LWfT51Cm0mI1W3bnbDiY1pr/2lq4751j9EMeaAsV/Mff6eQWeOlvqp5K6OUUPcbY2in0QsDOdoUxX/gVTQKCyb4K5XpX6xw8hltHlpi8cUp4mk8j 4vPAXH/8 STwsUdDsV5g/zwteDmv+Ty8++kKFupphf99M3JdGVjQmfboE74afhGWQ32r86IMYcxUgZGihatJNzi/gNjKE+wVW7tg4XeAMpym4/DNvBdnr2OxPXAYRhAmtcM4QPwkoz3njKK3+epjNfE+HvT7ZcM7CBNlL3SMqWXIoUGGK/KgPXBv3/UkrJKKrW4PeHA7kvvjHKastNBmn/bQFBbJr7sz2MWT3aXC+aXqbTMtDQIfd2mlWfzva944fn6WdGxwNcXBHTV6804HIk+I+dmOTDz/nHJP8xFbUqUHbJ X-Bogosity: Ham, tests=bogofilter, spamicity=0.152531, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: Hi Usama, On Wed, May 1, 2024 at 3:04=E2=80=AFAM Usama Arif = wrote: > > The condition for writeback can be triggered by allocating random > memory more than memory.high to push memory into zswap, more than > zswap.max to trigger writeback if enabled, but less than memory.max > so that OOM is not triggered. Both values of memory.zswap.writeback > are tested. Thanks for working on this :) > > Signed-off-by: Usama Arif > --- > tools/testing/selftests/cgroup/test_zswap.c | 83 +++++++++++++++++++++ > 1 file changed, 83 insertions(+) > > diff --git a/tools/testing/selftests/cgroup/test_zswap.c b/tools/testing/= selftests/cgroup/test_zswap.c > index f0e488ed90d8..fe0e7221525c 100644 > --- a/tools/testing/selftests/cgroup/test_zswap.c > +++ b/tools/testing/selftests/cgroup/test_zswap.c > @@ -94,6 +94,19 @@ static int allocate_bytes(const char *cgroup, void *ar= g) > return 0; > } > > +static int allocate_random_bytes(const char *cgroup, void *arg) > +{ > + size_t size =3D (size_t)arg; > + char *mem =3D (char *)malloc(size); > + > + if (!mem) > + return -1; > + for (int i =3D 0; i < size; i++) > + mem[i] =3D rand() % 128; > + free(mem); > + return 0; > +} > + > static char *setup_test_group_1M(const char *root, const char *name) > { > char *group_name =3D cg_name(root, name); > @@ -248,6 +261,74 @@ static int test_zswapin(const char *root) > return ret; > } > > +/* Test to verify the zswap writeback path */ > +static int test_zswap_writeback(const char *root, bool wb) > +{ > + int ret =3D KSFT_FAIL; > + char *test_group; > + long zswpwb_before, zswpwb_after; > + > + test_group =3D cg_name(root, > + wb ? "zswap_writeback_enabled_test" : "zswap_writeback_di= sabled_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.high", "2M")) > + goto out; > + if (cg_write(test_group, "memory.zswap.max", "2M")) > + goto out; > + if (cg_write(test_group, "memory.zswap.writeback", wb ? "1" : "0"= )) > + goto out; > + > + zswpwb_before =3D cg_read_key_long(test_group, "memory.stat", "zs= wpwb "); > + if (zswpwb_before < 0) { > + ksft_print_msg("failed to get zswpwb_before\n"); > + goto out; > + } > + > + /* > + * Allocate more than memory.high to push memory into zswap, > + * more than zswap.max to trigger writeback if enabled, > + * but less than memory.max so that OOM is not triggered > + */ > + if (cg_run(test_group, allocate_random_bytes, (void *)MB(3))) > + goto out; We set the zswap limit to 2M. So for this to work properly we need to guarantee that the 3M of random data will compress into more than 2M. Is this true for all possible zpool implementations and compression algorithms? How likely for this to break and start producing false negatives if zswap magically becomes more efficient? One alternative approach that I used before, although more complex, is to start by compressing the memory (i.e. through reclaim) without a zswap limit, and check the zswap usage. Then, fault the memory back in, set the zswap limit lower than the observed usage, and repeat. This should guarantee writeback AFAICT. Also, using memory.reclaim may be easier than memory.high if you follow this approach, as you would need to raise memory.high again to be able to decompress the memory. > + > + /* Verify that zswap writeback occurred only if writeback was ena= bled */ > + zswpwb_after =3D cg_read_key_long(test_group, "memory.stat", "zsw= pwb "); > + if (wb) { > + if (zswpwb_after <=3D zswpwb_before) { > + ksft_print_msg("writeback enabled and zswpwb_afte= r <=3D zswpwb_before\n"); > + goto out; > + } > + } else { > + if (zswpwb_after !=3D zswpwb_before) { > + ksft_print_msg("writeback disabled and zswpwb_aft= er !=3D zswpwb_before\n"); > + goto out; > + } > + } > + > + ret =3D KSFT_PASS; > + > +out: > + cg_destroy(test_group); > + free(test_group); > + return ret; > +} > + > +static int test_zswap_writeback_enabled(const char *root) > +{ > + return test_zswap_writeback(root, true); > +} > + > +static int test_zswap_writeback_disabled(const char *root) > +{ > + return test_zswap_writeback(root, false); > +} > + > /* > * When trying to store a memcg page in zswap, if the memcg hits its mem= ory > * limit in zswap, writeback should affect only the zswapped pages of th= at > @@ -425,6 +506,8 @@ struct zswap_test { > T(test_zswap_usage), > T(test_swapin_nozswap), > T(test_zswapin), > + T(test_zswap_writeback_enabled), > + T(test_zswap_writeback_disabled), > T(test_no_kmem_bypass), > T(test_no_invasive_cgroup_shrink), > }; > -- > 2.43.0 >