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 1F8AFC4345F for ; Thu, 2 May 2024 19:05:42 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A82906B009A; Thu, 2 May 2024 15:05:41 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id A32576B009B; Thu, 2 May 2024 15:05:41 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 8FA086B009C; Thu, 2 May 2024 15:05:41 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 717C16B009A for ; Thu, 2 May 2024 15:05:41 -0400 (EDT) Received: from smtpin24.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id F0B5A80E5F for ; Thu, 2 May 2024 19:05:40 +0000 (UTC) X-FDA: 82074384840.24.A00DC9C Received: from mail-wm1-f42.google.com (mail-wm1-f42.google.com [209.85.128.42]) by imf23.hostedemail.com (Postfix) with ESMTP id D73DF140028 for ; Thu, 2 May 2024 19:05:38 +0000 (UTC) Authentication-Results: imf23.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=ndDmFwqA; spf=pass (imf23.hostedemail.com: domain of usamaarif642@gmail.com designates 209.85.128.42 as permitted sender) smtp.mailfrom=usamaarif642@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=1714676739; 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=pQezgGHBde2PG49TFvcPtewcmftD8mjUw8NBpGR0NeI=; b=LH2k02eoqL8cPUbodN7mx7q08/CbvRB2nEgTH6dCg0ug4ASx5a+J9ts2Ba4sFQl+UNp+cA EQTQeNcQ3IZPUmK30CGQLXOTD4G3xhu+6Y0XRdJ3BUbsFQbhCV38+GdkoCE5GSU18kIlr9 KGkwByJLKHkuDZPsFOAGQkCEpeXTdjI= ARC-Authentication-Results: i=1; imf23.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=ndDmFwqA; spf=pass (imf23.hostedemail.com: domain of usamaarif642@gmail.com designates 209.85.128.42 as permitted sender) smtp.mailfrom=usamaarif642@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1714676739; a=rsa-sha256; cv=none; b=Gn5bfXtUCsY6k2m2nfb/dUvXOpLcOTiZXlGHxzLgbRwl/CjXyoN2YOQfEX+SdjEj4bvOSB LJz2QeZ0xFB5aKKL5+LcCWH568OTPEh/vVKqi4BVJ1020SZjnuOnAYeaw1BmPOAAc/w4Tr lCb152zQzxabdYo6yp84Z+gO+tNFPGo= Received: by mail-wm1-f42.google.com with SMTP id 5b1f17b1804b1-41adf3580dbso13344095e9.0 for ; Thu, 02 May 2024 12:05:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1714676737; x=1715281537; darn=kvack.org; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=pQezgGHBde2PG49TFvcPtewcmftD8mjUw8NBpGR0NeI=; b=ndDmFwqAIMroIt9YSZcafct3bH8ZzheJFSH4TEe08B0S/x1J45jEoExXrN5K/QivnX c+FhxpS91f6JuEfLCfniDLj0o49G9k3DVyxvqZ/E4zTmN6lGKPRqZ/vlDiQs4FiSOx5L MP66G9FoetmB+GSclY0tKU6mkQpBHZ1yvDwESdxYhr1RCfBevq3BH3nMVAZJkcBnaPuM yp0g7I2A3+3aHRYSsPS45tNNi7Px/aJ2xxblt0Gh3sXk3FfCCFYtU2fRNvFHLFAHzuw8 mysux3M7K65DlZUXSNAzPHnLIfnmZBi+iCC9Rfr4haJcMamRt5tN+7XKnyMEUEsZNlzm 4mbg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714676737; x=1715281537; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=pQezgGHBde2PG49TFvcPtewcmftD8mjUw8NBpGR0NeI=; b=meOfBl8WJDnF4CKlbtQ8sL9UTKa4wR6k1BsFkQcyODh4Rg9Xr8QYKtljo6Qap2fRhh wgE2LjzuCOemfARtFe2S54GOU2VLtQJ0w6QrCe90NKjU3gjsWoBt87/vRy8BBAEit+SJ /ce2xqgbOITqz9uQVntabQwO90JwgCQSDaNtl0h5DLo2wAR0IK8UDsfNCnoZRKGH7Nwv 9mmi8VGTH1eLSIx4QcNPYG3FZuyHDMhGUROLPqni/f8HfTb3Kl6nomFKwe7vU8b+xOEj BeCEDmV3Rm6J+0vMRl1CGGBdRIV3ci1EXpYGwgS2L/Yd03XHEAbMBeiDFhwrGo8UyUSK ao0Q== X-Forwarded-Encrypted: i=1; AJvYcCXoCJtbhIfUOIMTex5h/rwmQRdB7J/B7sYj7hryFd5fOIU/cKZ2spm0bCCf1ex0/zc6jUCiGaLo+8BZ09X2qQ/ZyB8= X-Gm-Message-State: AOJu0YwAAs7btoa2O1v/fADKkGFp6CaZaH5bQNcVS1Os/VuAz+O5n6d2 zvYSNZru1suh4nEAk0FtjsS/BlJq0RaBMwjyQ9CySwefLbo+Qn5p X-Google-Smtp-Source: AGHT+IEsQU3BbzqxIp0ovOKArFrLjb73eFpuZj5WOoSUSr4aylhyZQyO2pxQLtfGhxT96VWhIZ20nA== X-Received: by 2002:a05:600c:3103:b0:41b:f24a:b590 with SMTP id g3-20020a05600c310300b0041bf24ab590mr3403357wmo.3.1714676737014; Thu, 02 May 2024 12:05:37 -0700 (PDT) Received: from ?IPV6:2a02:6b6a:b75d:0:64:3301:4710:ec21? ([2a02:6b6a:b75d:0:64:3301:4710:ec21]) by smtp.gmail.com with ESMTPSA id ka21-20020a05600c585500b0041a9c3444a6sm6529636wmb.28.2024.05.02.12.05.36 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 02 May 2024 12:05:36 -0700 (PDT) Message-ID: Date: Thu, 2 May 2024 20:05:36 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH] selftests: cgroup: add tests to verify the zswap writeback path To: Nhat Pham Cc: akpm@linux-foundation.org, hannes@cmpxchg.org, yosryahmed@google.com, chengming.zhou@linux.dev, linux-mm@kvack.org, linux-kernel@vger.kernel.org, kernel-team@meta.com References: <20240501100446.1454264-1-usamaarif642@gmail.com> Content-Language: en-US From: Usama Arif In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Stat-Signature: bty1ds7g83skqztzsqwsj9cy9m946w8g X-Rspam-User: X-Rspamd-Queue-Id: D73DF140028 X-Rspamd-Server: rspam05 X-HE-Tag: 1714676738-140936 X-HE-Meta: U2FsdGVkX18WETe7QMwx8XicsR1yChBI9EWkwJPKTCogHKRURTidvVoLqxWHKu34SF/6Ba3JAcFiijf2czIKBo7203JM5QxUVcUKVa0U+Kbot0N4QZ199/3d2tn0Hbg2O3LnyYWqSw+rCLYnCSCqRNzuQVWgx1kyAu0XRKiEokFrPEdp4NZLd1mERSGqNIA8zUAkrRIvHga0VAlJ54PIJimf6hLU4OAD9jh2mXOvImijXHIcRpuKF6BAuipn1Z5V+ORLV/sQg2KR0IEyC9Le0/VOZA4mFfGn1q1A6qkCRlxXbYZfSYPmO0+YerIwvXsmlptDSTt5vqjZc3RT9Upl9UR4XepqyPwI+CJc1NURCnaDjUl8qBXZ8C/zhFthrl6zb5PloCAVtmxzcSnAfFcZOcOAK8+utcBymQMcJBr/uKa82V0qW2qSNNkgU3YQB41B837JSiyeZJQMdQIL5QyKJKDS827Nll/S/z5krpqb9BylOaEVNXCIHbpfDfgT4842cMDe5H/A2EDpt7ZQyipgYndbauPjKgclyC870OTUYz9JzGeSKlrrYv9NO0jzC+rkAy/Fi+9gL9W4uoe8oIG2Xo+nrfevqY3FbC+D/YpbEFgwBS3D53U+P45TbKMtnChjluiF3Jlf3jk3LX3BDWqlHVvrYEmZOZb1lFOmSWeLwmjJyI4aVF9uuirp+Fc4nQ5pFcTAiTejIdTXwSPIfo/BXEn2deWtrrZq87qkrcahPL1dsWFMBaPWYUJsZwmMIZpssNAaZchPEo5iuo7Vq67Al6Ya2D5kXZzSjg6chs/5IWAs7tLbRTqgpdEviMrPmD1v4SxbSt5b2AaaZAvQ6SdMMsYdgyv05bJ9hnn8zLDNeTHjuFdlue+Lyz1taJSJxWyENu2UQJzNa7j+xFqqvMzu8NgKi5T2iCjKV0IaIIB6E3TvewcsCaC4EX2fTgLVTSvAWBGh/O3DHfanzSiPO/F uheYcFzw 94Ye7fFRbRPeMXP0TvQv8iWkB8I5EnTpHkuKZ0GSaz2saeFxl2R303CMXG2+eD17NkK5w4q4EqdquySae3lqn2h6Jt8oSca1td1Ciz94f1uwT5HXiWCKZXoiHFgY4VwPnPQUz+kacpeUDihyaW8HKDqFOXSIxXy98Xv6eBRkoiWgOfADsdKtPFgNImBkoYeE5Sd+G3B4p3zBs6EXWMVxgTynSEEn6Hhif4r/PAs/Bpjf8wHT6nZRJ2HPOPr5G1q/yhI1HX2hCprI4AJQn9jnYkiKX4HIUciOCcbgf0ZfVB+/j82LoySH7rzqwU9xaosv4p+XzHs/ercadyQLvX/3M1gdS3pFxtoB13gtRzLFpyv8Ub5aBGUrEJz/s5x0Wtp1QZuo7j7OrhIDK+59WOjOEu29NQEOYpL1mnBq04H2b0lM/Mjx609mSEVI2ET3Dt+YuQyUYJ1wzqYlTqR8KQCBfO6cSUvWcLqjI8e9W678fz0cyjk/DEVJME0eKQNlUjX3yzNfKtLrRGb2FQKiLvb373euT/qObOZx2N67khChwCPC8nNbp3tYkjpZSGA== X-Bogosity: Ham, tests=bogofilter, spamicity=0.161172, 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 01/05/2024 16:44, Nhat Pham wrote: > On Wed, May 1, 2024 at 3:04 AM 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 adding the test, Usama :) A couple of suggestions below. > >> 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 *arg) >> return 0; >> } >> >> +static int allocate_random_bytes(const char *cgroup, void *arg) >> +{ >> + size_t size = (size_t)arg; >> + char *mem = (char *)malloc(size); >> + >> + if (!mem) >> + return -1; >> + for (int i = 0; i < size; i++) >> + mem[i] = rand() % 128; >> + free(mem); >> + return 0; >> +} >> + >> static char *setup_test_group_1M(const char *root, const char *name) >> { >> char *group_name = 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 = KSFT_FAIL; >> + char *test_group; >> + long zswpwb_before, zswpwb_after; >> + >> + test_group = cg_name(root, >> + wb ? "zswap_writeback_enabled_test" : "zswap_writeback_disabled_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 = cg_read_key_long(test_group, "memory.stat", "zswpwb "); >> + 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; > I think we should document better why we allocate random bytes (rather > than just using the existing allocation helper). > > This random allocation pattern (rand() % 128) is probably still > compressible by zswap, albeit poorly. I assume this is so that zswap > would not be able to just absorb all the swapped out pages? Thanks for the review! I have added doc in v2 explaining why random memory is used. >> + >> + /* Verify that zswap writeback occurred only if writeback was enabled */ >> + zswpwb_after = cg_read_key_long(test_group, "memory.stat", "zswpwb "); >> + if (wb) { >> + if (zswpwb_after <= zswpwb_before) { >> + ksft_print_msg("writeback enabled and zswpwb_after <= zswpwb_before\n"); >> + goto out; >> + } >> + } else { >> + if (zswpwb_after != zswpwb_before) { >> + ksft_print_msg("writeback disabled and zswpwb_after != zswpwb_before\n"); >> + goto out; >> + } > It'd be nice if we can check that in this case, the number of pages > that are "swapped out" matches the cgroup's zswpout stats :) I think with the method in v2, this might not be easily tracked as some metrics are all time (zswpout) while others are current. > >> + } >> + >> + ret = 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 memory >> * limit in zswap, writeback should affect only the zswapped pages of that >> @@ -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 >>