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 AB60ACD129A for ; Thu, 11 Apr 2024 01:42:48 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 4B3256B00AA; Wed, 10 Apr 2024 21:42:48 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 43BFB6B00AB; Wed, 10 Apr 2024 21:42:48 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 2DCCE6B00AC; Wed, 10 Apr 2024 21:42:48 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id 0EA866B00AA for ; Wed, 10 Apr 2024 21:42:48 -0400 (EDT) Received: from smtpin25.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id C15BDC09AD for ; Thu, 11 Apr 2024 01:42:47 +0000 (UTC) X-FDA: 81995551974.25.0CB40DB Received: from mail-pg1-f181.google.com (mail-pg1-f181.google.com [209.85.215.181]) by imf19.hostedemail.com (Postfix) with ESMTP id 0A3CC1A0004 for ; Thu, 11 Apr 2024 01:42:45 +0000 (UTC) Authentication-Results: imf19.hostedemail.com; dkim=pass header.d=chromium.org header.s=google header.b=jDWIQJ6Z; dmarc=pass (policy=none) header.from=chromium.org; spf=pass (imf19.hostedemail.com: domain of senozhatsky@chromium.org designates 209.85.215.181 as permitted sender) smtp.mailfrom=senozhatsky@chromium.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1712799766; 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=9Wjsjcbxj0gvh46svZ/4TV2vWh7wPtzVX00GOKp+juw=; b=KrHYW+kH5NC7tWH6e5zEqkWMZW5XLV2tKDTckuOKdnkguLxU+J1ID0jxmeL+niHhvbuBNw 9nDvMl6HmrgPlxtf6tgeVsgvTvh2/QUjBqBAIkUaU/DP7i5dj2nFU1w7YpolNU/MkrhKSc cgLfXD8fVpUZvB1bhf0jTODrMiw+njQ= ARC-Authentication-Results: i=1; imf19.hostedemail.com; dkim=pass header.d=chromium.org header.s=google header.b=jDWIQJ6Z; dmarc=pass (policy=none) header.from=chromium.org; spf=pass (imf19.hostedemail.com: domain of senozhatsky@chromium.org designates 209.85.215.181 as permitted sender) smtp.mailfrom=senozhatsky@chromium.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1712799766; a=rsa-sha256; cv=none; b=iWcgs8VJPu/6X+b7YEaLJohtiobgFEgItowKkTIXLWTXI0byyHbIX0I0w8VS7fP4sz7LsT XGw3vNWnV2bOe+smrjci2M/qAikp+8c7udOHF/I4qD/UUYWnymjBHl/kmEVUsxxftViIo1 /PG+CPRytxU0hG8s6K7RLb9pTYOzgWE= Received: by mail-pg1-f181.google.com with SMTP id 41be03b00d2f7-5c229dabbb6so4577109a12.0 for ; Wed, 10 Apr 2024 18:42:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1712799765; x=1713404565; darn=kvack.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=9Wjsjcbxj0gvh46svZ/4TV2vWh7wPtzVX00GOKp+juw=; b=jDWIQJ6ZOQcYX1foQN/oG0C8lSr4IUiwK9Tu/uGjDWdbh/BAbhuzUZlg2R+hIaRECR Pl0YcX0r4x6N6uVwRQCM5DT055xw01dDNk/NSefsws4mtUvjMbAJZPjuy4U9IY16VYVu IXJH0TQo4AkMqqr0vjuD35kCpUOSpWG6iJBPg= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1712799765; x=1713404565; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=9Wjsjcbxj0gvh46svZ/4TV2vWh7wPtzVX00GOKp+juw=; b=l9tJyZ2xSRIwhDDi4VSsz21g74pd7EMhUA2AAS0D0SY2VnI4oXH8V7p0xu2n6A5Wp9 Ecf6hAQiSEl4sZ37FXCwxrVDlMFRFWdpFpW7Pyk5Mp3njvvJ9+kEBi7O0o0+rEC9bvo4 +gKgXDmjrhWRZEYV526rrwn7wunn8RE6Ih5asGnnD/kH5O1KsSUs5T/dO6tYpR3sdgMC hrOtrr2Y4floSJfX8s1ZYYi0AWEKx41nEXd67pI1IBaJsb7b0PsI84OEIZBKSdaA1Agn u6EuAZ+6aIdljIjSeOziNkg0q5P7+1U+GmRWWp0iY47PT7FWX+0os0cphuZy7g7jWUK3 jgjQ== X-Forwarded-Encrypted: i=1; AJvYcCU1BWK40EjgvZ/O0OnlKRZ/LniUNVglqa/6EbeKkBhHHdPj7H4wfuQDZJ0beG4ezMFOYU1LwQDatKEMXuRUYYFoih8= X-Gm-Message-State: AOJu0Yz1+CmT12K6k2o5ECbLH6AplSg+KdoH9zQVzdDdTykqMtrWafXh B0OSzzol1K0V4p/LSAfvy16GN8SEifKcXr8E53PzfPpn7gBUpISxLdr28P/t4g== X-Google-Smtp-Source: AGHT+IGAQHOTuAOm/KqDp30urLcwa5fjz1YvZoSRFiNIBEbRtud1u29qA2P6s8jCeMAYkw13KFUilw== X-Received: by 2002:a05:6300:8086:b0:1a7:175:2cac with SMTP id ap6-20020a056300808600b001a701752cacmr4551833pzc.13.1712799764699; Wed, 10 Apr 2024 18:42:44 -0700 (PDT) Received: from google.com ([2401:fa00:8f:203:f30d:f29e:acb:4140]) by smtp.gmail.com with ESMTPSA id fr14-20020a17090ae2ce00b002a54222e694sm272647pjb.51.2024.04.10.18.42.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 10 Apr 2024 18:42:44 -0700 (PDT) Date: Thu, 11 Apr 2024 10:42:37 +0900 From: Sergey Senozhatsky To: Barry Song <21cnbao@gmail.com> Cc: akpm@linux-foundation.org, minchan@kernel.org, senozhatsky@chromium.org, linux-block@vger.kernel.org, axboe@kernel.dk, linux-mm@kvack.org, terrelln@fb.com, chrisl@kernel.org, david@redhat.com, kasong@tencent.com, yuzhao@google.com, yosryahmed@google.com, nphamcs@gmail.com, willy@infradead.org, hannes@cmpxchg.org, ying.huang@intel.com, surenb@google.com, wajdi.k.feghali@intel.com, kanchana.p.sridhar@intel.com, corbet@lwn.net, zhouchengming@bytedance.com, Tangquan Zheng , Barry Song Subject: Re: [PATCH RFC 2/2] zram: support compression at the granularity of multi-pages Message-ID: <20240411014237.GB8743@google.com> References: <20240327214816.31191-1-21cnbao@gmail.com> <20240327214816.31191-3-21cnbao@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20240327214816.31191-3-21cnbao@gmail.com> X-Rspam-User: X-Stat-Signature: abd4d8omdmbomd33xo3jnddmue734xpj X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: 0A3CC1A0004 X-HE-Tag: 1712799765-983193 X-HE-Meta: U2FsdGVkX19jfq/flIz4w/i84bXtT9p88rkLJKP7b/A5v/cUY/bU0YvtJPjp8JL4i0gQ4thKolE05w6TafOkCmvhilcJnnxGpz6WQsTFUBnhBRnbk07wiJIgkVz7THExxjHhu0qlr2OTUCTxGRZJqu9jPrBW8Sb3Yk9J/sLSv9vkDqSJJuRfhqYvfLfzG0b32Y7GNwTACxxSBzfKgIhK9ZIRYKkGvkv0n9KMc6ilRTVgtcUmuzanZ6EclKl/Xcd0Le4HRakyd3xAqcMZlWjvJQPgMPI7IK5IG1p5V7YcdbviYzkFMLa5n1XNgYQnFJNQWukJfcigYaUY2H+deRBFwIkNCXZIb3YewBll24MNoDkGXP/hDVrQUt1x5/C3VeZEy8ZAJsCtTfxUOqMEHYK4QzdrjtcdZoL9Hf4+XwEqItOJRbGwt6EPkDIBq0ID7P715tGELTvYBjDeW7S/SYCLlApmrcNnSDiM5zaTiGiGVpOD5ZVXjmpn+aphkAPax51FFs54iLxWYmbFE8xryrqYwpC7z0Vc9MJSuuKBSHUU75uvsszH1nI6r1OiGMypLRUib36u5cEALdCddWizPFnH6vEJouKn8025RBLvTFRdULGhSC4YpeEv7Ii2i10AS6zQnqMzP45GEIuDUTUspcbWgRRlr56FOwoUBJCKgd8a7a8GXgWS9v3IXwDK7mOi3EE1mWFghV8qUo1bTSylxBgu1Jy6bzTdPFyzaVkEmMeRBC/exHa1WlFlK5P7SjRq0bNdtHHhVqHcE1tPg4WOU56Hz9o+VknW9ireEZxQBrwyrHATo9RN9XUMMX5mTCPNT28wF/dnpLuM/tfOl/luK9nRBM5N6dfsW5Fvm7pfSGZcAXl2QBe+iNBooRfQVePXA+1GWg8D9eU0ChW33gVqWJtNtxxR2Kfu1pMT9DVkrA9DdZesEUnBV+HQoizQZze5OZASp3nsN5TBpTmfHGA5Z8D M1UD4ygh osKp/7Y6N+oo/3bs6PkmusVTAzWSsLtRhVxBzRJlyszOKXAk= 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: List-Subscribe: List-Unsubscribe: On (24/03/28 10:48), Barry Song wrote: [..] > +/* > + * Use a temporary buffer to decompress the page, as the decompressor > + * always expects a full page for the output. > + */ > +static int zram_bvec_read_multi_pages_partial(struct zram *zram, struct bio_vec *bvec, > + u32 index, int offset) > +{ > + struct page *page = alloc_pages(GFP_NOIO | __GFP_COMP, ZCOMP_MULTI_PAGES_ORDER); > + int ret; > + > + if (!page) > + return -ENOMEM; > + ret = zram_read_multi_pages(zram, page, index, NULL); > + if (likely(!ret)) { > + atomic64_inc(&zram->stats.zram_bio_read_multi_pages_partial_count); > + void *dst = kmap_local_page(bvec->bv_page); > + void *src = kmap_local_page(page); > + > + memcpy(dst + bvec->bv_offset, src + offset, bvec->bv_len); > + kunmap_local(src); > + kunmap_local(dst); > + } > + __free_pages(page, ZCOMP_MULTI_PAGES_ORDER); > + return ret; > +} [..] > +static int zram_bvec_write_multi_pages_partial(struct zram *zram, struct bio_vec *bvec, > + u32 index, int offset, struct bio *bio) > +{ > + struct page *page = alloc_pages(GFP_NOIO | __GFP_COMP, ZCOMP_MULTI_PAGES_ORDER); > + int ret; > + void *src, *dst; > + > + if (!page) > + return -ENOMEM; > + > + ret = zram_read_multi_pages(zram, page, index, bio); > + if (!ret) { > + src = kmap_local_page(bvec->bv_page); > + dst = kmap_local_page(page); > + memcpy(dst + offset, src + bvec->bv_offset, bvec->bv_len); > + kunmap_local(dst); > + kunmap_local(src); > + > + atomic64_inc(&zram->stats.zram_bio_write_multi_pages_partial_count); > + ret = zram_write_page(zram, page, index); > + } > + __free_pages(page, ZCOMP_MULTI_PAGES_ORDER); > + return ret; > +} What type of testing you run on it? How often do you see partial reads and writes? Because this looks concerning - zsmalloc memory usage reduction is one metrics, but this also can be achieved via recompression, writeback, or even a different compression algorithm, but higher CPU/power usage/higher requirements for physically contig pages cannot be offset easily. (Another corner case, assume we have partial read requests on every CPU simultaneously.)