From patchwork Wed Jun 2 09:27:53 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ananda Badmaev X-Patchwork-Id: 12293555 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.8 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,UNWANTED_LANGUAGE_BODY,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id BE3D7C47083 for ; Wed, 2 Jun 2021 09:28:52 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 24915613AE for ; Wed, 2 Jun 2021 09:28:52 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 24915613AE Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=clicknet.pro Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id A5E106B006C; Wed, 2 Jun 2021 05:28:51 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id A0CA46B006E; Wed, 2 Jun 2021 05:28:51 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 8AD0D6B0070; Wed, 2 Jun 2021 05:28:51 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0103.hostedemail.com [216.40.44.103]) by kanga.kvack.org (Postfix) with ESMTP id 559536B006C for ; Wed, 2 Jun 2021 05:28:51 -0400 (EDT) Received: from smtpin08.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay01.hostedemail.com (Postfix) with ESMTP id CDA5A180AD806 for ; Wed, 2 Jun 2021 09:28:50 +0000 (UTC) X-FDA: 78208259220.08.3A6A8C2 Received: from forward106o.mail.yandex.net (forward106o.mail.yandex.net [37.140.190.187]) by imf27.hostedemail.com (Postfix) with ESMTP id 141678019370 for ; Wed, 2 Jun 2021 09:28:36 +0000 (UTC) Received: from sas1-16fb7bdf8acc.qloud-c.yandex.net (sas1-16fb7bdf8acc.qloud-c.yandex.net [IPv6:2a02:6b8:c14:1e07:0:640:16fb:7bdf]) by forward106o.mail.yandex.net (Yandex) with ESMTP id 419225061455 for ; Wed, 2 Jun 2021 12:28:47 +0300 (MSK) Received: from sas1-37da021029ee.qloud-c.yandex.net (sas1-37da021029ee.qloud-c.yandex.net [2a02:6b8:c08:1612:0:640:37da:210]) by sas1-16fb7bdf8acc.qloud-c.yandex.net (mxback/Yandex) with ESMTP id ZSnRJqDA3M-SkLKQqRC; Wed, 02 Jun 2021 12:28:47 +0300 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=clicknet.pro; s=mail; t=1622626127; bh=lbsF3yX9gf2EkStcgKPx0xn5+8yP+d35bVpQutXMUHY=; h=Date:Subject:To:From:Message-Id:Cc; b=o7BFAqMfQSXec7gdC2LSCIxIZzIrtMT9C7yUf3VUFBcmwpFxD8o0LjBf0NjZPEBPs tP6vZh4idwkJDlcdYDpF5VSEV7O3I5yKcPIR/GzVZ/uiytSyzBM3TddnAXXc+xl/x6 cOlht6Iamm8PcWuC8MIFxOQkU8z2VSolT+ZNcWCQ= Received: by sas1-37da021029ee.qloud-c.yandex.net (smtp/Yandex) with ESMTPSA id AAjH9nPAap-SkLGl1GS; Wed, 02 Jun 2021 12:28:46 +0300 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (Client certificate not present) From: Ananda Badmaev To: linux-mm@kvack.org Cc: Ananda Badmaev Subject: [PATCH] zswap: add reclaim trigger and stat for debugging Date: Wed, 2 Jun 2021 12:27:53 +0300 Message-Id: <20210602092753.10566-1-a.badmaev@clicknet.pro> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Authentication-Results: imf27.hostedemail.com; dkim=pass header.d=clicknet.pro header.s=mail header.b=o7BFAqMf; dmarc=none; spf=pass (imf27.hostedemail.com: domain of a.badmaev@clicknet.pro designates 37.140.190.187 as permitted sender) smtp.mailfrom=a.badmaev@clicknet.pro X-Rspamd-Server: rspam05 X-Rspamd-Queue-Id: 141678019370 X-Stat-Signature: nyzdsmy3ps4k748x59kt57jito8nt931 X-HE-Tag: 1622626116-298467 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: - Added 'total_pages_reclaimed' stat to debugfs in zswap. - Added ability to reclaim pages from zswap using debugfs. - Added u64 reclaim counter to shrink_worker() --- mm/zswap.c | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/mm/zswap.c b/mm/zswap.c index 20763267a219..680a4e413f53 100644 --- a/mm/zswap.c +++ b/mm/zswap.c @@ -53,6 +53,9 @@ static atomic_t zswap_same_filled_pages = ATOMIC_INIT(0); * certain event is occurring. */ +/* Total pages evicted */ +static u32 zswap_total_reclaimed; + /* Pool limit was hit (see zswap_max_pool_percent) */ static u64 zswap_pool_limit_hit; /* Pages written back when pool limit was reached */ @@ -576,9 +579,11 @@ static void shrink_worker(struct work_struct *w) { struct zswap_pool *pool = container_of(w, typeof(*pool), shrink_work); + unsigned int pages_reclaimed = 0; - if (zpool_shrink(pool->zpool, 1, NULL)) + if (zpool_shrink(pool->zpool, 1, &pages_reclaimed)) zswap_reject_reclaim_fail++; + zswap_total_reclaimed += pages_reclaimed; zswap_pool_put(pool); } @@ -1397,6 +1402,24 @@ static struct frontswap_ops zswap_frontswap_ops = { static struct dentry *zswap_debugfs_root; +static ssize_t reclaim_pages_trigger(struct file *file, const char __user *buf, + size_t count, loff_t *f_pos) +{ + struct zswap_pool *pool; + + /* reclaim pages from userspace using shrink_worker */ + pool = zswap_pool_last_get(); + if (pool) + queue_work(shrink_wq, &pool->shrink_work); + return count; +} + +static const struct file_operations reclaim_pages_fops = { + .owner = THIS_MODULE, + .write = reclaim_pages_trigger, + .open = simple_open +}; + static int __init zswap_debugfs_init(void) { if (!debugfs_initialized()) @@ -1425,6 +1448,12 @@ static int __init zswap_debugfs_init(void) debugfs_create_atomic_t("same_filled_pages", 0444, zswap_debugfs_root, &zswap_same_filled_pages); + debugfs_create_u32("total_pages_reclaimed", 0444, + zswap_debugfs_root, &zswap_total_reclaimed); + + debugfs_create_file("reclaim_pages_trigger", 0744, zswap_debugfs_root, + NULL, &reclaim_pages_fops); + return 0; }