From patchwork Fri Oct 16 05:59:19 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: louis@waffle.tech X-Patchwork-Id: 11840933 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id E0D4314B5 for ; Fri, 16 Oct 2020 06:05:30 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 9CC6B20848 for ; Fri, 16 Oct 2020 06:05:30 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=waffle.tech header.i=@waffle.tech header.b="PlbrU3B6" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2391467AbgJPGF3 (ORCPT ); Fri, 16 Oct 2020 02:05:29 -0400 Received: from waffle.tech ([104.225.250.114]:50648 "EHLO mx.waffle.tech" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2391456AbgJPGF3 (ORCPT ); Fri, 16 Oct 2020 02:05:29 -0400 X-Greylist: delayed 367 seconds by postgrey-1.27 at vger.kernel.org; Fri, 16 Oct 2020 02:05:28 EDT Received: from mx.waffle.tech (unknown [10.50.1.6]) by mx.waffle.tech (Postfix) with ESMTP id 0FE036D800; Thu, 15 Oct 2020 23:59:20 -0600 (MDT) DKIM-Filter: OpenDKIM Filter v2.11.0 mx.waffle.tech 0FE036D800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=waffle.tech; s=mx; t=1602827960; bh=1SOOzZUEPtTZ1cEnxe0bGc3shN/MtTJj5BxDLkuKFFA=; h=Date:From:Subject:To:From; b=PlbrU3B6CT8RjpMdJ/M7nXuOu9O621r1CH8MWvVjO1gTc1tZBgPXmyR7gYSoPTUKK O1lUqbz38Fon9qmm3ufgI38jN3REKGaqmR6EpzLY6o2H/DV6H4O9utUpMpsSJoKHR0 eAqD52P+9ZfSXvdTvEzTDQfyGTfCURvqo3I780gM= Received: from waffle.tech ([10.50.1.3]) by mx.waffle.tech with ESMTPSA id DiCbArg2iV+EXQcAQqPLoA (envelope-from ); Thu, 15 Oct 2020 23:59:20 -0600 MIME-Version: 1.0 Date: Fri, 16 Oct 2020 05:59:19 +0000 X-Mailer: RainLoop/1.14.0 From: louis@waffle.tech Message-ID: <8541d6d7a63e470b9f4c22ba95cd64fc@waffle.tech> Subject: [PATCH] btrfs: balance RAID1/RAID10 mirror selection To: linux-btrfs@vger.kernel.org X-Spam-Status: No, score=-0.2 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,DKIM_VALID_EF,UNPARSEABLE_RELAY autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on mx.waffle.tech Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org Balance RAID1/RAID10 mirror selection via plain round-robin scheduling. This should roughly double throughput for large reads. Signed-off-by: Louis Jencka --- fs/btrfs/volumes.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index 58b9c419a..45c581d46 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c @@ -333,6 +333,9 @@ struct list_head * __attribute_const__ btrfs_get_fs_uuids(void) return &fs_uuids; } +/* Used for round-robin balancing RAID1/RAID10 reads. */ +atomic_t rr_counter = ATOMIC_INIT(0); + /* * alloc_fs_devices - allocate struct btrfs_fs_devices * @fsid: if not NULL, copy the UUID to fs_devices::fsid @@ -5482,7 +5485,8 @@ static int find_live_mirror(struct btrfs_fs_info *fs_info, else num_stripes = map->num_stripes; - preferred_mirror = first + current->pid % num_stripes; + preferred_mirror = first + + (unsigned)atomic_inc_return(&rr_counter) % num_stripes; if (dev_replace_is_ongoing && fs_info->dev_replace.cont_reading_from_srcdev_mode ==