Received: by 2002:a6b:500f:0:0:0:0:0 with SMTP id e15csp451333iob; Thu, 28 Apr 2022 06:09:03 -0700 (PDT) X-Google-Smtp-Source: ABdhPJybESBVO3oL2hfgRDuy5oemr0ovqBcAxpp3ekUgdHAbA92obM8qXvTM/BCgzE5ZsAKKT3Ev X-Received: by 2002:a17:906:1706:b0:6e8:9335:d554 with SMTP id c6-20020a170906170600b006e89335d554mr30818459eje.111.1651151343088; Thu, 28 Apr 2022 06:09:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1651151343; cv=none; d=google.com; s=arc-20160816; b=vL8xZsA+SAiWxxjortLlNk7ziztyALwx1TayWlutmc+4k8YjG25/o1ic/IRTD+RrRH Ef+8AXfvAvfNbSr9Xx2K2+vLzvBDSZqNP2EFQVKuZu4UlufIStWVV+3dMNtGkNa54x2z AcDPUGzI0xsBzkBaFk84BoLOGxhZj8avqeRM+L7pnqmwYXHG3e3IKqTJWyTIwpGrWynN xoumkQca7IYrw3qj8/BioRL0gNEDHLex//NPrUHKDqcgi3rRB+gSo3u128Q9VHxIfh48 s/3QabL5JJtFiEsDJBRmqEI5PNSDBdWIS8wCFPBePHDRjEExYvI/L1oZS0vdnv9R9swc xvTw== 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=2wA/w7JYzJ1JY8Z7uzNQjle95Zryby0uvY1PxfFSy/4=; b=LStlXQPBjNterFJ7Sm5hA6pjThkSK/L+t/x/mcNjm8D7EgJ684E5ft/pyqCqjYvXJo CChuioF152DMg5ZqkDuaIh9QinZkR2SHKIJDLceKqP6Cioo/HLBpusOh3zykJK7VAyf3 zgBBzlsIUMYCVDRmMiJi/nabCAIrheyzPye+A+TdK7GNUqAil1YLARd1NVnioNvWtG9p on6YUps+xK1aqT8z3aHVAc41mmg63kdFvtaawAO9A5za2WVr3RzHyry/Y/kxAPC820cA X3CTZT9+Pk4ngCO6jYhQzth+THFoD2kPHvp1kC4Sj0jTsd8ckcYEHYXVUE+nPjwHaSTC Lwvw== 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; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=huawei.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id z18-20020a50cd12000000b0041d81c739desi3921280edi.535.2022.04.28.06.08.39; Thu, 28 Apr 2022 06:09:03 -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; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=huawei.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1345741AbiD1L5o (ORCPT + 99 others); Thu, 28 Apr 2022 07:57:44 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55932 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235128AbiD1L5m (ORCPT ); Thu, 28 Apr 2022 07:57:42 -0400 Received: from szxga08-in.huawei.com (szxga08-in.huawei.com [45.249.212.255]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 320BA84EC0; Thu, 28 Apr 2022 04:54:28 -0700 (PDT) Received: from kwepemi500025.china.huawei.com (unknown [172.30.72.55]) by szxga08-in.huawei.com (SkyGuard) with ESMTP id 4KpvCG5lvZz1JBfl; Thu, 28 Apr 2022 19:53:30 +0800 (CST) Received: from kwepemm600009.china.huawei.com (7.193.23.164) by kwepemi500025.china.huawei.com (7.221.188.170) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.24; Thu, 28 Apr 2022 19:54:25 +0800 Received: from huawei.com (10.175.127.227) by kwepemm600009.china.huawei.com (7.193.23.164) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.24; Thu, 28 Apr 2022 19:54:25 +0800 From: Yu Kuai To: , , , CC: , , , , Subject: [PATCH -next v5 0/3] support concurrent sync io for bfq on a specail occasion Date: Thu, 28 Apr 2022 20:08:34 +0800 Message-ID: <20220428120837.3737765-1-yukuai3@huawei.com> X-Mailer: git-send-email 2.31.1 MIME-Version: 1.0 Content-Transfer-Encoding: 7BIT Content-Type: text/plain; charset=US-ASCII X-Originating-IP: [10.175.127.227] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To kwepemm600009.china.huawei.com (7.193.23.164) X-CFilter-Loop: Reflected X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_PASS 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 Changes in v5: - rename bfq_add_busy_queues() to bfq_inc_busy_queues() in patch 1 - fix wrong definition in patch 1 - fix spelling mistake in patch 2: leaset -> least - update comments in patch 3 - add reviewed-by tag in patch 2,3 Changes in v4: - split bfq_update_busy_queues() to bfq_add/dec_busy_queues(), suggested by Jan Kara. - remove unused 'in_groups_with_pending_reqs', Changes in v3: - remove the cleanup patch that is irrelevant now(I'll post it separately). - instead of hacking wr queues and using weights tree insertion/removal, using bfq_add/del_bfqq_busy() to count the number of groups (suggested by Jan Kara). Changes in v2: - Use a different approch to count root group, which is much simple. Currently, bfq can't handle sync io concurrently as long as they are not issued from root group. This is because 'bfqd->num_groups_with_pending_reqs > 0' is always true in bfq_asymmetric_scenario(). The way that bfqg is counted into 'num_groups_with_pending_reqs': Before this patchset: 1) root group will never be counted. 2) Count if bfqg or it's child bfqgs have pending requests. 3) Don't count if bfqg and it's child bfqgs complete all the requests. After this patchset: 1) root group is counted. 2) Count if bfqg have at least one bfqq that is marked busy. 3) Don't count if bfqg doesn't have any busy bfqqs. The main reason to use busy state of bfqq instead of 'pending requests' is that bfqq can stay busy after dispatching the last request if idling is needed for service guarantees. With the above changes, concurrent sync io can be supported if only one group is activated. fio test script(startdelay is used to avoid queue merging): [global] filename=/dev/nvme0n1 allow_mounted_write=0 ioengine=psync direct=1 ioscheduler=bfq offset_increment=10g group_reporting rw=randwrite bs=4k [test1] numjobs=1 [test2] startdelay=1 numjobs=1 [test3] startdelay=2 numjobs=1 [test4] startdelay=3 numjobs=1 [test5] startdelay=4 numjobs=1 [test6] startdelay=5 numjobs=1 [test7] startdelay=6 numjobs=1 [test8] startdelay=7 numjobs=1 test result: running fio on root cgroup v5.18-rc1: 550 Mib/s v5.18-rc1-patched: 550 Mib/s running fio on non-root cgroup v5.18-rc1: 349 Mib/s v5.18-rc1-patched: 550 Mib/s Note that I also test null_blk with "irqmode=2 completion_nsec=100000000(100ms) hw_queue_depth=1", and tests show that service guarantees are still preserved. Previous versions: RFC: https://lore.kernel.org/all/20211127101132.486806-1-yukuai3@huawei.com/ v1: https://lore.kernel.org/all/20220305091205.4188398-1-yukuai3@huawei.com/ v2: https://lore.kernel.org/all/20220416093753.3054696-1-yukuai3@huawei.com/ v3: https://lore.kernel.org/all/20220427124722.48465-1-yukuai3@huawei.com/ v4: https://lore.kernel.org/all/20220428111907.3635820-1-yukuai3@huawei.com/ Yu Kuai (3): block, bfq: record how many queues are busy in bfq_group block, bfq: refactor the counting of 'num_groups_with_pending_reqs' block, bfq: do not idle if only one group is activated block/bfq-cgroup.c | 1 + block/bfq-iosched.c | 48 +++----------------------------------- block/bfq-iosched.h | 57 +++++++-------------------------------------- block/bfq-wf2q.c | 35 +++++++++++++++++----------- 4 files changed, 35 insertions(+), 106 deletions(-) -- 2.31.1