From patchwork Fri Sep 14 17:34:21 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jens Axboe X-Patchwork-Id: 10601127 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 77C0414DB for ; Fri, 14 Sep 2018 17:34:27 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 5EECC2BC20 for ; Fri, 14 Sep 2018 17:34:27 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 4C8F62BC21; Fri, 14 Sep 2018 17:34:27 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 29F542BC16 for ; Fri, 14 Sep 2018 17:34:26 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728444AbeINWtx (ORCPT ); Fri, 14 Sep 2018 18:49:53 -0400 Received: from mail-io1-f46.google.com ([209.85.166.46]:38857 "EHLO mail-io1-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727118AbeINWtx (ORCPT ); Fri, 14 Sep 2018 18:49:53 -0400 Received: by mail-io1-f46.google.com with SMTP id y3-v6so6670903ioc.5 for ; Fri, 14 Sep 2018 10:34:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel-dk.20150623.gappssmtp.com; s=20150623; h=to:cc:from:subject:message-id:date:user-agent:mime-version :content-language:content-transfer-encoding; bh=wyTCxH0O+muFe1kXBA9I/znLJ903QXjqnydA6GtGaRg=; b=bL1HWut+oaCBZKQTlrRA5kIbL1RoU2ozjR5VgUSOR1LtSjBVJ+T6eIBVdTH/wljPKT EPY4RzZVayAkCnamjb6vzbwJuWUCpw7LiHtuFXlph1fH8PkW0Pj7Fwr9w9bek+mhdi/w 6MvFmSkCahQ/YoQ5FmU6Yf5RWov18KMqL8DTXf8e3CFNmnsl+8PM483cnmHtpexezLGT eG9LpTW51bxrmyHNdVbYEcJHyYJz2kXl9c1c/gaTpiuheDlsAl0gDwJ/NJotMHsUWePq diwPC2UHRz/QyH9TeqmeJPHwXZnr4STEY7+TFgnXEa5o7NHpllhqC1Drv1Hoddypadla YMNw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:to:cc:from:subject:message-id:date:user-agent :mime-version:content-language:content-transfer-encoding; bh=wyTCxH0O+muFe1kXBA9I/znLJ903QXjqnydA6GtGaRg=; b=cmS80MF1MDt/Yn2E8JHfDHlfglwZXNd+d/8qAkFdVZCVswqurbCdxAN9bi3VePmNEr Hf2gaeH5JXqx5xN5epURiNm3WN8vxDTyGNb66ehM516dBwo4hiEksEpvMpQ7XBnvnZLt FtJfVirk0sRx1FpeQQEnXAYwFOAPIpUKdmKXAR3TTQs0cJ0RChPq63zEwzzbHnmNukHI WzNCH7bTqIOp5NdjDzWM1dghTsaeixVTmPN6Zt38IMcCjkRuloetIg4I/0A/gR/ofsG7 FOHCMZmWGRH4HruXaa6+2TQ4mMn4hSXwl9WzsnWs9FbKNk3QZrSixcRPzojIiMKgiQ9I L0UQ== X-Gm-Message-State: APzg51CHrDuLmfWFpGdSF53nQdv10kfwu3jvn4uxjPdzomoP245VjeUZ esmcMT1ZofomjneQEWXvyvypQKn9pa8= X-Google-Smtp-Source: ANB0Vda9hvhUSCgQo3315oL7OpPX+vjaktgU3qXXuDG1+Xft5/0IB+0b/MpsZgaYb/4gFgJBKoPcAg== X-Received: by 2002:a6b:22cc:: with SMTP id i195-v6mr5304253ioi.292.1536946463607; Fri, 14 Sep 2018 10:34:23 -0700 (PDT) Received: from [192.168.1.56] ([216.160.245.98]) by smtp.gmail.com with ESMTPSA id y14-v6sm2398189iob.71.2018.09.14.10.34.21 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 14 Sep 2018 10:34:22 -0700 (PDT) To: "linux-block@vger.kernel.org" Cc: Josef Bacik From: Jens Axboe Subject: blk-wbt: handle O_DIRECT writes like high priority writes Message-ID: Date: Fri, 14 Sep 2018 11:34:21 -0600 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.0 MIME-Version: 1.0 Content-Language: en-US Sender: linux-block-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-block@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Currently we don't limit O_DIRECT writes at all, we just let them queue up as many as possible. As max priority writes should be able to get full bandwidth, handle O_DIRECT writes just like we would high priority buffered writes. Signed-off-by: Jens Axboe diff --git a/block/blk-wbt.c b/block/blk-wbt.c index 8e20a0677dcf..9b17161b5668 100644 --- a/block/blk-wbt.c +++ b/block/blk-wbt.c @@ -450,6 +450,12 @@ static bool close_io(struct rq_wb *rwb) time_before(now, rwb->last_comp + HZ / 10); } +static bool is_odirect_write(unsigned long rw) +{ + return op_is_write(rw) && + ((rw & (REQ_SYNC | REQ_IDLE)) == (REQ_SYNC | REQ_IDLE)); +} + #define REQ_HIPRIO (REQ_SYNC | REQ_META | REQ_PRIO) static inline unsigned int get_limit(struct rq_wb *rwb, unsigned long rw) @@ -474,7 +480,8 @@ static inline unsigned int get_limit(struct rq_wb *rwb, unsigned long rw) * the idle limit, or go to normal if we haven't had competing * IO for a bit. */ - if ((rw & REQ_HIPRIO) || wb_recent_wait(rwb) || current_is_kswapd()) + if ((rw & REQ_HIPRIO) || wb_recent_wait(rwb) || current_is_kswapd() || + is_odirect_write(rw)) limit = rwb->rq_depth.max_depth; else if ((rw & REQ_BACKGROUND) || close_io(rwb)) { /* @@ -578,12 +585,6 @@ static inline bool wbt_should_throttle(struct rq_wb *rwb, struct bio *bio) { switch (bio_op(bio)) { case REQ_OP_WRITE: - /* - * Don't throttle WRITE_ODIRECT - */ - if ((bio->bi_opf & (REQ_SYNC | REQ_IDLE)) == - (REQ_SYNC | REQ_IDLE)) - return false; /* fallthrough */ case REQ_OP_DISCARD: return true;