From nobody Tue Dec 2 02:58:13 2025 Received: from mail-pl1-f170.google.com (mail-pl1-f170.google.com [209.85.214.170]) (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 852C230277D for ; Tue, 18 Nov 2025 07:30:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763451021; cv=none; b=A/yPN4RJXbp0vTL3ICVrUbQK0E3nWYCvVE3dsSX/9+V4b06Pk2aRLeIgmk5rLXnfIKe5Lu6maa0YpFuigh6djP6MM7C1Nwft0z/WvIR5xwfwHJvW+WlhMJeWwKmQxDxFbgBpJd05YuR6v+hetFV/B0qhI8UnGcmFH3mTAYGZoyg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763451021; c=relaxed/simple; bh=w/1Ykm2PaEu512nWzHzi9guwWnDK5t0d+FGYYp2oDdI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=czug50GvjKW1DRVV8Jy+uqTZf2tbisj9kdwySolMTVGhP1S/x/qr2pZ9KXIgme5Gc2Y2NOkxtcfBVwQqS/tnsk8P8pj5P+/q1BVBDpolscsXTgaL58BhGQZrU8JbAq7huK6gLO+4Z0Ua3RyRJbAikqjSe5wcRUdBX7hePLqUJSI= 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=deCx3Mch; arc=none smtp.client-ip=209.85.214.170 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="deCx3Mch" Received: by mail-pl1-f170.google.com with SMTP id d9443c01a7336-297e239baecso56446495ad.1 for ; Mon, 17 Nov 2025 23:30:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1763451019; x=1764055819; 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=AVrPRt4Q28dKav7HserS19FijFvKacb/VGjhgi5CQXo=; b=deCx3MchO7mgYrDZI1mhAcIrSoKdpGiTran1spccuunGKD9iSdoTbgmlno+FCpM867 bl4dwK5Dfou2HzR5nxcFJjK25DbM1SkqAHDsTfz7+E9bDF/SaxzAP81AjTBcDV0oRe19 CWxrZ0QjxhuekPPBXNrxB0KTDIlC0yU0S1mTA= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763451019; x=1764055819; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=AVrPRt4Q28dKav7HserS19FijFvKacb/VGjhgi5CQXo=; b=qaz/+M0hLEpM13m3O664+MO3pzMee5DSpvKnyU7zyB8fvDRPRfC6G3SzuDxN54mEZN LZKufufc054/JHijRJY8uCNb11BSTBNlMnriMWlMv9nhY5zOiJDubJYFIaWgbVdQEMpF l2SQZMLWzV1Cdl73c7/fGspnTs4cO3qM/PoI01GsfWsxBI+cAbxEnX9LtEfltwavuYeJ 4Sz/W+bHtuW+6YH9t0yVubDPOSw0E88mt85Vbcwnals4HXfMnywwQCjPSNCZxB65+D8v WlHHLqaTWQVsEi9qVYV+NBiCao6fOP1LPALSsGDN1J/sD77QPc8kbXw8cbgVbeCd1zDD vZhQ== X-Forwarded-Encrypted: i=1; AJvYcCUaXe0ifC6hhNtwKYzJGvpH5JPVv8nGC2LOibw1w7ybZkB8y0DuTmHSb2k1VGN4OU50J2873lemMMUBsQM=@vger.kernel.org X-Gm-Message-State: AOJu0Yx/34FgqWEiTW6jZ8Wg642LpLE6R6midng1P8IVnAE5plbSoqFz qrzMY2T1Rq7fIdy/s2jKkdVkIHDAWrQb5JJvQ4aLkxypgUXXZlHfNEUIGiFagaUjNsYgNQI27Rd DeY0= X-Gm-Gg: ASbGnct3Motng8rVjG8jptnntJ/oWiyEYK7tJN1XoI30bYYnpZg/+4tY2dSEcPmNMJv Vb6n9yTKP3/8qnM9r6E+9LKoj/EfzBwL+/XrwBzoQxyXcXTRjGQV7UST0lXspFqfKSYSlpnwibl W5Muvtpi8BnuAJNtKhVjasgwUmE8em+ep2FR3am42Po7E/x7kNRZIrmMu6M2eFmT6UJ9Dx5DYa4 qL4HTZT+uAI7Gk2S21vbqHbxg+mhe1Epx32+M451qGZiHjvZ6hHgq6vD1b9uj73b7PDlsZbSJW2 kw13RDZ66isRDTSQm2mlw9ui7r3Gvpi29cWu8XOQf+YIUy1yMvRRlLjGInPdS6D45kM8GNCisWm 4KO8+fUQ4R9KzBEfPtbt1mZmNK6OXvX/hn9s8h5OXTlntZDnzjcUM9bZmMBjI5IC+Kmgo626LsR wYzY1qztZA2I7gt/wpTd5VyJXM7j+qAJmW2qH1zw== X-Google-Smtp-Source: AGHT+IH8beW/w0lcFBPafVCSixbqD2wiZbB5SYmhJXK7ukSZHGhJTLatf743/ai6p9Zl//4nec99vQ== X-Received: by 2002:a17:903:38c7:b0:299:dc97:a694 with SMTP id d9443c01a7336-299f55a1d97mr25472885ad.24.1763451018460; Mon, 17 Nov 2025 23:30:18 -0800 (PST) Received: from tigerii.tok.corp.google.com ([2401:fa00:8f:203:beba:22fc:d89b:ce14]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2985c2568ccsm163926215ad.50.2025.11.17.23.30.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Nov 2025 23:30:18 -0800 (PST) From: Sergey Senozhatsky To: Andrew Morton Cc: Minchan Kim , Yuwen Chen , Richard Chang , Brian Geffon , Fengyu Lian , linux-kernel@vger.kernel.org, linux-mm@kvack.org, linux-block@vger.kernel.org, Sergey Senozhatsky Subject: [PATCHv4 2/6] zram: add writeback batch size device attr Date: Tue, 18 Nov 2025 16:29:56 +0900 Message-ID: <20251118073000.1928107-3-senozhatsky@chromium.org> X-Mailer: git-send-email 2.52.0.rc1.455.g30608eb744-goog In-Reply-To: <20251118073000.1928107-1-senozhatsky@chromium.org> References: <20251118073000.1928107-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" Introduce writeback_batch_size device attribute so that the maximum number of in-flight writeback bio requests can be configured at run-time per-device. This essentially enables batched bio writeback. Signed-off-by: Sergey Senozhatsky --- drivers/block/zram/zram_drv.c | 48 ++++++++++++++++++++++++++++++----- drivers/block/zram/zram_drv.h | 1 + 2 files changed, 43 insertions(+), 6 deletions(-) diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c index ea06f4d7b623..be39fe04b9b1 100644 --- a/drivers/block/zram/zram_drv.c +++ b/drivers/block/zram/zram_drv.c @@ -588,6 +588,42 @@ static ssize_t writeback_limit_show(struct device *dev, return sysfs_emit(buf, "%llu\n", val); } =20 +static ssize_t writeback_batch_size_store(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t len) +{ + struct zram *zram =3D dev_to_zram(dev); + u32 val; + ssize_t ret =3D -EINVAL; + + if (kstrtouint(buf, 10, &val)) + return ret; + + if (!val) + val =3D 1; + + down_read(&zram->init_lock); + zram->wb_batch_size =3D val; + up_read(&zram->init_lock); + ret =3D len; + + return ret; +} + +static ssize_t writeback_batch_size_show(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + u32 val; + struct zram *zram =3D dev_to_zram(dev); + + down_read(&zram->init_lock); + val =3D zram->wb_batch_size; + up_read(&zram->init_lock); + + return sysfs_emit(buf, "%u\n", val); +} + static void reset_bdev(struct zram *zram) { if (!zram->backing_dev) @@ -775,10 +811,7 @@ static void release_wb_ctl(struct zram_wb_ctl *wb_ctl) kfree(wb_ctl); } =20 -/* XXX: should be a per-device sysfs attr */ -#define ZRAM_WB_REQ_CNT 32 - -static struct zram_wb_ctl *init_wb_ctl(void) +static struct zram_wb_ctl *init_wb_ctl(struct zram *zram) { struct zram_wb_ctl *wb_ctl; int i; @@ -792,7 +825,7 @@ static struct zram_wb_ctl *init_wb_ctl(void) atomic_set(&wb_ctl->num_inflight, 0); init_completion(&wb_ctl->done); =20 - for (i =3D 0; i < ZRAM_WB_REQ_CNT; i++) { + for (i =3D 0; i < zram->wb_batch_size; i++) { struct zram_wb_req *req; =20 /* @@ -1183,7 +1216,7 @@ static ssize_t writeback_store(struct device *dev, goto release_init_lock; } =20 - wb_ctl =3D init_wb_ctl(); + wb_ctl =3D init_wb_ctl(zram); if (!wb_ctl) { ret =3D -ENOMEM; goto release_init_lock; @@ -2826,6 +2859,7 @@ static DEVICE_ATTR_RW(backing_dev); static DEVICE_ATTR_WO(writeback); static DEVICE_ATTR_RW(writeback_limit); static DEVICE_ATTR_RW(writeback_limit_enable); +static DEVICE_ATTR_RW(writeback_batch_size); #endif #ifdef CONFIG_ZRAM_MULTI_COMP static DEVICE_ATTR_RW(recomp_algorithm); @@ -2847,6 +2881,7 @@ static struct attribute *zram_disk_attrs[] =3D { &dev_attr_writeback.attr, &dev_attr_writeback_limit.attr, &dev_attr_writeback_limit_enable.attr, + &dev_attr_writeback_batch_size.attr, #endif &dev_attr_io_stat.attr, &dev_attr_mm_stat.attr, @@ -2908,6 +2943,7 @@ static int zram_add(void) =20 init_rwsem(&zram->init_lock); #ifdef CONFIG_ZRAM_WRITEBACK + zram->wb_batch_size =3D 32; spin_lock_init(&zram->wb_limit_lock); #endif =20 diff --git a/drivers/block/zram/zram_drv.h b/drivers/block/zram/zram_drv.h index 6cee93f9c0d0..1a647f42c1a4 100644 --- a/drivers/block/zram/zram_drv.h +++ b/drivers/block/zram/zram_drv.h @@ -129,6 +129,7 @@ struct zram { struct file *backing_dev; spinlock_t wb_limit_lock; bool wb_limit_enable; + u32 wb_batch_size; u64 bd_wb_limit; struct block_device *bdev; unsigned long *bitmap; --=20 2.52.0.rc1.455.g30608eb744-goog