* Never balance metadata?
@ 2023-02-11 1:36 waxhead
2023-02-11 8:38 ` Martin Steigerwald
2023-02-11 17:18 ` Forza
0 siblings, 2 replies; 8+ messages in thread
From: waxhead @ 2023-02-11 1:36 UTC (permalink / raw)
To: linux-btrfs
I have read several places, including on this mailing list that metadata
is not supposed to be balanced unless converting between profiles.
Interestingly enough there is nothing mentioned about this in the docs...
https://btrfs.readthedocs.io/en/latest/btrfs-balance.html
Should one still NOT balance metadata? If so - please update the docs
with a explanation to why one should not do that.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Never balance metadata?
2023-02-11 1:36 Never balance metadata? waxhead
@ 2023-02-11 8:38 ` Martin Steigerwald
2023-02-11 11:42 ` Andrei Borzenkov
2023-02-11 17:18 ` Forza
1 sibling, 1 reply; 8+ messages in thread
From: Martin Steigerwald @ 2023-02-11 8:38 UTC (permalink / raw)
To: linux-btrfs; +Cc: waxhead
waxhead - 11.02.23, 02:36:26 CET:
> I have read several places, including on this mailing list that
> metadata is not supposed to be balanced unless converting between
> profiles.
>
> Interestingly enough there is nothing mentioned about this in the
> docs... https://btrfs.readthedocs.io/en/latest/btrfs-balance.html
>
> Should one still NOT balance metadata? If so - please update the docs
> with a explanation to why one should not do that.
If that is still the case, it may also be good to by default omit
metadata on a balance without parameters.
A long, long time ago I experienced a much longer boot time after a
balance, I decided to refrain from balancing my BTRFS file systems.
Especially as long as there is still unallocated space on them. Cause as
long as BTRFS can still allocate a chunk, I thought that is fine. I
thought I would be getting a faster system, but it was much much slower.
That was on a SATA SSD.
An additional reason for not, or at least not regularly balancing for me
is avoiding needless writes to flash storage like SATA or NVMe SSDs.
Usually they can take it, but why age them more than needed?
Maybe all or some of this is not accurate anymore and one should balance
BTRFS regularly like default in SUSE distributions, maybe regular
balancing even reduces writes on other occasions, however I never fully
understood the performance impact of a regular balance. However in a
virtual environment with lots of virtual machines it may not be best to
start balance on a lot of them at same or similar times either,
considering the load it creates for the underlying storage.
I know balancing not the same as defragmenting files in other filesystems,
but I still remember the strong warnings of XFS developers not to ever
just defragment a XFS filesystem just cause you feel like it. The
reasoning behind these warnings was that defragmenting files tends to
fragment free space. But balancing actually defragments free space as
far as I understood and thus is different.
Anyway, I am keen to read on more insight on this from people who
understand better what impact a BTRFS balance really has.
Thanks,
--
Martin
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Never balance metadata?
2023-02-11 8:38 ` Martin Steigerwald
@ 2023-02-11 11:42 ` Andrei Borzenkov
2023-02-11 13:25 ` Martin Steigerwald
2023-02-12 10:10 ` Jukka Larja
0 siblings, 2 replies; 8+ messages in thread
From: Andrei Borzenkov @ 2023-02-11 11:42 UTC (permalink / raw)
To: Martin Steigerwald, linux-btrfs; +Cc: waxhead
On 11.02.2023 11:38, Martin Steigerwald wrote:
> waxhead - 11.02.23, 02:36:26 CET:
>> I have read several places, including on this mailing list that
>> metadata is not supposed to be balanced unless converting between
>> profiles.
>>
>> Interestingly enough there is nothing mentioned about this in the
>> docs... https://btrfs.readthedocs.io/en/latest/btrfs-balance.html
>>
>> Should one still NOT balance metadata? If so - please update the docs
>> with a explanation to why one should not do that.
>
> If that is still the case, it may also be good to by default omit
> metadata on a balance without parameters.
>
> A long, long time ago I experienced a much longer boot time after a
> balance, I decided to refrain from balancing my BTRFS file systems.
> Especially as long as there is still unallocated space on them. Cause as
> long as BTRFS can still allocate a chunk, I thought that is fine. I
> thought I would be getting a faster system, but it was much much slower.
> That was on a SATA SSD.
>
> An additional reason for not, or at least not regularly balancing for me
> is avoiding needless writes to flash storage like SATA or NVMe SSDs.
> Usually they can take it, but why age them more than needed?
>
> Maybe all or some of this is not accurate anymore and one should balance
> BTRFS regularly like default in SUSE distributions, maybe regular
> balancing even reduces writes on other occasions, however I never fully
> understood the performance impact of a regular balance. However in a
Balancing creates larger free space pool which allows large writes which
is faster and requires less metadata. If every second 4K block in each
chunk is free, you have exactly 50% free space like if half of chunks
are free. But in the former case each write will be split into 4K
pieces, each 4K becomes separate extent and needs additional metadata.
Whether you will actually observe impact depends heavily on your workload.
Secondary (btrfs specific) consideration is that balancing creates free
space that can be used both for data and metadata, while each chunk is
(normally) dedicated to either one. So if your metadata is full you
/may/ get more space for metadata by compacting data chunks (except
balancing needs more metadata, at least temporary, an so my fail under
these conditions).
This is also the reason why balancing metadata is not recommended today.
Fragmented metadata chunks do not have as much impact on performance,
but space that is freed by balancing may be allocated to data chunks and
so unavailable to metadata anymore. As Zygo put it once, if btrfs ever
needed as much metadata, there are good chances it will need it again.
> virtual environment with lots of virtual machines it may not be best to
> start balance on a lot of them at same or similar times either,
> considering the load it creates for the underlying storage.
>
> I know balancing not the same as defragmenting files in other filesystems,
> but I still remember the strong warnings of XFS developers not to ever
> just defragment a XFS filesystem just cause you feel like it. The
> reasoning behind these warnings was that defragmenting files tends to
> fragment free space. But balancing actually defragments free space as
> far as I understood and thus is different.
>
> Anyway, I am keen to read on more insight on this from people who
> understand better what impact a BTRFS balance really has.
>
> Thanks,
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Never balance metadata?
2023-02-11 11:42 ` Andrei Borzenkov
@ 2023-02-11 13:25 ` Martin Steigerwald
2023-02-12 10:10 ` Jukka Larja
1 sibling, 0 replies; 8+ messages in thread
From: Martin Steigerwald @ 2023-02-11 13:25 UTC (permalink / raw)
To: linux-btrfs, Andrei Borzenkov; +Cc: waxhead
Andrei Borzenkov - 11.02.23, 12:42:49 CET:
> Balancing creates larger free space pool which allows large writes
> which is faster and requires less metadata. If every second 4K block
> in each chunk is free, you have exactly 50% free space like if half
> of chunks are free. But in the former case each write will be split
> into 4K pieces, each 4K becomes separate extent and needs additional
> metadata. Whether you will actually observe impact depends heavily on
> your workload.
Okay so it can save metadata size. And on a full BTRFS filesystem with no
unallocated space it can reduce fragmentation of new writes. I get that
much.
But what if I have for example
% btrfs filesystem usage -T /home
Overall:
Device size: 400.00GiB
Device allocated: 300.02GiB
Device unallocated: 99.98GiB
[…]
Free (estimated): 113.60GiB (min: 113.60GiB)
Free (statfs, df): 113.60GiB
[…]
(metadata usage is 3.52GiB of 5.01 GiB)
on a filesystem that is heavily written to and
% btrfs filesystem usage -T /some/dir
Overall:
Device size: 1.20TiB
Device allocated: 1.19TiB
Device unallocated: 8.78GiB
[…]
Free (estimated): 44.77GiB (min: 44.77GiB)
Free (statfs, df): 44.77GiB
[…]
(metadata usage is 2.88GiB of 4.01 GiB)
on a filesystem that is used mostly for the purpose of placing larger
files there to archive them? Both are using single profiles.
Why would I balance those? They are stored on the same 2TB NVMe SSD in
this laptop and I did not yet see any performance related issues with
them so far.
What I went with is this: If it is heavily written to leave enough space
free to begin with. And if its just for storing larger files without
receiving any regular writes by applications then I can fill it a bit
more. Just similar to what I would do with XFS filesystem for example as
well. Having "/home" on a 95% full XFS filesystem would not be a good
idea either – mind you I had something like that with a BTRFS filesystem
before and before kernel 4.5 or 4.6 actually sometimes the kernel came
to a halt while with BTRFS searching for free space. These some times
were related to no unallocated space free and then I balanced until next
time it happened, but since kernel 4.5 or 4.6 this issue was gone for
good. And before that as long as unallocated space was free it was
working fine.
So if I plan like that, I still do not get why I would balance my
filesystems regularly. And if I do not plan like that and let /home usage
grow to 95% or even more… I am not sure how much "relief" balancing
would really give to the filesystem. Is it more than the amount of work
done during the regular balances?
Well probably that is the "depends heavily on your workload" thing you
wrote about :)
Thanks,
--
Martin
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Never balance metadata?
2023-02-11 1:36 Never balance metadata? waxhead
2023-02-11 8:38 ` Martin Steigerwald
@ 2023-02-11 17:18 ` Forza
2023-02-11 19:50 ` Martin Steigerwald
1 sibling, 1 reply; 8+ messages in thread
From: Forza @ 2023-02-11 17:18 UTC (permalink / raw)
To: waxhead, linux-btrfs
On 2023-02-11 02:36, waxhead wrote:
> I have read several places, including on this mailing list that metadata
> is not supposed to be balanced unless converting between profiles.
>
> Interestingly enough there is nothing mentioned about this in the docs...
> https://btrfs.readthedocs.io/en/latest/btrfs-balance.html
>
> Should one still NOT balance metadata? If so - please update the docs
> with a explanation to why one should not do that.
There is no direct issue with balancing metadata chunks.
The recommendation to not balance metadata is because it can contribute
to a ENOSPC (no free space left) error. This happens when Btrfs needs to
allocate another metadata chunk, but there is no unallocated space
available.
Because metadata usually only is a small percentage of the filesystem,
it makes sense to simply leave it unless you need to convert between
profiles or add/remove devices.
Btrfs uses a two-stage allocator. The first stage allocates large
regions of space known as chunks for specific types of data, then the
second stage allocates blocks like a regular (old-fashioned) filesystem
within these larger regions.
There are three different types of block groups/chunks that Btrfs uses:
DATA: Stores normal user file data.
METADATA: Stores internal metadata. Small files can also stored inline.
SYSTEM: Stores mapping between physical devices and the logical space
representing the filesystem.
UNALLOCATED: Any unallocated space. Can be used to allocate any of the
three data types.
Balancing means compacting chunks to make them fully utilised by moving
data from other chunks and release the empty chunks back as unallocated
space. This has the effect of defragmenting the free space which
improves sequential write speeds, especially on spinning HDDs.
The problem with balancing metadata (that leads to the recommendation to
not balance metadata) is that when metadata chunks are full, Btrfs needs
to allocate new metadata chunks to write additional metadata in. Many
disk operations, including removing files and snapshots requires
additional metadata. If this happens when there is not enough
unallocated space to allocate another metadata chunk the filesystem with
fail with ENOSPC. By letting metadata chunks be underutilised, this risk
is lower, especially on very full filesystems.
- Forza
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Never balance metadata?
2023-02-11 17:18 ` Forza
@ 2023-02-11 19:50 ` Martin Steigerwald
0 siblings, 0 replies; 8+ messages in thread
From: Martin Steigerwald @ 2023-02-11 19:50 UTC (permalink / raw)
To: waxhead, linux-btrfs, Forza
Forza - 11.02.23, 18:18:50 CET:
> On 2023-02-11 02:36, waxhead wrote:
> > I have read several places, including on this mailing list that
> > metadata is not supposed to be balanced unless converting between
> > profiles.
> >
> > Interestingly enough there is nothing mentioned about this in the
> > docs... https://btrfs.readthedocs.io/en/latest/btrfs-balance.html
> >
> > Should one still NOT balance metadata? If so - please update the
> > docs
> > with a explanation to why one should not do that.
>
> There is no direct issue with balancing metadata chunks.
>
> The recommendation to not balance metadata is because it can
> contribute to a ENOSPC (no free space left) error. This happens when
> Btrfs needs to allocate another metadata chunk, but there is no
> unallocated space available.
Thanks for that very good and thorough explanation.
Something like this in the official documentation would be great!
Best,
--
Martin
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Never balance metadata?
2023-02-11 11:42 ` Andrei Borzenkov
2023-02-11 13:25 ` Martin Steigerwald
@ 2023-02-12 10:10 ` Jukka Larja
2023-02-17 3:19 ` Zygo Blaxell
1 sibling, 1 reply; 8+ messages in thread
From: Jukka Larja @ 2023-02-12 10:10 UTC (permalink / raw)
To: Andrei Borzenkov, Martin Steigerwald, linux-btrfs; +Cc: waxhead
Andrei Borzenkov kirjoitti 11.2.2023 klo 13.42:
> Fragmented metadata chunks do not have as much impact on performance,
Although this may be very much true in general case, I do have a counter
example:
I have a 64 TB Btrfs filesystem (RAID1, so 32 TB available) made up of eight
HDDs of varying size (all 7200 RPM NAS disks though, so pretty similar
performance). Every night, backups of hundreds of thousands of files are
rsynced to file system, most of course unchanged. Some new multi-gigabyte
video files are also backed up to another filesystem on the same computer,
making it so that any disk caches are in unhelpful state by the morning.
Now, when I fire up my MythTV DVR computer, which likes to check if there
are any changes to media files (some hundreds of folders with thousands of
files, nothing major). That check used to took dozens of seconds. So long
that MythTV sometimes gave up and reported "no files". Few months ago I
decided to move to RAID1C3 for metadata. After balance, the everyday
scanning for changes only takes couple of seconds. Backups are also much
faster, though as they run during night, it doesn't much matter.
The filesystem was created June 2010 (probably) and every one of the
original disks and some that came after have been replaced. This was the
first time I balanced metadata, as far as I can remember. I think it does
make sense to balance every now and then, if only once a decade :D .
-JLarja
--
...Elämälle vierasta toimintaa...
Jukka Larja, Roskakori@aarghimedes.fi
<saylan> I just set up port forwards to defense.gov
<saylan> anyone scanning me now will be scanning/attacking the DoD :D
<renderbod> O.o
<bolt> that's... not exactly how port forwarding works
<saylan> ?
- Quote Database, http://www.bash.org/?954232 -
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Never balance metadata?
2023-02-12 10:10 ` Jukka Larja
@ 2023-02-17 3:19 ` Zygo Blaxell
0 siblings, 0 replies; 8+ messages in thread
From: Zygo Blaxell @ 2023-02-17 3:19 UTC (permalink / raw)
To: Jukka Larja; +Cc: Andrei Borzenkov, Martin Steigerwald, linux-btrfs, waxhead
On Sun, Feb 12, 2023 at 12:10:16PM +0200, Jukka Larja wrote:
> After balance, the everyday
> scanning for changes only takes couple of seconds. Backups are also much
> faster, though as they run during night, it doesn't much matter.
It would be interesting to compare the results of a metadata balance with
a metadata defrag ('btrfs fi defrag /path/to/subvolume' _without_ -r).
I suspect a metadata defrag has much the same side-effect as the metadata
balance (reduce average seek distance between pages), but metadata defrag
won't reduce spare metadata allocations to zero.
> The filesystem was created June 2010 (probably) and every one of the
> original disks and some that came after have been replaced. This was the
> first time I balanced metadata, as far as I can remember. I think it does
> make sense to balance every now and then, if only once a decade :D .
>
> -JLarja
>
> --
> ...Elämälle vierasta toimintaa...
> Jukka Larja, Roskakori@aarghimedes.fi
>
> <saylan> I just set up port forwards to defense.gov
> <saylan> anyone scanning me now will be scanning/attacking the DoD :D
> <renderbod> O.o
> <bolt> that's... not exactly how port forwarding works
> <saylan> ?
> - Quote Database, http://www.bash.org/?954232 -
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2023-02-17 3:20 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-02-11 1:36 Never balance metadata? waxhead
2023-02-11 8:38 ` Martin Steigerwald
2023-02-11 11:42 ` Andrei Borzenkov
2023-02-11 13:25 ` Martin Steigerwald
2023-02-12 10:10 ` Jukka Larja
2023-02-17 3:19 ` Zygo Blaxell
2023-02-11 17:18 ` Forza
2023-02-11 19:50 ` Martin Steigerwald
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox