* Does btrfs filesystem defragment -r also include the trees?
@ 2023-04-20 12:37 Remi Gauvin
2023-04-20 22:42 ` David Sterba
0 siblings, 1 reply; 13+ messages in thread
From: Remi Gauvin @ 2023-04-20 12:37 UTC (permalink / raw)
To: linux-btrfs
I have recently experienced that btrfs defragment (by itself, without
-r) of a subvolume can dramatically improve performance when accessing
very large directories. I would go so far as to call it critical
maintenance when working with gtk3 based file managers.
What I am not clear on, however, does adding the -r *also* defragment
the subvolume extent tree, or do the two commands needs to be run
separately to get the full effect?
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Does btrfs filesystem defragment -r also include the trees?
2023-04-20 12:37 Does btrfs filesystem defragment -r also include the trees? Remi Gauvin
@ 2023-04-20 22:42 ` David Sterba
2023-04-21 7:57 ` Qu Wenruo
0 siblings, 1 reply; 13+ messages in thread
From: David Sterba @ 2023-04-20 22:42 UTC (permalink / raw)
To: Remi Gauvin; +Cc: linux-btrfs
On Thu, Apr 20, 2023 at 08:37:07AM -0400, Remi Gauvin wrote:
> I have recently experienced that btrfs defragment (by itself, without
> -r) of a subvolume can dramatically improve performance when accessing
> very large directories. I would go so far as to call it critical
> maintenance when working with gtk3 based file managers.
>
> What I am not clear on, however, does adding the -r *also* defragment
> the subvolume extent tree, or do the two commands needs to be run
> separately to get the full effect?
No, -r does not defragment the extent tree, so if you really want to
defragment the extent tree, then you need to run it separately and
without -r.
Originally there was only the extent tree defragmentation which was
confusing when defrag got a directory as an argument, then it always
defragmented the extent tree but did not descend recursively. Then the
-r was added and the bare directory path discouraged. It still works
though.
I've checked if this is documented, it seems to (btrfs-filesystem,
section defrag):
"NOTE: Directory arguments without -r do not defragment files
recursively but will defragment certain internal trees (extent tree and
the subvolume tree). This has been confusing and could be re- moved in
the future."
but if you think it's not clear enough please suggest in what way it
could be extended or what's missing.
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Does btrfs filesystem defragment -r also include the trees?
2023-04-20 22:42 ` David Sterba
@ 2023-04-21 7:57 ` Qu Wenruo
2023-04-21 12:21 ` Remi Gauvin
0 siblings, 1 reply; 13+ messages in thread
From: Qu Wenruo @ 2023-04-21 7:57 UTC (permalink / raw)
To: dsterba, Remi Gauvin; +Cc: linux-btrfs
On 2023/4/21 06:42, David Sterba wrote:
> On Thu, Apr 20, 2023 at 08:37:07AM -0400, Remi Gauvin wrote:
>> I have recently experienced that btrfs defragment (by itself, without
>> -r) of a subvolume can dramatically improve performance when accessing
>> very large directories. I would go so far as to call it critical
>> maintenance when working with gtk3 based file managers.
>>
>> What I am not clear on, however, does adding the -r *also* defragment
>> the subvolume extent tree, or do the two commands needs to be run
>> separately to get the full effect?
>
> No, -r does not defragment the extent tree, so if you really want to
> defragment the extent tree, then you need to run it separately and
> without -r.
I did a quick glance, btrfs_defrag_root() only defrags the target
subvolume, thus there is no way to defrag internal trees.
>
> Originally there was only the extent tree defragmentation which was
> confusing when defrag got a directory as an argument, then it always
> defragmented the extent tree but did not descend recursively. Then the
> -r was added and the bare directory path discouraged. It still works
> though.
My another concern is, does metadata "defrag" make any sense?
Btree itself is never designed for sequential read anyway, and even we
can pack all metadata into a sequential bytenr, what's the proper order?
Breadth-first? Depth-first?
Thanks,
Qu
>
> I've checked if this is documented, it seems to (btrfs-filesystem,
> section defrag):
>
> "NOTE: Directory arguments without -r do not defragment files
> recursively but will defragment certain internal trees (extent tree and
> the subvolume tree). This has been confusing and could be re- moved in
> the future."
>
> but if you think it's not clear enough please suggest in what way it
> could be extended or what's missing.
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Does btrfs filesystem defragment -r also include the trees?
2023-04-21 7:57 ` Qu Wenruo
@ 2023-04-21 12:21 ` Remi Gauvin
2023-04-21 17:41 ` waxhead
0 siblings, 1 reply; 13+ messages in thread
From: Remi Gauvin @ 2023-04-21 12:21 UTC (permalink / raw)
To: Qu Wenruo, dsterba; +Cc: linux-btrfs
On 2023-04-21 3:57 a.m., Qu Wenruo wrote:
>
>
> I did a quick glance, btrfs_defrag_root() only defrags the target
> subvolume, thus there is no way to defrag internal trees.
>
It did *something* that allows Nautilus and Nemo to navigate a large
directory structure without stalling for > 10 seconds when moving back
and forth between subdirectories.
Unfortunately, I did not expect I would have to replicate this... I'll
see if I have an older snapshot and can do some kind of before and after
comparison.
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Does btrfs filesystem defragment -r also include the trees?
2023-04-21 12:21 ` Remi Gauvin
@ 2023-04-21 17:41 ` waxhead
2023-04-21 21:00 ` Forza
` (2 more replies)
0 siblings, 3 replies; 13+ messages in thread
From: waxhead @ 2023-04-21 17:41 UTC (permalink / raw)
To: Remi Gauvin, Qu Wenruo, dsterba; +Cc: linux-btrfs
> On 2023-04-21 3:57 a.m., Qu Wenruo wrote:
>>
>
>>
>> I did a quick glance, btrfs_defrag_root() only defrags the target
>> subvolume, thus there is no way to defrag internal trees.
>>
>
> It did *something* that allows Nautilus and Nemo to navigate a large
> directory structure without stalling for > 10 seconds when moving back
> and forth between subdirectories.
>
Are you sure that it is not just files being cached?
If you run something like find -type f | parallel md5sum{} on the
directory/subvolume you can see if it has the same effect.
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Does btrfs filesystem defragment -r also include the trees?
2023-04-21 17:41 ` waxhead
@ 2023-04-21 21:00 ` Forza
2023-04-21 21:27 ` Remi Gauvin
2023-04-21 21:40 ` joshua
2 siblings, 0 replies; 13+ messages in thread
From: Forza @ 2023-04-21 21:00 UTC (permalink / raw)
To: waxhead, Remi Gauvin, Qu Wenruo, dsterba; +Cc: linux-btrfs
On 2023-04-21 19:41, waxhead wrote:
>> On 2023-04-21 3:57 a.m., Qu Wenruo wrote:
>>>
>>
>>>
>>> I did a quick glance, btrfs_defrag_root() only defrags the target
>>> subvolume, thus there is no way to defrag internal trees.
>>>
>>
>> It did *something* that allows Nautilus and Nemo to navigate a large
>> directory structure without stalling for > 10 seconds when moving back
>> and forth between subdirectories.
>>
> Are you sure that it is not just files being cached?
>
> If you run something like find -type f | parallel md5sum{} on the
> directory/subvolume you can see if it has the same effect.
Defragmenting the metadata/extent trees could reduce amount of seeks or
the seek distance, which would reduce latency on HDDs.
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Does btrfs filesystem defragment -r also include the trees?
2023-04-21 17:41 ` waxhead
2023-04-21 21:00 ` Forza
@ 2023-04-21 21:27 ` Remi Gauvin
2023-04-21 21:40 ` joshua
2 siblings, 0 replies; 13+ messages in thread
From: Remi Gauvin @ 2023-04-21 21:27 UTC (permalink / raw)
To: linux-btrfs
On 2023-04-21 1:41 p.m., waxhead wrote:
>>
> Are you sure that it is not just files being cached?
>
> If you run something like find -type f | parallel md5sum{} on the
> directory/subvolume you can see if it has the same effect.
It's a problem I was observing for a very long time, and I'm positive
cache did not help.
However, I can not replicate it now on an older snapshot. I think
something else mush have resolved the issue and I mistakenly gave credit
to experimenting with defrag.
Sorry for the noise, but to clarify:
btrfs filesystem defrag on a subvolume is *not* expected to have any
benefit without the -r switch? It does spend several moments reading
and writing data.
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Does btrfs filesystem defragment -r also include the trees?
2023-04-21 17:41 ` waxhead
2023-04-21 21:00 ` Forza
2023-04-21 21:27 ` Remi Gauvin
@ 2023-04-21 21:40 ` joshua
2023-04-21 22:55 ` Qu Wenruo
2 siblings, 1 reply; 13+ messages in thread
From: joshua @ 2023-04-21 21:40 UTC (permalink / raw)
To: waxhead; +Cc: Remi Gauvin, Qu Wenruo, dsterba, linux-btrfs
On Friday, April 21, 2023 10:41 PDT, waxhead <waxhead@dirtcellar.net> wrote:
> > On 2023-04-21 3:57 a.m., Qu Wenruo wrote:
> >>
> >
> >>
> >> I did a quick glance, btrfs_defrag_root() only defrags the target
> >> subvolume, thus there is no way to defrag internal trees.
> >>
> >
> > It did *something* that allows Nautilus and Nemo to navigate a large
> > directory structure without stalling for > 10 seconds when moving back
> > and forth between subdirectories.
> >
> Are you sure that it is not just files being cached?
>
> If you run something like find -type f | parallel md5sum{} on the
> directory/subvolume you can see if it has the same effect.
It's definitely not ONLY files being cached.
I have a large array with 13 HDD's in it, and a total of 53GB of metadata.
I constantly have issues with the mount time being so long that Linux times out and drops to recovery mode.
However, if I regularly run `btrfs fi defrag` on each of my sub-volumes and the root volume, it makes a noticeable difference to mount time. (Though still bad enough I gave up trying to have systemd mount my array and start my services.)
--
--Joshua Villwock
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Does btrfs filesystem defragment -r also include the trees?
2023-04-21 21:40 ` joshua
@ 2023-04-21 22:55 ` Qu Wenruo
2023-04-21 23:25 ` joshua
0 siblings, 1 reply; 13+ messages in thread
From: Qu Wenruo @ 2023-04-21 22:55 UTC (permalink / raw)
To: joshua, waxhead; +Cc: Remi Gauvin, dsterba, linux-btrfs
On 2023/4/22 05:40, joshua wrote:
> On Friday, April 21, 2023 10:41 PDT, waxhead <waxhead@dirtcellar.net> wrote:
>
>>> On 2023-04-21 3:57 a.m., Qu Wenruo wrote:
>>>>
>>>
>>>>
>>>> I did a quick glance, btrfs_defrag_root() only defrags the target
>>>> subvolume, thus there is no way to defrag internal trees.
>>>>
>>>
>>> It did *something* that allows Nautilus and Nemo to navigate a large
>>> directory structure without stalling for > 10 seconds when moving back
>>> and forth between subdirectories.
>>>
>> Are you sure that it is not just files being cached?
>>
>> If you run something like find -type f | parallel md5sum{} on the
>> directory/subvolume you can see if it has the same effect.
>
> It's definitely not ONLY files being cached.
>
> I have a large array with 13 HDD's in it, and a total of 53GB of metadata.
> I constantly have issues with the mount time being so long that Linux times out and drops to recovery mode.
Then bg tree would be the ultimate solution.
>
> However, if I regularly run `btrfs fi defrag` on each of my sub-volumes and the root volume, it makes a noticeable difference to mount time. (Though still bad enough I gave up trying to have systemd mount my array and start my services.)
>
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Does btrfs filesystem defragment -r also include the trees?
2023-04-21 22:55 ` Qu Wenruo
@ 2023-04-21 23:25 ` joshua
2023-04-22 0:42 ` Qu Wenruo
0 siblings, 1 reply; 13+ messages in thread
From: joshua @ 2023-04-21 23:25 UTC (permalink / raw)
To: Qu Wenruo; +Cc: waxhead, Remi Gauvin, dsterba, linux-btrfs
For my situation, (and others with large arrays) yes definitely.
It's definitely the feature I'm most interested in patiently waiting for....
--
--Joshua Villwock
On Friday, April 21, 2023 15:55 PDT, Qu Wenruo <wqu@suse.com> wrote:
>
>
> On 2023/4/22 05:40, joshua wrote:
> > On Friday, April 21, 2023 10:41 PDT, waxhead <waxhead@dirtcellar.net> wrote:
> >
> >>> On 2023-04-21 3:57 a.m., Qu Wenruo wrote:
> >>>>
> >>>
> >>>>
> >>>> I did a quick glance, btrfs_defrag_root() only defrags the target
> >>>> subvolume, thus there is no way to defrag internal trees.
> >>>>
> >>>
> >>> It did *something* that allows Nautilus and Nemo to navigate a large
> >>> directory structure without stalling for > 10 seconds when moving back
> >>> and forth between subdirectories.
> >>>
> >> Are you sure that it is not just files being cached?
> >>
> >> If you run something like find -type f | parallel md5sum{} on the
> >> directory/subvolume you can see if it has the same effect.
> >
> > It's definitely not ONLY files being cached.
> >
> > I have a large array with 13 HDD's in it, and a total of 53GB of metadata.
> > I constantly have issues with the mount time being so long that Linux times out and drops to recovery mode.
>
> Then bg tree would be the ultimate solution.
>
> >
> > However, if I regularly run `btrfs fi defrag` on each of my sub-volumes and the root volume, it makes a noticeable difference to mount time. (Though still bad enough I gave up trying to have systemd mount my array and start my services.)
> >
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Does btrfs filesystem defragment -r also include the trees?
2023-04-21 23:25 ` joshua
@ 2023-04-22 0:42 ` Qu Wenruo
2023-04-23 9:34 ` waxhead
0 siblings, 1 reply; 13+ messages in thread
From: Qu Wenruo @ 2023-04-22 0:42 UTC (permalink / raw)
To: joshua, Qu Wenruo; +Cc: waxhead, Remi Gauvin, dsterba, linux-btrfs
On 2023/4/22 07:25, joshua wrote:
> For my situation, (and others with large arrays) yes definitely.
> It's definitely the feature I'm most interested in patiently waiting for....
>
You can already compile the current btrfs-progs release with
experimental features, which enables the "btrfstune -b" command to
convert your existing btrfs to the new feature.
I believe David would release the next btrfs-progs with bg tree moved to
regular features.
And even better, the new bg-tree feature is compat_ro, meaning
unsupported kernel can still mount the fs RO.
Thanks,
Qu
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Does btrfs filesystem defragment -r also include the trees?
2023-04-22 0:42 ` Qu Wenruo
@ 2023-04-23 9:34 ` waxhead
2023-04-23 10:50 ` Qu Wenruo
0 siblings, 1 reply; 13+ messages in thread
From: waxhead @ 2023-04-23 9:34 UTC (permalink / raw)
To: Qu Wenruo, joshua, Qu Wenruo; +Cc: Remi Gauvin, dsterba, linux-btrfs
>
> On 2023/4/22 07:25, joshua wrote:
>> For my situation, (and others with large arrays) yes definitely.
>> It's definitely the feature I'm most interested in patiently waiting
>> for....
>>
>
> You can already compile the current btrfs-progs release with
> experimental features, which enables the "btrfstune -b" command to
> convert your existing btrfs to the new feature.
>
> I believe David would release the next btrfs-progs with bg tree moved to
> regular features.
>
> And even better, the new bg-tree feature is compat_ro, meaning
> unsupported kernel can still mount the fs RO.
>
> Thanks,
> Qu
And for those of us that have BTRFS as root? Would we live happily ever
after or would GRUB choke on this?
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Does btrfs filesystem defragment -r also include the trees?
2023-04-23 9:34 ` waxhead
@ 2023-04-23 10:50 ` Qu Wenruo
0 siblings, 0 replies; 13+ messages in thread
From: Qu Wenruo @ 2023-04-23 10:50 UTC (permalink / raw)
To: waxhead, joshua, Qu Wenruo; +Cc: Remi Gauvin, dsterba, linux-btrfs
On 2023/4/23 17:34, waxhead wrote:
>>
>> On 2023/4/22 07:25, joshua wrote:
>>> For my situation, (and others with large arrays) yes definitely.
>>> It's definitely the feature I'm most interested in patiently waiting
>>> for....
>>>
>>
>> You can already compile the current btrfs-progs release with
>> experimental features, which enables the "btrfstune -b" command to
>> convert your existing btrfs to the new feature.
>>
>> I believe David would release the next btrfs-progs with bg tree moved
>> to regular features.
>>
>> And even better, the new bg-tree feature is compat_ro, meaning
>> unsupported kernel can still mount the fs RO.
>>
>> Thanks,
>> Qu
>
> And for those of us that have BTRFS as root? Would we live happily ever
> after or would GRUB choke on this?
Compat_ro feature means, any implementation, which only does read-only
operations, would be fine.
Although for GRUB, I'm not that confident about their implementation...
Thanks,
Qu
^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2023-04-23 10:50 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-04-20 12:37 Does btrfs filesystem defragment -r also include the trees? Remi Gauvin
2023-04-20 22:42 ` David Sterba
2023-04-21 7:57 ` Qu Wenruo
2023-04-21 12:21 ` Remi Gauvin
2023-04-21 17:41 ` waxhead
2023-04-21 21:00 ` Forza
2023-04-21 21:27 ` Remi Gauvin
2023-04-21 21:40 ` joshua
2023-04-21 22:55 ` Qu Wenruo
2023-04-21 23:25 ` joshua
2023-04-22 0:42 ` Qu Wenruo
2023-04-23 9:34 ` waxhead
2023-04-23 10:50 ` Qu Wenruo
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.