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 23208EB64DC for ; Tue, 11 Jul 2023 10:09:01 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 6C4D36B0071; Tue, 11 Jul 2023 06:09:01 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 673FB6B0074; Tue, 11 Jul 2023 06:09:01 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 514FF6B0075; Tue, 11 Jul 2023 06:09:01 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 3E9B86B0071 for ; Tue, 11 Jul 2023 06:09:01 -0400 (EDT) Received: from smtpin05.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id EA04DAFBE1 for ; Tue, 11 Jul 2023 10:09:00 +0000 (UTC) X-FDA: 80998907640.05.1AE4F27 Received: from mx1.sberdevices.ru (mx2.sberdevices.ru [45.89.224.132]) by imf13.hostedemail.com (Postfix) with ESMTP id E1E6620018 for ; Tue, 11 Jul 2023 10:08:56 +0000 (UTC) Authentication-Results: imf13.hostedemail.com; dkim=pass header.d=sberdevices.ru header.s=mail header.b=ka7FO9Ma; dmarc=pass (policy=quarantine) header.from=sberdevices.ru; spf=pass (imf13.hostedemail.com: domain of AVRomanov@sberdevices.ru designates 45.89.224.132 as permitted sender) smtp.mailfrom=AVRomanov@sberdevices.ru ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1689070138; 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=eBbwiukpTDvNSKT2pbgyJAsYHARp/UI/Gtke0r2q7to=; b=PTkY0g9+pqsth5I9JNFMQ8/Ff6A4Jvj9NZMHk36eP6BCXM3KEETH6GhIfM/NPv4KgG9RJQ x0kbVAhC/+g+Zf5H1LZXcoRT6Od++luTFDM8dfTxa3qYfzqmK4GzjOmJOAPk86vMAxlLOQ PtVmIDj9QgoZniypAdx4n673R50QNMQ= ARC-Authentication-Results: i=1; imf13.hostedemail.com; dkim=pass header.d=sberdevices.ru header.s=mail header.b=ka7FO9Ma; dmarc=pass (policy=quarantine) header.from=sberdevices.ru; spf=pass (imf13.hostedemail.com: domain of AVRomanov@sberdevices.ru designates 45.89.224.132 as permitted sender) smtp.mailfrom=AVRomanov@sberdevices.ru ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1689070138; a=rsa-sha256; cv=none; b=hI/m45lZO3NJsq8LO8UmYHVZx+EnLJGQAuI0QmS6x8iZML46ff7Mh2h7jLQFhcdJ7xKwIP z0eMTbysEhnCC30v56pjvL3LkiL7ec4MHUbc5xlyXkY6ZfG9NmfIArOMkdoSJnCwLd4Top DtegHJvw4d2hso3fMUh+3KmEvC/GDz0= Received: from p-infra-ksmg-sc-msk02 (localhost [127.0.0.1]) by mx1.sberdevices.ru (Postfix) with ESMTP id 5ECFC12000C; Tue, 11 Jul 2023 13:08:54 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.sberdevices.ru 5ECFC12000C DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sberdevices.ru; s=mail; t=1689070134; bh=eBbwiukpTDvNSKT2pbgyJAsYHARp/UI/Gtke0r2q7to=; h=From:To:Subject:Date:Message-ID:Content-Type:MIME-Version:From; b=ka7FO9MaOUsgTCbMQS3QDToVGiprbixwfDJxUjBHem8J4SumH86HXBminj+BOW4Lq pZYe2KRff6P9+o+ooGP+9e/L8b0W/NfpXwRzVuuW9tkWqhG0P1UCwjNaCvTRF1jzZq 2gYclbkgYCpRy3SayT+yn5tp9DDGai3C36p2f5W2m4e+cbxbM4KefCgVhMlDfVSI+x cco0g/cqgzMEFb1774wWgaGVmF0egwOm7ofLUQTttvIIkomZMO2/kXnDXCiuZAhnSV H2GvhnbKBetVkMYW5d8rpHkiWiILRT27ywJdu10fRFFKeADQl0LlQgvmkkl6hEa6jC bgI9Is42T73VQ== Received: from p-i-exch-sc-m02.sberdevices.ru (p-i-exch-sc-m02.sberdevices.ru [172.16.192.103]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.sberdevices.ru (Postfix) with ESMTPS; Tue, 11 Jul 2023 13:08:54 +0300 (MSK) Received: from p-i-exch-sc-m01.sberdevices.ru (172.16.192.107) by p-i-exch-sc-m02.sberdevices.ru (172.16.192.103) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.30; Tue, 11 Jul 2023 13:08:54 +0300 Received: from p-i-exch-sc-m01.sberdevices.ru ([fe80::b547:aec1:796b:61ea]) by p-i-exch-sc-m01.sberdevices.ru ([fe80::b547:aec1:796b:61ea%5]) with mapi id 15.02.1118.030; Tue, 11 Jul 2023 13:08:47 +0300 From: Alexey Romanov To: Minchan Kim CC: Andrew Morton , linux-mm , Jens Axboe , Konrad Rzeszutek Wilk , Seth Jennings , Sergey Senozhatsky Subject: Re: [PATCH 2/3] zram: support frontswap Thread-Topic: [PATCH 2/3] zram: support frontswap Thread-Index: AQHZs9+udCSh9WlTfEaMO77y7SjxKw== Date: Tue, 11 Jul 2023 10:08:46 +0000 Message-ID: <20230711100848.ctymfhdy6bp3lin5@cab-wsm-0029881.sigma.sbrf.ru> References: <20230710221659.2473460-1-minchan@kernel.org> <20230710221659.2473460-3-minchan@kernel.org> In-Reply-To: <20230710221659.2473460-3-minchan@kernel.org> Accept-Language: ru-RU, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [172.16.18.92] Content-Type: text/plain; charset="us-ascii" Content-ID: Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-KSMG-Rule-ID: 10 X-KSMG-Message-Action: clean X-KSMG-AntiSpam-Lua-Profiles: 178538 [Jul 11 2023] X-KSMG-AntiSpam-Version: 5.9.59.0 X-KSMG-AntiSpam-Envelope-From: AVRomanov@sberdevices.ru X-KSMG-AntiSpam-Rate: 0 X-KSMG-AntiSpam-Status: not_detected X-KSMG-AntiSpam-Method: none X-KSMG-AntiSpam-Auth: dkim=none X-KSMG-AntiSpam-Info: LuaCore: 521 521 0c3391dd6036774f2e1052158c81e48587b96e95, {Track_E25351}, {Tracking_internal2}, {Tracking_from_domain_doesnt_match_to}, sberdevices.ru:7.1.1,5.0.1;127.0.0.199:7.1.2;d41d8cd98f00b204e9800998ecf8427e.com:7.1.1;cab-wsm-0029881.sigma.sbrf.ru:7.1.1,5.0.1;p-i-exch-sc-m02.sberdevices.ru:7.1.1,5.0.1, FromAlignment: s, {Tracking_white_helo} X-MS-Exchange-Organization-SCL: -1 X-KSMG-AntiSpam-Interceptor-Info: scan successful X-KSMG-AntiPhishing: Clean X-KSMG-LinksScanning: Clean X-KSMG-AntiVirus: Kaspersky Secure Mail Gateway, version 2.0.1.6960, bases: 2023/07/11 07:44:00 #21597011 X-KSMG-AntiVirus-Status: Clean, skipped X-Rspam-User: X-Stat-Signature: xrxz59qhq6w6k6i6icfoutssi3e48esx X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: E1E6620018 X-HE-Tag: 1689070136-102071 X-HE-Meta: U2FsdGVkX19lOhI4HHT/FO9m1szRZvZxaBCQPgm3byuqyaK+66aZqy7HB2AIynf4aIek4y6OtV2W5lSGN8EI8B/MbpnJeAl0nPwzHC6crq0SHg1AVLnVvGm59xOmJFhyCHXq2cS4aVgXbl946wh0ADVf7NvReP531vyX0Tkpxr492GR91etoij1HhyHs1yQz4C/cJQ08xi/GegVHdlQVOSow0s/mg1ASDtSzJWIGO4tpRenDXrVhLwxHAlASaHk0LsLfM9R25Qp6BCdrZOwzowZS64uVduTIEOa3hYy/mV4p82xwA0nPZq9PxkRS+rB8ZNaHD1QZZcI7TkYNNGHJrd68kVFeAbswDBkhqirSOu+OkfMAyg31qZvnIPtS9JpkglehPkf0PE3R8h/+wSdnaTd4MlwLBLRv6rVbgC3rop825uAZ6yrOMaOf4DGdV7ggtbgAoKw8+m9zq6JWSaMWir0wnINohjbPJ312fflzgl1FPJSd23paWl1jrm9MgtFHBwhpQPRArQhaZMki76tw+lBKNU2Nc1n10/NfalntKi6tljJ94ZTG1vzsEbTBqZpHkWTv+owqF7H0ITbCSqZkiLEEZkeqHzP6aawWVGGXbmjBPnpM41DSpkmkr6YoQyfXt8MWL6x5T9muEDh/DFEPV8HI0Tzed4R5FWvl7z2/L3aboJTUkmYV1NclWFRaI85gT8VUTSZaS5rta5RkIg9SsaHwe4axjDmZqg7Txfu1Vum1sgXboPF7Oo9H/KMmnVNlCkoSgu3EC99nqPlXNjvfF3WM2MJJXPzPuGFTPeJtYHA6zquvQPLdCeUQpC3d1qNKWGIkcJxQn7AmgyJPz+4/adk4Utt6yexvQaZItjhmtAaAxwT/kcfqCatVK1xago5dzAeuxuqHAQAXW+sHW+llk6/9jDHI63YFUC5k69DFL5uZIUMTeZ+tUdEviFjJAQJbLzydLU13I5l3PB4NFbH 1EOK4WBp XXQV7floyHGYvKSXessM42aif3NgoALcUXp7ohSUuZhN6Ko6JdWxKo63Y2ez3kl+rEPpfNY2dFda25Vu+TDYZzJ81pXrdpXrI97gcxDfghSHrN+vyRviuylSGZfTHT/+AyyYa41XC6pQ1cIhEDWSHejUcEUcFrGz3QBWBDlQp5v8tYI/xb+wK7vwYn/HriTDntqN+pb2bGhsUCnTc8tWtZ97JeuGtR0CBsnA0VQRz3xHPZYoG8pjrmqzmD9p+0ejpPLEwcDdwXhF9WVG6iyLdkayNihWobWApHiraWOPopAwG7nRUSPpTMWrJbwXZod/hVpfWgiWhvvj7ooE= 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: Hello, On Mon, Jul 10, 2023 at 03:16:58PM -0700, Minchan Kim wrote: > With frontswap, zram can perform swapout 13% faster, which restores > its original performance with rw_page. >=20 > 200M swapout using MADV_PAGEOUT: > Before: 4355ms After: 3786ms >=20 > Signed-off-by: Minchan Kim > --- > drivers/block/zram/Kconfig | 1 + > drivers/block/zram/zram_drv.c | 98 +++++++++++++++++++++++++++++++++++ > drivers/block/zram/zram_drv.h | 1 + > 3 files changed, 100 insertions(+) >=20 > diff --git a/drivers/block/zram/Kconfig b/drivers/block/zram/Kconfig > index 0386b7da02aa..a841d6d14c74 100644 > --- a/drivers/block/zram/Kconfig > +++ b/drivers/block/zram/Kconfig > @@ -4,6 +4,7 @@ config ZRAM > depends on BLOCK && SYSFS && MMU > depends on CRYPTO_LZO || CRYPTO_ZSTD || CRYPTO_LZ4 || CRYPTO_LZ4HC || C= RYPTO_842 > select ZSMALLOC > + select FRONTSWAP > help > Creates virtual block devices called /dev/zramX (X =3D 0, 1, ...). > Pages written to these disks are compressed and stored in memory > diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.= c > index 5d258a28ec43..5e973c982235 100644 > --- a/drivers/block/zram/zram_drv.c > +++ b/drivers/block/zram/zram_drv.c > @@ -33,6 +33,8 @@ > #include > #include > #include > +#include > +#include > =20 > #include "zram_drv.h" > =20 > @@ -2170,6 +2172,90 @@ static struct attribute *zram_disk_attrs[] =3D { > =20 > ATTRIBUTE_GROUPS(zram_disk); > =20 > +static struct zram *zram_swaps[MAX_SWAPFILES]; > +static LIST_HEAD(zram_list); > +static DEFINE_SPINLOCK(zram_list_lock); > + > +static int zram_frontswap_store(unsigned int type, pgoff_t index, > + struct page *page) > +{ > + int err; > + struct zram *zram =3D zram_swaps[type]; > + > + err =3D zram_write_page(zram, page, index); > + if (!err) { > + zram_slot_lock(zram, index); > + zram_accessed(zram, index); > + zram_slot_unlock(zram, index); > + } > + > + return err; > +} > + > +static int zram_frontswap_load(unsigned int type, pgoff_t index, > + struct page *page, bool *exclusive) > +{ > + int err; > + struct zram *zram =3D zram_swaps[type]; > + > + zram_slot_lock(zram, index); > + if (zram_test_flag(zram, index, ZRAM_WB)) { > + zram_slot_lock(zram, index); Looks like zram_slot_unlock should be here instead of zram_slot_lock. > + return -1; > + } > + > + err =3D zram_read_from_zspool(zram, page, index); > + if (!err) > + zram_accessed(zram, index); > + zram_slot_unlock(zram, index); > + > + return err; > +} > + > +static void zram_frontswap_invalidate_area(unsigned int type) > +{ > + struct zram *zram =3D zram_swaps[type]; > + > + if (!zram) > + return; > +} It makes sense? Maybe we just leave this function empty? > + > +static void zram_frontswap_init(unsigned int type, struct block_device *= bdev) > +{ > + struct zram *zram; > + > + spin_lock(&zram_list_lock); > + list_for_each_entry(zram, &zram_list, list) { > + if (&zram_devops =3D=3D bdev->bd_disk->fops) { > + zram_swaps[type] =3D zram; > + break; > + } > + } > + spin_unlock(&zram_list_lock); > +} > + > +static void zram_frontswap_invalidate_page(unsigned int type, pgoff_t of= fset) > +{ > + struct zram *zram =3D zram_swaps[type]; > + > + if (!zram_slot_trylock(zram, offset)) { > + atomic64_inc(&zram->stats.miss_free); > + return; > + } > + > + zram_free_page(zram, offset); > + zram_slot_unlock(zram, offset); > +} > + > +static const struct frontswap_ops zram_frontswap_ops =3D { > + .store =3D zram_frontswap_store, > + .load =3D zram_frontswap_load, > + .init =3D zram_frontswap_init, > + .invalidate_area =3D zram_frontswap_invalidate_area, > + .invalidate_page =3D zram_frontswap_invalidate_page, > + .init =3D zram_frontswap_init > +}; > + > /* > * Allocate and initialize new zram device. the function returns > * '>=3D 0' device_id upon success, and negative value otherwise. > @@ -2246,6 +2332,10 @@ static int zram_add(void) > =20 > comp_algorithm_set(zram, ZRAM_PRIMARY_COMP, default_compressor); > =20 > + spin_lock(&zram_list_lock); > + list_add(&zram->list, &zram_list); > + spin_unlock(&zram_list_lock); > + > zram_debugfs_register(zram); > pr_info("Added device: %s\n", zram->disk->disk_name); > return device_id; > @@ -2303,6 +2393,11 @@ static int zram_remove(struct zram *zram) > zram_reset_device(zram); > =20 > put_disk(zram->disk); > + > + spin_lock(&zram_list_lock); > + list_del(&zram->list); > + spin_unlock(&zram_list_lock); > + > kfree(zram); > return 0; > } > @@ -2428,6 +2523,9 @@ static int __init zram_init(void) > num_devices--; > } > =20 > + if (frontswap_register_ops(&zram_frontswap_ops)) > + pr_info("Frontswap is not used, which is suboptimal for zram swap.\n")= ; > + > return 0; > =20 > out_error: > diff --git a/drivers/block/zram/zram_drv.h b/drivers/block/zram/zram_drv.= h > index ca7a15bd4845..0f52d2da8512 100644 > --- a/drivers/block/zram/zram_drv.h > +++ b/drivers/block/zram/zram_drv.h > @@ -139,5 +139,6 @@ struct zram { > #ifdef CONFIG_ZRAM_MEMORY_TRACKING > struct dentry *debugfs_dir; > #endif > + struct list_head list; > }; > #endif > --=20 > 2.41.0.255.g8b1d071c50-goog >=20 >=20 --=20 Thank you, Alexey=