Received: by 2002:a05:6a10:9848:0:0:0:0 with SMTP id x8csp140955pxf; Thu, 25 Mar 2021 00:00:44 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzyJOP1SEgagR7Rgp8c91NOGWJDH4HR5WUOd8fg2ANFAyZi9nZZMsXKq93meIEhdtsvzTDL X-Received: by 2002:a05:6402:26ce:: with SMTP id x14mr7262545edd.359.1616655644406; Thu, 25 Mar 2021 00:00:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1616655644; cv=none; d=google.com; s=arc-20160816; b=tVerMf7uSZIM7Gi/nNmL2FOG7+9ke/DoZ35wh4Rygc7QBNQLlEad+5CYsKxHu+Fm8r CILfEQgin2odYfvCV4+0cR80VFW/G4noR5sydq6EmzVsUR6PWOkEnWyVWi5pzNFaq3uQ TkqkmzM9BNZWKSFYveuFNRwk5A41vUFMYTh0TXKgqU8mFtLRDyQ6K1r90yfnap1UiRWe UCnL7bAl7WM1Gfce9T+7Bphy2k9eFEF4W1wL2OBU7el2DfRzeNDn0v4t7UmrRh+An/Ew PRJyjP4NeQW/X5jqsk0fWmbKbK5LQ8SfhQh4BQJ0bdQ0Syc2GozCWIC1KuiUKlOx6Urc 2kjg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:references:in-reply-to:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature; bh=DeBrNab0KU7KzKaG5m2cKOd/Gyr3Wt1IGcfHEMz36Qo=; b=mvq3BxRiz8zvmGET6EhbfHgh1S7epEG1zNv2xNWZu0eK+5HoeQ5OvI7ZM9DGTm/jI5 NFD/f6kDcS1PnnTRyL2fvEWLyD/Y8VBeWpbYVgPhTW7CDu5a0Hg/JetbLqk+G9/IgwRH EOsE6ZSCTlcRtANwEyqj44HHY+bEmubkOZfJiEeM9xDA7eJJjD8YdQOTWEG5tFDe6QSK 2t7k/qUsyH7k2MtCw0doMPME8Pe7HfofEwnap+D8YtObXXJfy4+6/wnhX5OA/g23lBrG W87bSG3YR96dVdo3FI3F2McWc2T0ap0r21RZAUKPZR6HIL/Erwuy1XpHzAUy6f8awgKW UzEQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=Gp+Saexn; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id a9si3304637edr.332.2021.03.25.00.00.22; Thu, 25 Mar 2021 00:00:44 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=Gp+Saexn; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230140AbhCYG64 (ORCPT + 99 others); Thu, 25 Mar 2021 02:58:56 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37726 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229904AbhCYG6T (ORCPT ); Thu, 25 Mar 2021 02:58:19 -0400 Received: from mail-pg1-x52e.google.com (mail-pg1-x52e.google.com [IPv6:2607:f8b0:4864:20::52e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6933BC06174A; Wed, 24 Mar 2021 23:58:19 -0700 (PDT) Received: by mail-pg1-x52e.google.com with SMTP id e33so826520pgm.13; Wed, 24 Mar 2021 23:58:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; bh=DeBrNab0KU7KzKaG5m2cKOd/Gyr3Wt1IGcfHEMz36Qo=; b=Gp+SaexnPkH/P50XCFy/6XBBnQQBLSdHcmjcap9YMg+BTzmyVFYSrHpOXCz5QJyXWo 2qa2TcycVdUxzmf/yiC84yw/4NTKRbSwNmv3ef9V9Cuvv5xtlnxi4NDUdDO6pTsEVI+P u3f6OVZRBLLYrGQczOMyCwXQOWjurtcr12+85iVo4J3XTlfCayowMKHno4y7iY7rH1xj SKBxVVQ3GZ9tkGRIL3FQAJQXo0W3u42eDVZKLpHyNbnDC6lrFxN/JXeuSjPthkJlK+Bo UHjgHAodVbbY7BEGztcTi5CYemjF1q+6uURfEFfgkvImU7Sb3m+lPNxq+ZxZKKa0q/S0 0A9g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:in-reply-to:references; bh=DeBrNab0KU7KzKaG5m2cKOd/Gyr3Wt1IGcfHEMz36Qo=; b=YnQRvIvlR5/ZcNIc8M/WAbcqiSKVujUPJ/PebuUsh4NkOSDoRGwEdE0KEZoXJShfV2 JYGeyVwcgYgSvdU1O2B9sKlhH/rjWBcF41Hm0iwcO5kDoM1mXq0neoytf+zo8O9arNuz P4jLVa5MEPRM7DjiMkKCis44yCE9YtakrL5BSz+j3h44e06zGeni/jLT8CyUr+y3JoyF 17lK/GoH7x9hQrMNChZezUYt4SJsgpnKF9x3B4E5W2qI5sDYWp1OGu/RvIWpzqFJ6jab exZty209QmJRZD/W8SrHu9UyTIpQ/Mdne3d8aKbVVooYA8YtX+w9BtWL4FzZ0viCwLRQ r/3A== X-Gm-Message-State: AOAM533fDTmQ+Q6FGH6oO1rsIUEj0jgXOVC3e61JH56maaC5t58k+e5l D7sz5D5Fcw2TgKbU32oTSRo= X-Received: by 2002:aa7:808d:0:b029:1ed:993c:3922 with SMTP id v13-20020aa7808d0000b02901ed993c3922mr6384860pff.75.1616655499013; Wed, 24 Mar 2021 23:58:19 -0700 (PDT) Received: from VM-0-3-centos.localdomain ([101.32.213.191]) by smtp.gmail.com with ESMTPSA id x19sm4470202pfc.152.2021.03.24.23.58.17 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 24 Mar 2021 23:58:18 -0700 (PDT) From: brookxu To: paolo.valente@linaro.org, axboe@kernel.dk, tj@kernel.org Cc: linux-block@vger.kernel.org, cgroups@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 10/14] bfq: optimize IO injection under better_fairness Date: Thu, 25 Mar 2021 14:57:54 +0800 Message-Id: X-Mailer: git-send-email 1.8.3.1 In-Reply-To: References: In-Reply-To: References: Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Chunguang Xu In order to ensure better Qos of tasks of different groups and different classes under better_fairness, we only allow the queues of the same class in the same group can be injected. Signed-off-by: Chunguang Xu --- block/bfq-iosched.c | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/block/bfq-iosched.c b/block/bfq-iosched.c index 51192bd..be5b1e3 100644 --- a/block/bfq-iosched.c +++ b/block/bfq-iosched.c @@ -1900,6 +1900,27 @@ static void bfq_reset_inject_limit(struct bfq_data *bfqd, bfqq->decrease_time_jif = jiffies; } +static bool bfq_bfqq_may_inject(struct bfq_queue *bfqq, struct bfq_queue *new_bfqq) +{ + struct bfq_data *bfqd = bfqq->bfqd; + bool ret = true; + + if (unlikely(bfqd->better_fairness)) { + /* + * In addition to throughput, better_fairness also pays + * attention to Qos. In the container scenario, in order + * to ensure the Qos of each group we only allow tasks + * of the same class in the same group to be injected. + */ + if (bfq_class(bfqq) != bfq_class(new_bfqq)) + ret = false; + + if (bfqq_group(bfqq) != bfqq_group(new_bfqq)) + ret = false; + } + return ret; +} + static void bfq_update_io_intensity(struct bfq_queue *bfqq, u64 now_ns) { u64 tot_io_time = now_ns - bfqq->io_start_time; @@ -1985,7 +2006,8 @@ static void bfq_check_waker(struct bfq_data *bfqd, struct bfq_queue *bfqq, bfqd->last_completed_rq_bfqq == bfqq || bfq_bfqq_has_short_ttime(bfqq) || now_ns - bfqd->last_completion >= 4 * NSEC_PER_MSEC || - bfqd->last_completed_rq_bfqq == bfqq->waker_bfqq) + bfqd->last_completed_rq_bfqq == bfqq->waker_bfqq || + !bfq_bfqq_may_inject(bfqq, bfqd->last_completed_rq_bfqq)) return; if (bfqd->last_completed_rq_bfqq != @@ -4415,6 +4437,9 @@ static bool bfq_bfqq_must_idle(struct bfq_queue *bfqq) else limit = in_serv_bfqq->inject_limit; + if (!bfq_bfqq_may_inject(in_serv_bfqq, bfqq)) + continue; + if (bfqd->rq_in_driver < limit) { bfqd->rqs_injected = true; return bfqq; @@ -4590,6 +4615,7 @@ static struct bfq_queue *bfq_select_queue(struct bfq_data *bfqd) * happen to be served only after other queues. */ if (async_bfqq && + !(bfqd->better_fairness && !bfq_class_idx(&bfqq->entity)) && icq_to_bic(async_bfqq->next_rq->elv.icq) == bfqq->bic && bfq_serv_to_charge(async_bfqq->next_rq, async_bfqq) <= bfq_bfqq_budget_left(async_bfqq)) -- 1.8.3.1