Received: by 2002:ad5:4acb:0:0:0:0:0 with SMTP id n11csp2257511imw; Wed, 6 Jul 2022 02:51:19 -0700 (PDT) X-Google-Smtp-Source: AGRyM1sRnTFeup0bK1VjC5rYx0Vg8HflF4Z5DDydqojzZPv9FD/A816/PQXGNmDnuH3JKn5J4eUL X-Received: by 2002:a17:902:d54b:b0:16b:eea4:77da with SMTP id z11-20020a170902d54b00b0016beea477damr10335773plf.45.1657101079048; Wed, 06 Jul 2022 02:51:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1657101079; cv=none; d=google.com; s=arc-20160816; b=sSh8kyLlg3paqrJMvWvgz3syVbEuFuKZ5rmMr8JYM51fCiBtErns5XZu9/0rrB4yhF nn8FC1y8/JEQ3DxCy03mWSoiEFRuskFXGpf+7x5gXnlv4fot5Vl0lsCxpDKvF3Gtyj+N co0dDy9e6R8P/N/bYuBNI4b7p+daiYU+xHJ+o7nV3uPmSnDg1datpAhVC55VjU8NPmQe dBi/lLwMz8WTFE5ZqIyJuU/ZToK3JBpzfY7wpwopzWhcTbX66R6ywpDw8XaihShzlAZQ 0+rjcpJsT8QV2SDQXOUgnwnbZLLbFOrEKdbtC7oJ5r58YHQYvo7mB6wxA/JON9CWeq6M ERBQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from; bh=ID/vjdFMN1ZjWf6MBgtSlZUn9ZovvUE1wSI0t1tlyfo=; b=p+SB6PlosEGjtyb8scnRgDv+4yRjW9RzHkpJsgCxSvfj6WbPZxsZzbd/VGfp65SgCr /hST+OzQQGSNDysTz30uudTg72Vic5Bye5R2UuS1P6m0HE3umnp+lfoQS3hM4b+V+weo kijNWhdMBs+GmH9o2e6zz30dbdk0gy6k4Y8KenpsxhX78ZGDS3pCEyevibVLZJSge0iA 1DmHrbusfG3v8vXK9l886nx+RZDOj+kz5rW9gV8IU+pJIY6r7odOfv4FzqdFDyRTbC8h mMHggvOnS9GQ7zh/BLz0DA+E9qrpvOFmM12+KuOcwv6T39w1gRN3Y6/BASOzJmNF+SsS UmWg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id d9-20020a654249000000b00412aa446decsi253079pgq.356.2022.07.06.02.51.07; Wed, 06 Jul 2022 02:51:19 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231856AbiGFJTT (ORCPT + 99 others); Wed, 6 Jul 2022 05:19:19 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34326 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229771AbiGFJTQ (ORCPT ); Wed, 6 Jul 2022 05:19:16 -0400 Received: from dggsgout11.his.huawei.com (unknown [45.249.212.51]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8DFAD14D05 for ; Wed, 6 Jul 2022 02:19:13 -0700 (PDT) Received: from mail02.huawei.com (unknown [172.30.67.143]) by dggsgout11.his.huawei.com (SkyGuard) with ESMTP id 4LdDVV0D49zl1Vt for ; Wed, 6 Jul 2022 17:18:26 +0800 (CST) Received: from huaweicloud.com (unknown [10.175.127.227]) by APP3 (Coremail) with SMTP id _Ch0CgAXemmNU8VihkO+AQ--.22758S4; Wed, 06 Jul 2022 17:19:11 +0800 (CST) From: Yu Kuai To: agk@redhat.com, snitzer@kernel.org, dm-devel@redhat.com, mpatocka@redhat.com Cc: linux-kernel@vger.kernel.org, yukuai3@huawei.com, yukuai1@huaweicloud.com, yi.zhang@huawei.com Subject: [PATCH] dm writecache: fix inaccurate reads/writes stats Date: Wed, 6 Jul 2022 17:31:46 +0800 Message-Id: <20220706093146.1961598-1-yukuai1@huaweicloud.com> X-Mailer: git-send-email 2.31.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-CM-TRANSID: _Ch0CgAXemmNU8VihkO+AQ--.22758S4 X-Coremail-Antispam: 1UD129KBjvJXoWxZw43uFy3AFyrJrW8XFWxCrg_yoW5WFW8pF Z7Jr15Gr1SvF47WwsrAa4UWa4FyayDJasFq347G3yxuF1DAwnxCFWUWFy2yF40qr97uFW3 AF4DKrW8CryjyFJanT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUyC14x267AKxVW8JVW5JwAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWUWVWUuwAFIxvE14AKwVWUJVWUGwA2ocxC64kIII0Yj41l84x0c7CEw4AK67xGY2AK02 1l84ACjcxK6xIIjxv20xvE14v26w1j6s0DM28EF7xvwVC0I7IYx2IY6xkF7I0E14v26r4U JVWxJr1l84ACjcxK6I8E87Iv67AKxVW0oVCq3wA2z4x0Y4vEx4A2jsIEc7CjxVAFwI0_Gc CE3s1le2I262IYc4CY6c8Ij28IcVAaY2xG8wAqx4xG64xvF2IEw4CE5I8CrVC2j2WlYx0E 2Ix0cI8IcVAFwI0_Jr0_Jr4lYx0Ex4A2jsIE14v26r1j6r4UMcvjeVCFs4IE7xkEbVWUJV W8JwACjcxG0xvY0x0EwIxGrwACjI8F5VA0II8E6IAqYI8I648v4I1l42xK82IYc2Ij64vI r41l4I8I3I0E4IkC6x0Yz7v_Jr0_Gr1lx2IqxVAqx4xG67AKxVWUJVWUGwC20s026x8Gjc xK67AKxVWUGVWUWwC2zVAF1VAY17CE14v26r1q6r43MIIYrxkI7VAKI48JMIIF0xvE2Ix0 cI8IcVAFwI0_Jr0_JF4lIxAIcVC0I7IYx2IY6xkF7I0E14v26r1j6r4UMIIF0xvE42xK8V AvwI8IcIk0rVWrZr1j6s0DMIIF0xvEx4A2jsIE14v26r1j6r4UMIIF0xvEx4A2jsIEc7Cj xVAFwI0_Gr0_Gr1UYxBIdaVFxhVjvjDU0xZFpf9x0JUdHUDUUUUU= X-CM-SenderInfo: 51xn3trlr6x35dzhxuhorxvhhfrp/ X-CFilter-Loop: Reflected X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Yu Kuai Test procedures: 1) format a dm writecache device with 4k blocksize. 2) flush cache. 3) cache 1G data through write. 4) clear stats. 5) read 2G data with bs=1m. 6) read stats. Expected result: cache hit ratio is 50%. Test result: stats: 0, 1011345, 749201, 0, 263168, 262144, 0, 0, 0, 0, 0, 0, 0, 0 ratio is 99% (262144/263168) The way that reads is accounted is different between cache hit and cache miss: 1) If cache hit, reads will be accounted for each entry, which means reads and read_hits will both increase 256 for each io in the above test. 2) If cache miss, reads will only account once, which means reads will only increase 1 for each io in the above test. The case that writes_around has the same problem, fix it by adding appropriate reads/writes in writecache_map_remap_origin(). Fixes: e3a35d03407c ("dm writecache: add event counters") Signed-off-by: Yu Kuai --- drivers/md/dm-writecache.c | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/drivers/md/dm-writecache.c b/drivers/md/dm-writecache.c index d74c5a7a0ab4..c2c6c3a023dd 100644 --- a/drivers/md/dm-writecache.c +++ b/drivers/md/dm-writecache.c @@ -1329,16 +1329,29 @@ enum wc_map_op { WC_MAP_ERROR, }; -static enum wc_map_op writecache_map_remap_origin(struct dm_writecache *wc, struct bio *bio, - struct wc_entry *e) +static enum wc_map_op writecache_map_remap_origin(struct dm_writecache *wc, + struct bio *bio, + struct wc_entry *e, bool read) { + sector_t next_boundary; + unsigned long long miss_count; + if (e) { - sector_t next_boundary = + next_boundary = read_original_sector(wc, e) - bio->bi_iter.bi_sector; if (next_boundary < bio->bi_iter.bi_size >> SECTOR_SHIFT) dm_accept_partial_bio(bio, next_boundary); + } else { + next_boundary = bio->bi_iter.bi_size; } + miss_count = (round_up(next_boundary, wc->block_size) >> + wc->block_size_bits) - 1; + if (read) + wc->stats.reads += miss_count; + else + wc->stats.writes += miss_count; + return WC_MAP_REMAP_ORIGIN; } @@ -1366,7 +1379,7 @@ static enum wc_map_op writecache_map_read(struct dm_writecache *wc, struct bio * map_op = WC_MAP_REMAP; } } else { - map_op = writecache_map_remap_origin(wc, bio, e); + map_op = writecache_map_remap_origin(wc, bio, e, true); } return map_op; @@ -1458,7 +1471,8 @@ static enum wc_map_op writecache_map_write(struct dm_writecache *wc, struct bio direct_write: wc->stats.writes_around++; e = writecache_find_entry(wc, bio->bi_iter.bi_sector, WFE_RETURN_FOLLOWING); - return writecache_map_remap_origin(wc, bio, e); + return writecache_map_remap_origin(wc, bio, e, + false); } wc->stats.writes_blocked_on_freelist++; writecache_wait_on_freelist(wc); -- 2.31.1