linux-btrfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Why btrfs inline small file by default?
@ 2012-10-30 11:04 ching
  2012-10-30 12:04 ` Felix Pepinghege
                   ` (3 more replies)
  0 siblings, 4 replies; 26+ messages in thread
From: ching @ 2012-10-30 11:04 UTC (permalink / raw)
  To: linux-btrfs@vger.kernel.org

Hi all,

I am testing my btrfs root partition with "max_inline=0", and 64k leaf size for weeks and it seems that it is fine.


AFAIK btrfs inline small files into metadata by default, I am curious why?

If there is only a few small files, then there will be neither effect nor benefit at all
If there is a lot of small files, then the size of metadata will be undesirable due to deduplication

there are also some email threads related to problem of metadata inline (i don't know whether they are fixed in recent kernel):
http://www.mail-archive.com/linux-btrfs@vger.kernel.org/msg16295.html
http://www.mail-archive.com/linux-btrfs@vger.kernel.org/msg05265.html

How about turning off inline so that btrfs works better "out of the box"?

ching




^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: Why btrfs inline small file by default?
  2012-10-30 11:04 Why btrfs inline small file by default? ching
@ 2012-10-30 12:04 ` Felix Pepinghege
  2012-10-30 12:17   ` cwillu
  2012-10-30 21:39   ` ching
  2012-10-30 12:11 ` Felix Pepinghege
                   ` (2 subsequent siblings)
  3 siblings, 2 replies; 26+ messages in thread
From: Felix Pepinghege @ 2012-10-30 12:04 UTC (permalink / raw)
  To: ching; +Cc: linux-btrfs@vger.kernel.org

Hi ching!

Am 30.10.2012 12:04, schrieb ching:
> Hi all,
>
> I am testing my btrfs root partition with "max_inline=0", and 64k leaf size for weeks and it seems that it is fine.
>
>
> AFAIK btrfs inline small files into metadata by default, I am curious why?
>
> If there is only a few small files, then there will be neither effect nor benefit at all

I disagree in this point. There will be a (probably huge) benefit in 
terms of performance. If the file data is inlined, you have a good 
chance (especially with large leaf sizes, although even then it is not 
guaranteed) that the data is in the same leaf as the inode element. So 
you already have the file data as you always access complete leafs. If 
you would store the data in extents, you would need to read the 
respective extent, which can be anywhere on the disk. That is, you most 
likely need to move the head. This brings overhead (especially with 
small files, as the reading process is relatively fast compared to the 
time you need to position the head).

> If there is a lot of small files, then the size of metadata will be undesirable due to deduplication

Yes, that is a fact, but if that really matters depends on the use-case 
(e.g., the small files to large files ratio, ...). But as btrfs is 
designed explicitly as a general purpose file system, you usually want 
the good performance instead of the better disk-usage (especially as 
disk space isn't expensive anymore).

>
> there are also some email threads related to problem of metadata inline (i don't know whether they are fixed in recent kernel):
> http://www.mail-archive.com/linux-btrfs@vger.kernel.org/msg16295.html
> http://www.mail-archive.com/linux-btrfs@vger.kernel.org/msg05265.html
>
> How about turning off inline so that btrfs works better "out of the box"?
>
> ching
>

Regards,
Felix

>
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: Why btrfs inline small file by default?
  2012-10-30 11:04 Why btrfs inline small file by default? ching
  2012-10-30 12:04 ` Felix Pepinghege
@ 2012-10-30 12:11 ` Felix Pepinghege
  2012-10-30 12:13 ` Mitch Harder
  2012-10-30 16:38 ` David Sterba
  3 siblings, 0 replies; 26+ messages in thread
From: Felix Pepinghege @ 2012-10-30 12:11 UTC (permalink / raw)
  Cc: linux-btrfs@vger.kernel.org

Hi ching!

Am 30.10.2012 12:04, schrieb ching:
> Hi all,
>
> I am testing my btrfs root partition with "max_inline=0", and 64k leaf size for weeks and it seems that it is fine.
>
>
> AFAIK btrfs inline small files into metadata by default, I am curious why?
>
> If there is only a few small files, then there will be neither effect nor benefit at all

I disagree in this point. There will be a (probably huge) benefit in 
terms of performance. If the file data is inlined, you have a good 
chance (especially with large leaf sizes, although even then it is not 
guaranteed) that the data is in the same leaf as the inode element. So 
you already have the file data as you always access complete leafs. If 
you would store the data in extents, you would need to read the 
respective extent, which can be anywhere on the disk. That is, you most 
likely need to move the head. This brings overhead (especially with 
small files, as the reading process is relatively fast compared to the 
time you need to position the head).

> If there is a lot of small files, then the size of metadata will be undesirable due to deduplication

Yes, that is a fact, but if that really matters depends on the use-case 
(e.g., the small files to large files ratio, ...). But as btrfs is 
designed explicitly as a general purpose file system, you usually want 
the good performance instead of the better disk-usage (especially as 
disk space isn't expensive anymore).


>
> there are also some email threads related to problem of metadata inline (i don't know whether they are fixed in recent kernel):
> http://www.mail-archive.com/linux-btrfs@vger.kernel.org/msg16295.html
> http://www.mail-archive.com/linux-btrfs@vger.kernel.org/msg05265.html
>
> How about turning off inline so that btrfs works better "out of the box"?
>
> ching
>

Regards,
Felix

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: Why btrfs inline small file by default?
  2012-10-30 11:04 Why btrfs inline small file by default? ching
  2012-10-30 12:04 ` Felix Pepinghege
  2012-10-30 12:11 ` Felix Pepinghege
@ 2012-10-30 12:13 ` Mitch Harder
  2012-10-30 16:38 ` David Sterba
  3 siblings, 0 replies; 26+ messages in thread
From: Mitch Harder @ 2012-10-30 12:13 UTC (permalink / raw)
  To: ching; +Cc: linux-btrfs@vger.kernel.org

On Tue, Oct 30, 2012 at 6:04 AM, ching <lsching17@gmail.com> wrote:
> Hi all,
>
> I am testing my btrfs root partition with "max_inline=0", and 64k leaf size for weeks and it seems that it is fine.
>
>
> AFAIK btrfs inline small files into metadata by default, I am curious why?
>
> If there is only a few small files, then there will be neither effect nor benefit at all
> If there is a lot of small files, then the size of metadata will be undesirable due to deduplication
>
> there are also some email threads related to problem of metadata inline (i don't know whether they are fixed in recent kernel):
> http://www.mail-archive.com/linux-btrfs@vger.kernel.org/msg16295.html
> http://www.mail-archive.com/linux-btrfs@vger.kernel.org/msg05265.html
>
> How about turning off inline so that btrfs works better "out of the box"?
>
> ching
>

I did some rough benchmarking around this a few weeks ago.  I'll try
to clean up my method and post the results.

I was working with multiple copies and rsyncs of kernel sources, which
have many candidate files for inlining.

To my surprise, my btrfs benchmarks were always the same or faster
when I let btrfs inline the files, even though metadata was much
larger.

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: Why btrfs inline small file by default?
  2012-10-30 12:04 ` Felix Pepinghege
@ 2012-10-30 12:17   ` cwillu
  2012-10-30 21:40     ` ching
  2012-10-30 21:39   ` ching
  1 sibling, 1 reply; 26+ messages in thread
From: cwillu @ 2012-10-30 12:17 UTC (permalink / raw)
  To: Felix Pepinghege; +Cc: ching, linux-btrfs@vger.kernel.org

>> If there is a lot of small files, then the size of metadata will be
>> undesirable due to deduplication
>
>
> Yes, that is a fact, but if that really matters depends on the use-case
> (e.g., the small files to large files ratio, ...). But as btrfs is designed
> explicitly as a general purpose file system, you usually want the good
> performance instead of the better disk-usage (especially as disk space isn't
> expensive anymore).

As I understand it, in basically all cases the total storage used by
inlining will be _smaller_, as the allocation doesn't need to be
aligned to the sector size.

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: Why btrfs inline small file by default?
  2012-10-30 11:04 Why btrfs inline small file by default? ching
                   ` (2 preceding siblings ...)
  2012-10-30 12:13 ` Mitch Harder
@ 2012-10-30 16:38 ` David Sterba
  3 siblings, 0 replies; 26+ messages in thread
From: David Sterba @ 2012-10-30 16:38 UTC (permalink / raw)
  To: ching; +Cc: linux-btrfs@vger.kernel.org

On Tue, Oct 30, 2012 at 07:04:59PM +0800, ching wrote:
> I am testing my btrfs root partition with "max_inline=0", and 64k leaf
> size for weeks and it seems that it is fine.

Related to inlining itself, ext4 and xfs are receiving inline data
support, so it would make sense to introduce a per-file attribute, eg.
FS_NOINLINE_FL that would get set on directories and inherited into
newly created files with the expected outcome.

One of the reasons why is to give a way to user to avoid potential
performance hits, eg. when frequently switching from inline to
non-inline (provided that this is known to happen). Nice to have IMHO,
but more evaluation of real-world use cases where it hurts would be
desirable.

david

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: Why btrfs inline small file by default?
  2012-10-30 12:04 ` Felix Pepinghege
  2012-10-30 12:17   ` cwillu
@ 2012-10-30 21:39   ` ching
  1 sibling, 0 replies; 26+ messages in thread
From: ching @ 2012-10-30 21:39 UTC (permalink / raw)
  To: Felix Pepinghege; +Cc: linux-btrfs@vger.kernel.org

On 10/30/2012 08:04 PM, Felix Pepinghege wrote:
> Hi ching!
>
> Am 30.10.2012 12:04, schrieb ching:
>> Hi all,
>>
>> I am testing my btrfs root partition with "max_inline=0", and 64k leaf size for weeks and it seems that it is fine.
>>
>>
>> AFAIK btrfs inline small files into metadata by default, I am curious why?
>>
>> If there is only a few small files, then there will be neither effect nor benefit at all
>
> I disagree in this point. There will be a (probably huge) benefit in terms of performance. If the file data is inlined, you have a good chance (especially with large leaf sizes, although even then it is not guaranteed) that the data is in the same leaf as the inode element. So you already have the file data as you always access complete leafs. If you would store the data in extents, you would need to read the respective extent, which can be anywhere on the disk. That is, you most likely need to move the head. This brings overhead (especially with small files, as the reading process is relatively fast compared to the time you need to position the head).

You may be correct.

But I doubt inline data may bring possible performance benefit, bigger metadata always means more trouble for concurrency/performance and cache miss ratio

>
>> If there is a lot of small files, then the size of metadata will be undesirable due to deduplication
>
> Yes, that is a fact, but if that really matters depends on the use-case (e.g., the small files to large files ratio, ...). But as btrfs is designed explicitly as a general purpose file system, you usually want the good performance instead of the better disk-usage (especially as disk space isn't expensive anymore).

Yes, but as a general purpose filesystem, i guess that the default behaviour should be "safe"?

Not many user is patient enough to troubleshoot metadata "explosion".

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: Why btrfs inline small file by default?
  2012-10-30 12:17   ` cwillu
@ 2012-10-30 21:40     ` ching
  2012-10-30 22:14       ` Hugo Mills
  2012-10-30 22:16       ` cwillu
  0 siblings, 2 replies; 26+ messages in thread
From: ching @ 2012-10-30 21:40 UTC (permalink / raw)
  To: cwillu; +Cc: Felix Pepinghege, linux-btrfs@vger.kernel.org

On 10/30/2012 08:17 PM, cwillu wrote:
>>> If there is a lot of small files, then the size of metadata will be
>>> undesirable due to deduplication
>>
>> Yes, that is a fact, but if that really matters depends on the use-case
>> (e.g., the small files to large files ratio, ...). But as btrfs is designed
>> explicitly as a general purpose file system, you usually want the good
>> performance instead of the better disk-usage (especially as disk space isn't
>> expensive anymore).
> As I understand it, in basically all cases the total storage used by
> inlining will be _smaller_, as the allocation doesn't need to be
> aligned to the sector size.
>

if i have 10G small files in total, then it will consume 20G by default.

ching

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: Why btrfs inline small file by default?
  2012-10-30 21:40     ` ching
@ 2012-10-30 22:14       ` Hugo Mills
  2012-10-30 22:19         ` Hugo Mills
  2012-10-30 22:16       ` cwillu
  1 sibling, 1 reply; 26+ messages in thread
From: Hugo Mills @ 2012-10-30 22:14 UTC (permalink / raw)
  To: ching; +Cc: cwillu, Felix Pepinghege, linux-btrfs@vger.kernel.org

[-- Attachment #1: Type: text/plain, Size: 1289 bytes --]

On Wed, Oct 31, 2012 at 05:40:25AM +0800, ching wrote:
> On 10/30/2012 08:17 PM, cwillu wrote:
> >>> If there is a lot of small files, then the size of metadata will be
> >>> undesirable due to deduplication
> >>
> >> Yes, that is a fact, but if that really matters depends on the use-case
> >> (e.g., the small files to large files ratio, ...). But as btrfs is designed
> >> explicitly as a general purpose file system, you usually want the good
> >> performance instead of the better disk-usage (especially as disk space isn't
> >> expensive anymore).
> > As I understand it, in basically all cases the total storage used by
> > inlining will be _smaller_, as the allocation doesn't need to be
> > aligned to the sector size.
> >
> 
> if i have 10G small files in total, then it will consume 20G by default.

   If those small files are each 128 bytes in size, then you have
approximately 80 million of them, and they'd take up 80 million pages,
or 320 GiB of total disk space.

   Hugo.

-- 
=== Hugo Mills: hugo@... carfax.org.uk | darksatanic.net | lug.org.uk ===
  PGP key: 515C238D from wwwkeys.eu.pgp.net or http://www.carfax.org.uk
             --- I always felt that as a C programmer, I ---             
                         was becoming typecast.                          

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 828 bytes --]

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: Why btrfs inline small file by default?
  2012-10-30 21:40     ` ching
  2012-10-30 22:14       ` Hugo Mills
@ 2012-10-30 22:16       ` cwillu
  2012-10-30 23:41         ` ching
  1 sibling, 1 reply; 26+ messages in thread
From: cwillu @ 2012-10-30 22:16 UTC (permalink / raw)
  To: ching; +Cc: Felix Pepinghege, linux-btrfs@vger.kernel.org

On Tue, Oct 30, 2012 at 3:40 PM, ching <lsching17@gmail.com> wrote:
> On 10/30/2012 08:17 PM, cwillu wrote:
>>>> If there is a lot of small files, then the size of metadata will be
>>>> undesirable due to deduplication
>>>
>>> Yes, that is a fact, but if that really matters depends on the use-case
>>> (e.g., the small files to large files ratio, ...). But as btrfs is designed
>>> explicitly as a general purpose file system, you usually want the good
>>> performance instead of the better disk-usage (especially as disk space isn't
>>> expensive anymore).
>> As I understand it, in basically all cases the total storage used by
>> inlining will be _smaller_, as the allocation doesn't need to be
>> aligned to the sector size.
>>
>
> if i have 10G small files in total, then it will consume 20G by default.
>
> ching

No.  No they will not.  As I already explained.

root@repository:/mnt$ mount ~/inline /mnt -o loop
root@repository:/mnt$ mount ~/inline /mnt2 -o loop,max_inline=0

root@repository:/mnt$ mount
/dev/loop0 on /mnt type btrfs (rw)
/dev/loop1 on /mnt2 type btrfs (rw,max_inline=0)

root@repository:/mnt$ time for x in {1..243854}; do echo "some stuff"
> /mnt/$x; done

real	1m5.447s
user	0m38.422s
sys	0m18.493s

root@repository:/mnt$ time for x in {1..243854}; do echo "some stuff"
> /mnt2/$x; done

real    1m49.880s
user    0m40.379s
sys     0m26.210s

root@repository:/mnt$ df /mnt /mnt2
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/loop0            10485760    266952   8359680   4% /mnt
/dev/loop1            10485760   1311620   7384236  16% /mnt2

root@repository:/mnt$ btrfs fi df /mnt
Data: total=1.01GB, used=256.00KB
System, DUP: total=8.00MB, used=4.00KB
System: total=4.00MB, used=0.00
Metadata, DUP: total=1.00GB, used=130.22MB
Metadata: total=8.00MB, used=0.00

root@repository:/mnt$ btrfs fi df /mnt2
Data: total=2.01GB, used=953.05MB
System, DUP: total=8.00MB, used=4.00KB
System: total=4.00MB, used=0.00
Metadata, DUP: total=1.00GB, used=164.03MB
Metadata: total=8.00MB, used=0.00

root@repository:/mnt$ btrfs fi show
Label: none  uuid: e5440337-9f44-4b2d-9889-80ab0ab8f245
	Total devices 1 FS bytes used 130.47MB
	devid    1 size 10.00GB used 3.04GB path /dev/loop0

Label: none  uuid: cfcc4149-3102-465d-89b8-0a6bb6a4749a
	Total devices 1 FS bytes used 1.09GB
	devid    1 size 10.00GB used 4.04GB path /dev/loop1

Btrfs Btrfs v0.19

Any questions?

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: Why btrfs inline small file by default?
  2012-10-30 22:14       ` Hugo Mills
@ 2012-10-30 22:19         ` Hugo Mills
  2012-10-30 23:47           ` ching
  0 siblings, 1 reply; 26+ messages in thread
From: Hugo Mills @ 2012-10-30 22:19 UTC (permalink / raw)
  To: ching, cwillu, Felix Pepinghege, linux-btrfs@vger.kernel.org

[-- Attachment #1: Type: text/plain, Size: 1607 bytes --]

On Tue, Oct 30, 2012 at 10:14:12PM +0000, Hugo Mills wrote:
> On Wed, Oct 31, 2012 at 05:40:25AM +0800, ching wrote:
> > On 10/30/2012 08:17 PM, cwillu wrote:
> > >>> If there is a lot of small files, then the size of metadata will be
> > >>> undesirable due to deduplication
> > >>
> > >> Yes, that is a fact, but if that really matters depends on the use-case
> > >> (e.g., the small files to large files ratio, ...). But as btrfs is designed
> > >> explicitly as a general purpose file system, you usually want the good
> > >> performance instead of the better disk-usage (especially as disk space isn't
> > >> expensive anymore).
> > > As I understand it, in basically all cases the total storage used by
> > > inlining will be _smaller_, as the allocation doesn't need to be
> > > aligned to the sector size.
> > >
> > 
> > if i have 10G small files in total, then it will consume 20G by default.
> 
>    If those small files are each 128 bytes in size, then you have
> approximately 80 million of them, and they'd take up 80 million pages,
> or 320 GiB of total disk space.

   Sorry, to make that clear -- I meant if they were stored in Data.
If they're inlined in metadata, then they'll take approximately 20 GiB
as you claim, which is a lot less than the 320 GiB they'd be if
they're not.

   Hugo.

-- 
=== Hugo Mills: hugo@... carfax.org.uk | darksatanic.net | lug.org.uk ===
  PGP key: 515C238D from wwwkeys.eu.pgp.net or http://www.carfax.org.uk
             --- I always felt that as a C programmer, I ---             
                         was becoming typecast.                          

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 828 bytes --]

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: Why btrfs inline small file by default?
  2012-10-30 22:16       ` cwillu
@ 2012-10-30 23:41         ` ching
  0 siblings, 0 replies; 26+ messages in thread
From: ching @ 2012-10-30 23:41 UTC (permalink / raw)
  To: cwillu; +Cc: Felix Pepinghege, linux-btrfs@vger.kernel.org

On 10/31/2012 06:16 AM, cwillu wrote:
> On Tue, Oct 30, 2012 at 3:40 PM, ching <lsching17@gmail.com> wrote:
>> On 10/30/2012 08:17 PM, cwillu wrote:
>>>>> If there is a lot of small files, then the size of metadata will be
>>>>> undesirable due to deduplication
>>>> Yes, that is a fact, but if that really matters depends on the use-case
>>>> (e.g., the small files to large files ratio, ...). But as btrfs is designed
>>>> explicitly as a general purpose file system, you usually want the good
>>>> performance instead of the better disk-usage (especially as disk space isn't
>>>> expensive anymore).
>>> As I understand it, in basically all cases the total storage used by
>>> inlining will be _smaller_, as the allocation doesn't need to be
>>> aligned to the sector size.
>>>
>> if i have 10G small files in total, then it will consume 20G by default.
>>
>> ching
> No.  No they will not.  As I already explained.
>
> root@repository:/mnt$ mount ~/inline /mnt -o loop
> root@repository:/mnt$ mount ~/inline /mnt2 -o loop,max_inline=0
>
> root@repository:/mnt$ mount
> /dev/loop0 on /mnt type btrfs (rw)
> /dev/loop1 on /mnt2 type btrfs (rw,max_inline=0)
>
> root@repository:/mnt$ time for x in {1..243854}; do echo "some stuff"
>> /mnt/$x; done
> real	1m5.447s
> user	0m38.422s
> sys	0m18.493s
>
> root@repository:/mnt$ time for x in {1..243854}; do echo "some stuff"
>> /mnt2/$x; done
> real    1m49.880s
> user    0m40.379s
> sys     0m26.210s
>
> root@repository:/mnt$ df /mnt /mnt2
> Filesystem           1K-blocks      Used Available Use% Mounted on
> /dev/loop0            10485760    266952   8359680   4% /mnt
> /dev/loop1            10485760   1311620   7384236  16% /mnt2
>
> root@repository:/mnt$ btrfs fi df /mnt
> Data: total=1.01GB, used=256.00KB
> System, DUP: total=8.00MB, used=4.00KB
> System: total=4.00MB, used=0.00
> Metadata, DUP: total=1.00GB, used=130.22MB
> Metadata: total=8.00MB, used=0.00
>
> root@repository:/mnt$ btrfs fi df /mnt2
> Data: total=2.01GB, used=953.05MB
> System, DUP: total=8.00MB, used=4.00KB
> System: total=4.00MB, used=0.00
> Metadata, DUP: total=1.00GB, used=164.03MB
> Metadata: total=8.00MB, used=0.00
>
> root@repository:/mnt$ btrfs fi show
> Label: none  uuid: e5440337-9f44-4b2d-9889-80ab0ab8f245
> 	Total devices 1 FS bytes used 130.47MB
> 	devid    1 size 10.00GB used 3.04GB path /dev/loop0
>
> Label: none  uuid: cfcc4149-3102-465d-89b8-0a6bb6a4749a
> 	Total devices 1 FS bytes used 1.09GB
> 	devid    1 size 10.00GB used 4.04GB path /dev/loop1
>
> Btrfs Btrfs v0.19
>
> Any questions?
>

can the test be repeated for:
1. 3k per file with leaf size=4K
2. 60k per file with leaf size=64k


 

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: Why btrfs inline small file by default?
  2012-10-30 22:19         ` Hugo Mills
@ 2012-10-30 23:47           ` ching
  2012-10-31  0:12             ` David Sterba
  2012-10-31  0:18             ` cwillu
  0 siblings, 2 replies; 26+ messages in thread
From: ching @ 2012-10-30 23:47 UTC (permalink / raw)
  To: Hugo Mills, cwillu, Felix Pepinghege, linux-btrfs@vger.kernel.org

On 10/31/2012 06:19 AM, Hugo Mills wrote:
> On Tue, Oct 30, 2012 at 10:14:12PM +0000, Hugo Mills wrote:
>> On Wed, Oct 31, 2012 at 05:40:25AM +0800, ching wrote:
>>> On 10/30/2012 08:17 PM, cwillu wrote:
>>>>>> If there is a lot of small files, then the size of metadata will be
>>>>>> undesirable due to deduplication
>>>>> Yes, that is a fact, but if that really matters depends on the use-case
>>>>> (e.g., the small files to large files ratio, ...). But as btrfs is designed
>>>>> explicitly as a general purpose file system, you usually want the good
>>>>> performance instead of the better disk-usage (especially as disk space isn't
>>>>> expensive anymore).
>>>> As I understand it, in basically all cases the total storage used by
>>>> inlining will be _smaller_, as the allocation doesn't need to be
>>>> aligned to the sector size.
>>>>
>>> if i have 10G small files in total, then it will consume 20G by default.
>>    If those small files are each 128 bytes in size, then you have
>> approximately 80 million of them, and they'd take up 80 million pages,
>> or 320 GiB of total disk space.
>    Sorry, to make that clear -- I meant if they were stored in Data.
> If they're inlined in metadata, then they'll take approximately 20 GiB
> as you claim, which is a lot less than the 320 GiB they'd be if
> they're not.
>
>    Hugo.
>


is it the same for:
1. 3k per file with leaf size=4K
2. 60k per file with leaf size=64k



^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: Why btrfs inline small file by default?
  2012-10-30 23:47           ` ching
@ 2012-10-31  0:12             ` David Sterba
  2012-10-31 21:07               ` ching
  2012-10-31  0:18             ` cwillu
  1 sibling, 1 reply; 26+ messages in thread
From: David Sterba @ 2012-10-31  0:12 UTC (permalink / raw)
  To: ching; +Cc: Hugo Mills, cwillu, Felix Pepinghege, linux-btrfs@vger.kernel.org

On Wed, Oct 31, 2012 at 07:47:14AM +0800, ching wrote:
> On 10/31/2012 06:19 AM, Hugo Mills wrote:
> > On Tue, Oct 30, 2012 at 10:14:12PM +0000, Hugo Mills wrote:
> >>> if i have 10G small files in total, then it will consume 20G by default.
> >>    If those small files are each 128 bytes in size, then you have
> >> approximately 80 million of them, and they'd take up 80 million pages,
> >> or 320 GiB of total disk space.
> >    Sorry, to make that clear -- I meant if they were stored in Data.
> > If they're inlined in metadata, then they'll take approximately 20 GiB
> > as you claim, which is a lot less than the 320 GiB they'd be if
> > they're not.
> >
> is it the same for:
> 1. 3k per file with leaf size=4K
> 2. 60k per file with leaf size=64k

The inline limit is minimum of
* 'max_inline' (8k by default)
* PAGE_SIZE
* leafsize - header

so 60k files for 64k leaves will not get inlined, unless you have a
system with 64k pages.

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: Why btrfs inline small file by default?
  2012-10-30 23:47           ` ching
  2012-10-31  0:12             ` David Sterba
@ 2012-10-31  0:18             ` cwillu
  2012-10-31  8:48               ` Ahmet Inan
  2012-10-31 21:05               ` ching
  1 sibling, 2 replies; 26+ messages in thread
From: cwillu @ 2012-10-31  0:18 UTC (permalink / raw)
  To: ching; +Cc: Hugo Mills, Felix Pepinghege, linux-btrfs@vger.kernel.org

On Tue, Oct 30, 2012 at 5:47 PM, ching <lsching17@gmail.com> wrote:
> On 10/31/2012 06:19 AM, Hugo Mills wrote:
>> On Tue, Oct 30, 2012 at 10:14:12PM +0000, Hugo Mills wrote:
>>> On Wed, Oct 31, 2012 at 05:40:25AM +0800, ching wrote:
>>>> On 10/30/2012 08:17 PM, cwillu wrote:
>>>>>>> If there is a lot of small files, then the size of metadata will be
>>>>>>> undesirable due to deduplication
>>>>>> Yes, that is a fact, but if that really matters depends on the use-case
>>>>>> (e.g., the small files to large files ratio, ...). But as btrfs is designed
>>>>>> explicitly as a general purpose file system, you usually want the good
>>>>>> performance instead of the better disk-usage (especially as disk space isn't
>>>>>> expensive anymore).
>>>>> As I understand it, in basically all cases the total storage used by
>>>>> inlining will be _smaller_, as the allocation doesn't need to be
>>>>> aligned to the sector size.
>>>>>
>>>> if i have 10G small files in total, then it will consume 20G by default.
>>>    If those small files are each 128 bytes in size, then you have
>>> approximately 80 million of them, and they'd take up 80 million pages,
>>> or 320 GiB of total disk space.
>>    Sorry, to make that clear -- I meant if they were stored in Data.
>> If they're inlined in metadata, then they'll take approximately 20 GiB
>> as you claim, which is a lot less than the 320 GiB they'd be if
>> they're not.
>>
>>    Hugo.
>>
>
>
> is it the same for:
> 1. 3k per file with leaf size=4K
> 2. 60k per file with leaf size=64k
>
>

import os
import sys

data = "1" * 1024 * 3

for x in xrange(100 * 1000):
  with open('%s/%s' % (sys.argv[1], x), 'a') as f:
    f.write(data)

root@repository:~$ mount -o loop ~/inline /mnt
root@repository:~$ mount -o loop,max_inline=0 ~/noninline /mnt2

root@repository:~$ time python test.py /mnt
real	0m11.105s
user	0m1.328s
sys	0m5.416s
root@repository:~$ time python test.py /mnt2
real	0m21.905s
user	0m1.292s
sys	0m5.460s

root@repository:/$ btrfs fi df /mnt
Data: total=1.01GB, used=256.00KB
System, DUP: total=8.00MB, used=4.00KB
System: total=4.00MB, used=0.00
Metadata, DUP: total=1.00GB, used=652.70MB
Metadata: total=8.00MB, used=0.00

root@repository:/$ btrfs fi df /mnt2
Data: total=1.01GB, used=391.12MB
System, DUP: total=8.00MB, used=4.00KB
System: total=4.00MB, used=0.00
Metadata, DUP: total=1.00GB, used=60.98MB
Metadata: total=8.00MB, used=0.00

3k data, 4k leaf: inline is twice the speed, but 1.4x bigger.

----

root@repository:~$ mkfs.btrfs inline -l 64k
root@repository:~$ mkfs.btrfs noninline -l 64k
...
root@repository:~$ time python test.py /mnt
real	0m12.244s
user	0m1.396s
sys	0m8.101s
root@repository:~$ time python test.py /mnt2
real	0m13.047s
user	0m1.436s
sys	0m7.772s

root@repository:/$ btr\fs fi df /mnt
Data: total=8.00MB, used=256.00KB
System, DUP: total=8.00MB, used=64.00KB
System: total=4.00MB, used=0.00
Metadata, DUP: total=1.00GB, used=342.06MB
Metadata: total=8.00MB, used=0.00

root@repository:/$ btr\fs fi df /mnt2
Data: total=1.01GB, used=391.10MB
System, DUP: total=8.00MB, used=64.00KB
System: total=4.00MB, used=0.00
Metadata, DUP: total=1.00GB, used=50.06MB
Metadata: total=8.00MB, used=0.00

3k data, 64k leaf: inline is still 10% faster, and is now 25% smaller

----

data = "1" * 1024 * 32

... (mkfs, mount, etc)

root@repository:~$ time python test.py /mnt
real	0m17.834s
user	0m1.224s
sys	0m4.772s
root@repository:~$ time python test.py /mnt2
real	0m20.521s
user	0m1.304s
sys	0m6.344s

root@repository:/$ btrfs fi df /mnt
Data: total=4.01GB, used=3.05GB
System, DUP: total=8.00MB, used=64.00KB
System: total=4.00MB, used=0.00
Metadata, DUP: total=1.00GB, used=54.00MB
Metadata: total=8.00MB, used=0.00

root@repository:/$ btrfs fi df /mnt2
Data: total=4.01GB, used=3.05GB
System, DUP: total=8.00MB, used=64.00KB
System: total=4.00MB, used=0.00
Metadata, DUP: total=1.00GB, used=53.56MB
Metadata: total=8.00MB, used=0.00

32k data, 64k leaf: inline is still 10% faster, and is now the same
size (not dead sure why, probably some interaction with the size of
the actual write that happens)

----

data = "1" * 1024 * 7

... etc


root@repository:~$ time python test.py /mnt
real	0m9.628s
user	0m1.368s
sys	0m4.188s
root@repository:~$ time python test.py /mnt2
real	0m13.455s
user	0m1.608s
sys	0m7.884s

root@repository:/$ btrfs fi df /mnt
Data: total=3.01GB, used=1.91GB
System, DUP: total=8.00MB, used=64.00KB
System: total=4.00MB, used=0.00
Metadata, DUP: total=1.00GB, used=74.69MB
Metadata: total=8.00MB, used=0.00

root@repository:/$ btrfs fi df /mnt2
Data: total=3.01GB, used=1.91GB
System, DUP: total=8.00MB, used=64.00KB
System: total=4.00MB, used=0.00
Metadata, DUP: total=1.00GB, used=74.69MB
Metadata: total=8.00MB, used=0.00

7k data, 64k leaf:  30% faster, same data usage.

----

Are we done yet?  Can I go home now? ;p

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: Why btrfs inline small file by default?
  2012-10-31  0:18             ` cwillu
@ 2012-10-31  8:48               ` Ahmet Inan
  2012-10-31  9:39                 ` cwillu
  2012-10-31 21:05               ` ching
  1 sibling, 1 reply; 26+ messages in thread
From: Ahmet Inan @ 2012-10-31  8:48 UTC (permalink / raw)
  To: cwillu; +Cc: ching, Hugo Mills, Felix Pepinghege, linux-btrfs@vger.kernel.org

i also dont see any benefit from inlining small files:

this example is me doing a fully fledged prebuilt
gentoo system installation on a fresh HDD from
squashfs image on usb key in under 5 minutes:

with defaults (inlining small files):

# mount -o noatime,compress=lzo /dev/sda2 /mnt/point
# time unsquashfs -f -d /mnt/point/ /dev/sdb2
real    4m39.253s
user    1m37.854s
sys     1m1.433s

# btrfs filesystem show
Label: 'root'  uuid: 6fb7104d-8f4a-4f3a-aff8-fdad0a39f569
        Total devices 1 FS bytes used 10.05GB
        devid    1 size 232.63GB used 14.04GB path /dev/sda2

Btrfs v0.20-rc1

# btrfs filesystem df /mnt/point/
Data: total=10.01GB, used=9.08GB
System, DUP: total=8.00MB, used=4.00KB
System: total=4.00MB, used=0.00
Metadata, DUP: total=2.00GB, used=992.48MB
Metadata: total=8.00MB, used=0.00

without inline:

# mount -o max_inline=0,noatime,compress=lzo /dev/sda2 /mnt/point
# time unsquashfs -f -d /mnt/point/ /dev/sdb2
real    4m42.085s
user    1m36.894s
sys     1m1.583s

# btrfs filesystem show
failed to read /dev/sr0
Label: 'root'  uuid: 97ad3c97-ab03-4197-86d3-72869604b368
        Total devices 1 FS bytes used 11.36GB
        devid    1 size 232.63GB used 13.04GB path /dev/sda2

Btrfs v0.20-rc1

# btrfs filesystem df /mnt/point/
Data: total=11.01GB, used=10.85GB
System, DUP: total=8.00MB, used=4.00KB
System: total=4.00MB, used=0.00
Metadata, DUP: total=1.00GB, used=518.59MB
Metadata: total=8.00MB, used=0.00

i will test "no inlining" for some more time though.

Ahmet

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: Why btrfs inline small file by default?
  2012-10-31  8:48               ` Ahmet Inan
@ 2012-10-31  9:39                 ` cwillu
  2012-10-31 10:48                   ` Ahmet Inan
  0 siblings, 1 reply; 26+ messages in thread
From: cwillu @ 2012-10-31  9:39 UTC (permalink / raw)
  To: Ahmet Inan
  Cc: ching, Hugo Mills, Felix Pepinghege, linux-btrfs@vger.kernel.org

On Wed, Oct 31, 2012 at 2:48 AM, Ahmet Inan
<ainan@mathematik.uni-freiburg.de> wrote:
> i also dont see any benefit from inlining small files:

> with defaults (inlining small files):
> real    4m39.253s
> Data: total=10.01GB, used=9.08GB
> Metadata, DUP: total=2.00GB, used=992.48MB

> without inline:
> real    4m42.085s
> Data: total=11.01GB, used=10.85GB
> Metadata, DUP: total=1.00GB, used=518.59MB

I suggest you take a closer look at your numbers.

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: Why btrfs inline small file by default?
  2012-10-31  9:39                 ` cwillu
@ 2012-10-31 10:48                   ` Ahmet Inan
  2012-10-31 10:55                     ` Michael Kjörling
  2012-10-31 10:57                     ` cwillu
  0 siblings, 2 replies; 26+ messages in thread
From: Ahmet Inan @ 2012-10-31 10:48 UTC (permalink / raw)
  To: cwillu; +Cc: ching, Hugo Mills, Felix Pepinghege, linux-btrfs@vger.kernel.org

>> i also dont see any benefit from inlining small files:

>> with defaults (inlining small files):
>> real    4m39.253s
>> Data: total=10.01GB, used=9.08GB
>> Metadata, DUP: total=2.00GB, used=992.48MB

>> without inline:
>> real    4m42.085s
>> Data: total=11.01GB, used=10.85GB
>> Metadata, DUP: total=1.00GB, used=518.59MB
>
> I suggest you take a closer look at your numbers.

both use 12GiB in total and both need 280 seconds.
am i missing something?

Ahmet

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: Why btrfs inline small file by default?
  2012-10-31 10:48                   ` Ahmet Inan
@ 2012-10-31 10:55                     ` Michael Kjörling
  2012-10-31 11:10                       ` Ahmet Inan
  2012-10-31 10:57                     ` cwillu
  1 sibling, 1 reply; 26+ messages in thread
From: Michael Kjörling @ 2012-10-31 10:55 UTC (permalink / raw)
  To: Ahmet Inan; +Cc: linux-btrfs

On 31 Oct 2012 11:48 +0100, from ainan@mathematik.uni-freiburg.de (Ahmet Inan):
>>> i also dont see any benefit from inlining small files:
> 
>>> with defaults (inlining small files):
>>> real    4m39.253s
>>> Data: total=10.01GB, used=9.08GB
>>> Metadata, DUP: total=2.00GB, used=992.48MB

This uses 10290.40 MB total, if we pad with zeroes (9.08GB plus
992.48MB).


>>> without inline:
>>> real    4m42.085s
>>> Data: total=11.01GB, used=10.85GB
>>> Metadata, DUP: total=1.00GB, used=518.59MB

Under the same assumption, this uses 11628.99 MB total (10.85GB +
518.59MB).


>> I suggest you take a closer look at your numbers.
> 
> both use 12GiB in total and both need 280 seconds.
> am i missing something?

With inlining, you're using about 1.3 GB less disk space and require a
few seconds less wall-clock time for the same thing. A 10% difference
in storage space requirement does not seem like "no benefit" to me,
and both sets of numbers favor the default (with inlining).

-- 
Michael Kjörling • http://michael.kjorling.se • michael@kjorling.se
                “People who think they know everything really annoy
                those of us who know we don’t.” (Bjarne Stroustrup)

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: Why btrfs inline small file by default?
  2012-10-31 10:48                   ` Ahmet Inan
  2012-10-31 10:55                     ` Michael Kjörling
@ 2012-10-31 10:57                     ` cwillu
  2012-10-31 11:56                       ` Michael Kjörling
  1 sibling, 1 reply; 26+ messages in thread
From: cwillu @ 2012-10-31 10:57 UTC (permalink / raw)
  To: Ahmet Inan
  Cc: ching, Hugo Mills, Felix Pepinghege, linux-btrfs@vger.kernel.org

On Wed, Oct 31, 2012 at 4:48 AM, Ahmet Inan
<ainan@mathematik.uni-freiburg.de> wrote:
>>> i also dont see any benefit from inlining small files:
>
>>> with defaults (inlining small files):
>>> real    4m39.253s
>>> Data: total=10.01GB, used=9.08GB
>>> Metadata, DUP: total=2.00GB, used=992.48MB
>
>>> without inline:
>>> real    4m42.085s
>>> Data: total=11.01GB, used=10.85GB
>>> Metadata, DUP: total=1.00GB, used=518.59MB
>>
>> I suggest you take a closer look at your numbers.
>
> both use 12GiB in total and both need 280 seconds.
> am i missing something?

9.08GB + 992.48MB*2 == 11.02GB

10.85GB + 518MB*2 == 11.86GB

That's nearly a GB smaller.

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: Why btrfs inline small file by default?
  2012-10-31 10:55                     ` Michael Kjörling
@ 2012-10-31 11:10                       ` Ahmet Inan
  0 siblings, 0 replies; 26+ messages in thread
From: Ahmet Inan @ 2012-10-31 11:10 UTC (permalink / raw)
  To: Michael Kjörling; +Cc: linux-btrfs

>>>> with defaults (inlining small files):
>>>> real    4m39.253s
>>>> Data: total=10.01GB, used=9.08GB
>>>> Metadata, DUP: total=2.00GB, used=992.48MB
>
> This uses 10290.40 MB total, if we pad with zeroes (9.08GB plus
> 992.48MB).

>>>> without inline:
>>>> real    4m42.085s
>>>> Data: total=11.01GB, used=10.85GB
>>>> Metadata, DUP: total=1.00GB, used=518.59MB
>
> Under the same assumption, this uses 11628.99 MB total (10.85GB +
> 518.59MB).

> With inlining, you're using about 1.3 GB less disk space and require a
thank you for clarifying this. 10% is indeed a benefit.

> few seconds less wall-clock time for the same thing.
those where only 2 tests, have to make a lot more runs
to make qualified judgement there.
one percent difference is noise floor to me.

Ahmet

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: Why btrfs inline small file by default?
  2012-10-31 10:57                     ` cwillu
@ 2012-10-31 11:56                       ` Michael Kjörling
  2012-10-31 13:27                         ` Ahmet Inan
  2012-10-31 13:44                         ` Roman Mamedov
  0 siblings, 2 replies; 26+ messages in thread
From: Michael Kjörling @ 2012-10-31 11:56 UTC (permalink / raw)
  To: cwillu; +Cc: Ahmet Inan, linux-btrfs

On 31 Oct 2012 04:57 -0600, from cwillu@cwillu.com (cwillu):
> 9.08GB + 992.48MB*2 == 11.02GB
> 
> 10.85GB + 518MB*2 == 11.86GB
> 
> That's nearly a GB smaller.

That, too; I missed the "DUP". Not quite as pronounced as in my
calculations, then, but still a significant enough difference.

-- 
Michael Kjörling • http://michael.kjorling.se • michael@kjorling.se
                “People who think they know everything really annoy
                those of us who know we don’t.” (Bjarne Stroustrup)

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: Why btrfs inline small file by default?
  2012-10-31 11:56                       ` Michael Kjörling
@ 2012-10-31 13:27                         ` Ahmet Inan
  2012-10-31 13:44                         ` Roman Mamedov
  1 sibling, 0 replies; 26+ messages in thread
From: Ahmet Inan @ 2012-10-31 13:27 UTC (permalink / raw)
  To: Michael Kjörling; +Cc: cwillu, linux-btrfs

>> 9.08GB + 992.48MB*2 == 11.02GB
>> 10.85GB + 518MB*2 == 11.86GB
>> That's nearly a GB smaller.
> That, too; I missed the "DUP". Not quite as pronounced as in my
> calculations, then, but still a significant enough difference.

great. now were down to 7-8%

just FYI:

ive retested with max_inline=0 but with leafsize=64K this time:
# mkfs.btrfs -l 64K -L root /dev/sda2
...
real    4m45.878s
user    1m44.730s
sys     1m7.226s

thats 2% slower for this one test (no big deal really)

# btrfs filesystem show
Label: 'root'  uuid: dd2951da-2529-4320-a952-e692ea5bdbc3
        Total devices 1 FS bytes used 11.37GB
        devid    1 size 232.63GB used 13.04GB path /dev/sda2

Btrfs v0.20-rc1

# btrfs filesystem df /mnt/point/
Data: total=11.01GB, used=10.89GB
System, DUP: total=8.00MB, used=64.00KB
System: total=4.00MB, used=0.00
Metadata, DUP: total=1.00GB, used=487.94MB
Metadata: total=8.00MB, used=0.00

(1024*10.89 + 2*487.94) / 1024 = 11.84GiB

still around 7-8%

now lets see what everyday use with
max_inline=0 and leafsize=64K
feels like :)

Ahmet

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: Why btrfs inline small file by default?
  2012-10-31 11:56                       ` Michael Kjörling
  2012-10-31 13:27                         ` Ahmet Inan
@ 2012-10-31 13:44                         ` Roman Mamedov
  1 sibling, 0 replies; 26+ messages in thread
From: Roman Mamedov @ 2012-10-31 13:44 UTC (permalink / raw)
  To: Michael Kjörling; +Cc: cwillu, Ahmet Inan, linux-btrfs

[-- Attachment #1: Type: text/plain, Size: 980 bytes --]

On Wed, 31 Oct 2012 11:56:39 +0000
Michael Kjörling <michael@kjorling.se> wrote:

> On 31 Oct 2012 04:57 -0600, from cwillu@cwillu.com (cwillu):
> > 9.08GB + 992.48MB*2 == 11.02GB
> > 
> > 10.85GB + 518MB*2 == 11.86GB
> > 
> > That's nearly a GB smaller.
> 
> That, too; I missed the "DUP". Not quite as pronounced as in my
> calculations, then, but still a significant enough difference.

There is also a number of cases which justify disabling DUP for metadata, e.g.

- underlying block device is an internally deduplicating SSD (i.e. possibly
  most of them)
- or the block device is a RAID incorporating redundancy
- or simply one wants increase performance at the cost of some reliability

With non-DUP metadata your calculations showing inlining being more efficient
remain correct.

-- 
With respect,
Roman

~~~~~~~~~~~~~~~~~~~~~~~~~~~
"Stallman had a printer,
with code he could not see.
So he began to tinker,
and set the software free."

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 198 bytes --]

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: Why btrfs inline small file by default?
  2012-10-31  0:18             ` cwillu
  2012-10-31  8:48               ` Ahmet Inan
@ 2012-10-31 21:05               ` ching
  1 sibling, 0 replies; 26+ messages in thread
From: ching @ 2012-10-31 21:05 UTC (permalink / raw)
  To: cwillu; +Cc: Hugo Mills, Felix Pepinghege, linux-btrfs@vger.kernel.org

On 10/31/2012 08:18 AM, cwillu wrote:
> import os
> import sys
>
> data = "1" * 1024 * 3
>
> for x in xrange(100 * 1000):
>   with open('%s/%s' % (sys.argv[1], x), 'a') as f:
>     f.write(data)
>
> root@repository:~$ mount -o loop ~/inline /mnt
> root@repository:~$ mount -o loop,max_inline=0 ~/noninline /mnt2
>
> root@repository:~$ time python test.py /mnt
> real	0m11.105s
> user	0m1.328s
> sys	0m5.416s
> root@repository:~$ time python test.py /mnt2
> real	0m21.905s
> user	0m1.292s
> sys	0m5.460s
>
> root@repository:/$ btrfs fi df /mnt
> Data: total=1.01GB, used=256.00KB
> System, DUP: total=8.00MB, used=4.00KB
> System: total=4.00MB, used=0.00
> Metadata, DUP: total=1.00GB, used=652.70MB
> Metadata: total=8.00MB, used=0.00
>
> root@repository:/$ btrfs fi df /mnt2
> Data: total=1.01GB, used=391.12MB
> System, DUP: total=8.00MB, used=4.00KB
> System: total=4.00MB, used=0.00
> Metadata, DUP: total=1.00GB, used=60.98MB
> Metadata: total=8.00MB, used=0.00
>
> 3k data, 4k leaf: inline is twice the speed, but 1.4x bigger.
>
> ----
>
> root@repository:~$ mkfs.btrfs inline -l 64k
> root@repository:~$ mkfs.btrfs noninline -l 64k
> ...
> root@repository:~$ time python test.py /mnt
> real	0m12.244s
> user	0m1.396s
> sys	0m8.101s
> root@repository:~$ time python test.py /mnt2
> real	0m13.047s
> user	0m1.436s
> sys	0m7.772s
>
> root@repository:/$ btr\fs fi df /mnt
> Data: total=8.00MB, used=256.00KB
> System, DUP: total=8.00MB, used=64.00KB
> System: total=4.00MB, used=0.00
> Metadata, DUP: total=1.00GB, used=342.06MB
> Metadata: total=8.00MB, used=0.00
>
> root@repository:/$ btr\fs fi df /mnt2
> Data: total=1.01GB, used=391.10MB
> System, DUP: total=8.00MB, used=64.00KB
> System: total=4.00MB, used=0.00
> Metadata, DUP: total=1.00GB, used=50.06MB
> Metadata: total=8.00MB, used=0.00
>
> 3k data, 64k leaf: inline is still 10% faster, and is now 25% smaller
>
> ----
>
> data = "1" * 1024 * 32
>
> ... (mkfs, mount, etc)
>
> root@repository:~$ time python test.py /mnt
> real	0m17.834s
> user	0m1.224s
> sys	0m4.772s
> root@repository:~$ time python test.py /mnt2
> real	0m20.521s
> user	0m1.304s
> sys	0m6.344s
>
> root@repository:/$ btrfs fi df /mnt
> Data: total=4.01GB, used=3.05GB
> System, DUP: total=8.00MB, used=64.00KB
> System: total=4.00MB, used=0.00
> Metadata, DUP: total=1.00GB, used=54.00MB
> Metadata: total=8.00MB, used=0.00
>
> root@repository:/$ btrfs fi df /mnt2
> Data: total=4.01GB, used=3.05GB
> System, DUP: total=8.00MB, used=64.00KB
> System: total=4.00MB, used=0.00
> Metadata, DUP: total=1.00GB, used=53.56MB
> Metadata: total=8.00MB, used=0.00
>
> 32k data, 64k leaf: inline is still 10% faster, and is now the same
> size (not dead sure why, probably some interaction with the size of
> the actual write that happens)
>
> ----
>
> data = "1" * 1024 * 7
>
> ... etc
>
>
> root@repository:~$ time python test.py /mnt
> real	0m9.628s
> user	0m1.368s
> sys	0m4.188s
> root@repository:~$ time python test.py /mnt2
> real	0m13.455s
> user	0m1.608s
> sys	0m7.884s
>
> root@repository:/$ btrfs fi df /mnt
> Data: total=3.01GB, used=1.91GB
> System, DUP: total=8.00MB, used=64.00KB
> System: total=4.00MB, used=0.00
> Metadata, DUP: total=1.00GB, used=74.69MB
> Metadata: total=8.00MB, used=0.00
>
> root@repository:/$ btrfs fi df /mnt2
> Data: total=3.01GB, used=1.91GB
> System, DUP: total=8.00MB, used=64.00KB
> System: total=4.00MB, used=0.00
> Metadata, DUP: total=1.00GB, used=74.69MB
> Metadata: total=8.00MB, used=0.00
>
> 7k data, 64k leaf:  30% faster, same data usage.
>
> ----
>
> Are we done yet?  Can I go home now? ;p
>


thanks for the test.

but the result just indicate the inline small file is not a "safe" optimization to be turned on by default.


^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: Why btrfs inline small file by default?
  2012-10-31  0:12             ` David Sterba
@ 2012-10-31 21:07               ` ching
  0 siblings, 0 replies; 26+ messages in thread
From: ching @ 2012-10-31 21:07 UTC (permalink / raw)
  To: Hugo Mills, linux-btrfs@vger.kernel.org; +Cc: cwillu, Felix Pepinghege

On 10/31/2012 08:12 AM, David Sterba wrote:
> On Wed, Oct 31, 2012 at 07:47:14AM +0800, ching wrote:
>> On 10/31/2012 06:19 AM, Hugo Mills wrote:
>>> On Tue, Oct 30, 2012 at 10:14:12PM +0000, Hugo Mills wrote:
>>>>> if i have 10G small files in total, then it will consume 20G by default.
>>>>    If those small files are each 128 bytes in size, then you have
>>>> approximately 80 million of them, and they'd take up 80 million pages,
>>>> or 320 GiB of total disk space.
>>>    Sorry, to make that clear -- I meant if they were stored in Data.
>>> If they're inlined in metadata, then they'll take approximately 20 GiB
>>> as you claim, which is a lot less than the 320 GiB they'd be if
>>> they're not.
>>>
>> is it the same for:
>> 1. 3k per file with leaf size=4K
>> 2. 60k per file with leaf size=64k
> The inline limit is minimum of
> * 'max_inline' (8k by default)
> * PAGE_SIZE
> * leafsize - header
>
> so 60k files for 64k leaves will not get inlined, unless you have a
> system with 64k pages.
>

thank you very much for your clear explanation :)

this is the first time i heard about this.

ching

^ permalink raw reply	[flat|nested] 26+ messages in thread

end of thread, other threads:[~2012-10-31 21:07 UTC | newest]

Thread overview: 26+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-10-30 11:04 Why btrfs inline small file by default? ching
2012-10-30 12:04 ` Felix Pepinghege
2012-10-30 12:17   ` cwillu
2012-10-30 21:40     ` ching
2012-10-30 22:14       ` Hugo Mills
2012-10-30 22:19         ` Hugo Mills
2012-10-30 23:47           ` ching
2012-10-31  0:12             ` David Sterba
2012-10-31 21:07               ` ching
2012-10-31  0:18             ` cwillu
2012-10-31  8:48               ` Ahmet Inan
2012-10-31  9:39                 ` cwillu
2012-10-31 10:48                   ` Ahmet Inan
2012-10-31 10:55                     ` Michael Kjörling
2012-10-31 11:10                       ` Ahmet Inan
2012-10-31 10:57                     ` cwillu
2012-10-31 11:56                       ` Michael Kjörling
2012-10-31 13:27                         ` Ahmet Inan
2012-10-31 13:44                         ` Roman Mamedov
2012-10-31 21:05               ` ching
2012-10-30 22:16       ` cwillu
2012-10-30 23:41         ` ching
2012-10-30 21:39   ` ching
2012-10-30 12:11 ` Felix Pepinghege
2012-10-30 12:13 ` Mitch Harder
2012-10-30 16:38 ` David Sterba

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).