Linux Btrfs filesystem development
 help / color / mirror / Atom feed
From: Anand Jain <anand.jain@oracle.com>
To: kreijack@inwind.it, linux-btrfs <linux-btrfs@vger.kernel.org>
Subject: Re: Question: how understand the raid profile of a btrfs filesystem
Date: Tue, 24 Mar 2020 12:55:31 +0800	[thread overview]
Message-ID: <2c7f2844-b97d-0e15-6ae6-40c9c935aa77@oracle.com> (raw)
In-Reply-To: <517dac49-5f57-2754-2134-92d716e50064@alice.it>

On 3/21/20 1:56 AM, Goffredo Baroncelli wrote:
> Hi all,
> 
> for a btrfs filesystem, how an user can understand which is the 
> {data,mmetadata,system} [raid] profile in use ? E.g. the next chunk 
> which profile will have ?
> For simple filesystem it is easy looking at the output of (e.g)  "btrfs 
> fi df" or "btrfs fi us". But what if the filesystem is not simple ?
> 
> btrfs fi us t/.
> Overall:
>      Device size:          40.00GiB
>      Device allocated:          19.52GiB
>      Device unallocated:          20.48GiB
>      Device missing:             0.00B
>      Used:              16.75GiB
>      Free (estimated):          12.22GiB    (min: 8.27GiB)
>      Data ratio:                  1.90
>      Metadata ratio:              2.00
>      Global reserve:           9.06MiB    (used: 0.00B)
> 
> Data,single: Size:1.00GiB, Used:512.00MiB (50.00%)
>     /dev/loop0       1.00GiB
> 
> Data,RAID5: Size:3.00GiB, Used:2.48GiB (82.56%)
>     /dev/loop1       1.00GiB
>     /dev/loop2       1.00GiB
>     /dev/loop3       1.00GiB
>     /dev/loop0       1.00GiB
> 
> Data,RAID6: Size:4.00GiB, Used:3.71GiB (92.75%)
>     /dev/loop1       2.00GiB
>     /dev/loop2       2.00GiB
>     /dev/loop3       2.00GiB
>     /dev/loop0       2.00GiB
> 
> Data,RAID1C3: Size:2.00GiB, Used:1.88GiB (93.76%)
>     /dev/loop1       2.00GiB
>     /dev/loop2       2.00GiB
>     /dev/loop3       2.00GiB
> 
> Metadata,RAID1: Size:256.00MiB, Used:9.14MiB (3.57%)
>     /dev/loop2     256.00MiB
>     /dev/loop3     256.00MiB
> 
> System,RAID1: Size:8.00MiB, Used:16.00KiB (0.20%)
>     /dev/loop2       8.00MiB
>     /dev/loop3       8.00MiB
> 
> Unallocated:
>     /dev/loop1       5.00GiB
>     /dev/loop2       4.74GiB
>     /dev/loop3       4.74GiB
>     /dev/loop0       6.00GiB
> 
> This is an example of a strange but valid filesystem. So the question 
> is: the next chunk which profile will have ?
> Is there any way to understand what will happens ?
> 
> I expected that the next chunk will be allocated as the last "convert". 
> However I discovered that this is not true.
> 
> Looking at the code it seems to me that the logic is the following (from 
> btrfs_reduce_alloc_profile())
> 
>          if (allowed & BTRFS_BLOCK_GROUP_RAID6)
>                  allowed = BTRFS_BLOCK_GROUP_RAID6;
>          else if (allowed & BTRFS_BLOCK_GROUP_RAID5)
>                  allowed = BTRFS_BLOCK_GROUP_RAID5;
>          else if (allowed & BTRFS_BLOCK_GROUP_RAID10)
>                  allowed = BTRFS_BLOCK_GROUP_RAID10;
>          else if (allowed & BTRFS_BLOCK_GROUP_RAID1)
>                  allowed = BTRFS_BLOCK_GROUP_RAID1;
>          else if (allowed & BTRFS_BLOCK_GROUP_RAID0)
>                  allowed = BTRFS_BLOCK_GROUP_RAID0;
> 
>          flags &= ~BTRFS_BLOCK_GROUP_PROFILE_MASK;
> 
> So in the case above the profile will be RAID6. And in the general if a 
> RAID6 chunk is a filesystem, it wins !

  That's arbitrary and doesn't make sense to me, IMO mkfs should save
  default profile in the super-block (which can be changed using ioctl)
  and kernel can create chunks based on the default profile. This
  approach also fixes chunk size inconsistency between progs and kernel
  as reported/fixed here
    https://patchwork.kernel.org/patch/11431405/

Thanks, Anand

> But I am not sure.. Moreover I expected to see also reference to DUP 
> and/or RAID1C[34] ...
> 
> Does someone have any suggestion ?
> 
> BR
> G.Baroncelli
> 


  parent reply	other threads:[~2020-03-24  4:55 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-03-20 17:56 Question: how understand the raid profile of a btrfs filesystem Goffredo Baroncelli
2020-03-21  3:29 ` Zygo Blaxell
2020-03-21  5:40   ` Andrei Borzenkov
2020-03-21  7:14     ` Zygo Blaxell
2020-03-21  9:55   ` Goffredo Baroncelli
2020-03-21 23:26     ` Zygo Blaxell
2020-03-22  8:34       ` Goffredo Baroncelli
2020-03-22  8:38         ` Goffredo Baroncelli
2020-03-22 23:49           ` Zygo Blaxell
2020-03-23 20:50             ` Goffredo Baroncelli
2020-03-23 22:48               ` Graham Cobb
2020-03-25  4:09                 ` Zygo Blaxell
2020-03-25  4:30                   ` Paul Jones
2020-03-26  2:51                     ` Zygo Blaxell
2020-03-23 23:18               ` Zygo Blaxell
2020-03-24  4:55 ` Anand Jain [this message]
2020-03-24 17:59   ` Goffredo Baroncelli
2020-03-25  4:09     ` Andrei Borzenkov
2020-03-25 17:14       ` Goffredo Baroncelli
2020-03-26  3:10         ` Zygo Blaxell
  -- strict thread matches above, loose matches on Subject: below --
2020-03-20 17:58 Goffredo Baroncelli

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=2c7f2844-b97d-0e15-6ae6-40c9c935aa77@oracle.com \
    --to=anand.jain@oracle.com \
    --cc=kreijack@inwind.it \
    --cc=linux-btrfs@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox