From nobody Sun Dec 14 21:54:07 2025 Received: from mail-pl1-f175.google.com (mail-pl1-f175.google.com [209.85.214.175]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 155C019A for ; Wed, 18 Dec 2024 06:35:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1734503725; cv=none; b=bgrEciNWxfhQR07hE/IXq38RjeDf325Z+FxLxtlf9mgIT/11yNinRs6c7V5XqCcqc751N5T4EsOowcNtA32DiyugpakBNjLcH7ZU9R/+06p5aha4PolZaPja0oJSm5jKWEmZzCxdKTmNCCkPnBSfbNdVjynXzEN0cyLMvalfuRY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1734503725; c=relaxed/simple; bh=r9j0bsoPlow28/GLcWExnZNZ5xalbO9yNQzFgmUdZRg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=elyMEzdVN6Vdyx5LXhSNrgSrzxLDwDg0A7tG2/tuzCxtqEW84fXYets6QSjdbPELJZJiPk+gMGCFWFbZCyvUTNQD1rkQznKYV85LMbnXqouVPh92l9HToNMwqRONR/2/j3CLcBA4EpJJl5x61Lykszsk/YRGCS82HpcFBaEB3yA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=mB1d9gHj; arc=none smtp.client-ip=209.85.214.175 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="mB1d9gHj" Received: by mail-pl1-f175.google.com with SMTP id d9443c01a7336-2166651f752so64466305ad.3 for ; Tue, 17 Dec 2024 22:35:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1734503723; x=1735108523; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=YM5tbrHoFcnr7Yi5hBwjzOD0QAW+fJr+gF9sDLsbf7Q=; b=mB1d9gHj6a3uALzTY0i16gB6h25Tzaw6pH2HM2xWxsbY/uG6RJD1namQ5SfZCCxp+P HKtIDVQcwNoJvXWfHoh08G2hAYvYnv1faspbReMxbboYiZeNjAMTDf9h5xWR6ImKurwY zSkHuMM131r+awQ4H4grYNcL6fjlJb8LoCYU8= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1734503723; x=1735108523; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=YM5tbrHoFcnr7Yi5hBwjzOD0QAW+fJr+gF9sDLsbf7Q=; b=hgkJta32HsSy0o1rbQk0uT0uMOiD0dtD1xUdWt8Ee1s22p5vjIfT1pZY4LRbFPJNZQ HKgsbDt5lF9UbSY78fsOSyE1vw5GIdSHlITsHWbTBeXLaFCHonC24zFrKaTH/JsnMsef g5zoEz5bwH4XJR8HONt4d4BPl13iFPdXlKeBHFGRSA4XK2ZtNru72GQJUZZjzDa2i75P 5Axd78rb1xFZhStIEChYbiwLLo/HIxc1aF3q5CoKy9ccq0gH3UPQiiEaOSVuJ/3fGjML 4vw/0VP+fh6mvMSX0YqlEKQ+9/6CDCJxsCp2jT8Yrf0eTq9LWISkyt8kux7EUsrDRUcA BGHQ== X-Forwarded-Encrypted: i=1; AJvYcCXJe7p89lLESm1AKU88r2yjSCS84UEJLlK15adnRqZwOsSaI0HFK97Bo3q+DRP0WDgv+VtBLrfLs+uX+Ic=@vger.kernel.org X-Gm-Message-State: AOJu0Yz1VrrYN0hXIskUG+s2sNrvFwCdswjYrX55+vxIrTJDutx/mpLS dV7wNhkfPh7cNIJXhOwcDSoEv7+LkLzxvVu0387xutpOffEMiShrfPK5s85OAg== X-Gm-Gg: ASbGncvD5+AWUpsp+BR4BNF2u+Ujd99EI1FPZXzkrG1Z4VIJ/Ib2bqcd2iKSaIv/5MT aGMIpIbOQihrkByYHfkD8OeiaDbRn5ltzIrAZeTgLqKNIC8HOXwHMqwYGZ7MdnBqDp2XgeOWI/I vunOnGE84i3CJtT1xMl2zCjT/AhVM0WFnDD48+rGDaWXh5ruWK0Vr0i+0P6frxVuktybG7qKFVn 989KeWNsc1UonOxg7LT0NsLmLLX5fSLs1BC6zsMNmHaLjd+oCX82ZHas2U= X-Google-Smtp-Source: AGHT+IEzRX0s0ipw+MkmY6rxb4hZkmahH0+HA2BPVeSSTzwnMahAGsE7gUMp3e22K+tr163jhvT0PQ== X-Received: by 2002:a17:902:dac6:b0:216:7cd8:e964 with SMTP id d9443c01a7336-218d710417emr25045545ad.22.1734503723387; Tue, 17 Dec 2024 22:35:23 -0800 (PST) Received: from localhost ([2401:fa00:8f:203:3bcc:36cc:b9fe:9379]) by smtp.gmail.com with UTF8SMTPSA id d9443c01a7336-218a1dcb8e9sm69394115ad.83.2024.12.17.22.35.21 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 17 Dec 2024 22:35:23 -0800 (PST) From: Sergey Senozhatsky To: Andrew Morton Cc: Minchan Kim , linux-mm@kvack.org, linux-kernel@vger.kernel.org, Sergey Senozhatsky Subject: [PATCHv2 1/7] zram: free slot memory early during write Date: Wed, 18 Dec 2024 15:34:18 +0900 Message-ID: <20241218063513.297475-2-senozhatsky@chromium.org> X-Mailer: git-send-email 2.47.1.613.gc27f4b7a9f-goog In-Reply-To: <20241218063513.297475-1-senozhatsky@chromium.org> References: <20241218063513.297475-1-senozhatsky@chromium.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" In the current implementation entry's previously allocated memory is released in the very last moment, when we already have allocated a new memory for new data. This, basically, temporarily increases memory usage for no good reason. For example, consider the case when both old (stale) and new entry data are incompressible so such entry will temporarily use two physical pages - one for stale (old) data and one for new data. We can release old memory as soon as we get a write request for entry. Signed-off-by: Sergey Senozhatsky --- drivers/block/zram/zram_drv.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c index 45df5eeabc5e..cda0f3fd4058 100644 --- a/drivers/block/zram/zram_drv.c +++ b/drivers/block/zram/zram_drv.c @@ -1648,6 +1648,11 @@ static int zram_write_page(struct zram *zram, struct= page *page, u32 index) unsigned long element =3D 0; enum zram_pageflags flags =3D 0; =20 + /* First, free memory allocated to this slot (if any) */ + zram_slot_lock(zram, index); + zram_free_page(zram, index); + zram_slot_unlock(zram, index); + mem =3D kmap_local_page(page); if (page_same_filled(mem, &element)) { kunmap_local(mem); @@ -1736,13 +1741,7 @@ static int zram_write_page(struct zram *zram, struct= page *page, u32 index) zs_unmap_object(zram->mem_pool, handle); atomic64_add(comp_len, &zram->stats.compr_data_size); out: - /* - * Free memory associated with this sector - * before overwriting unused sectors. - */ zram_slot_lock(zram, index); - zram_free_page(zram, index); - if (comp_len =3D=3D PAGE_SIZE) { zram_set_flag(zram, index, ZRAM_HUGE); atomic64_inc(&zram->stats.huge_pages); --=20 2.47.1.613.gc27f4b7a9f-goog