All of lore.kernel.org
 help / color / mirror / Atom feed
* [f2fs-dev] [Bug 214009] New: Compression has no real effect in disk usage
@ 2021-08-09 14:08 bugzilla-daemon
  2021-08-09 14:35 ` [f2fs-dev] [Bug 214009] " bugzilla-daemon
  2021-08-09 14:41 ` bugzilla-daemon
  0 siblings, 2 replies; 3+ messages in thread
From: bugzilla-daemon @ 2021-08-09 14:08 UTC (permalink / raw)
  To: linux-f2fs-devel

https://bugzilla.kernel.org/show_bug.cgi?id=214009

            Bug ID: 214009
           Summary: Compression has no real effect in disk usage
           Product: File System
           Version: 2.5
    Kernel Version: 5.13
          Hardware: All
                OS: Linux
              Tree: Mainline
            Status: NEW
          Severity: normal
          Priority: P1
         Component: f2fs
          Assignee: filesystem_f2fs@kernel-bugs.kernel.org
          Reporter: bezirg@gmail.com
        Regression: No

I run into problems of measuring the used/free space
of an f2fs partition with transparent compression enable, which leads me to
suspect that there is no transparent compression
happening after all.

I begin with a 1G partition to initialize f2fs with:

$ mkfs.f2fs -O extra_attr,compression /dev/sda2
F2FS-tools: mkfs.f2fs Ver: 1.14.0 (2020-08-24)
Info: Disable heap-based policy
Info: Debug level = 0
Info: Trim is enabled
Info: [/dev/sda2] Disk Model: nal USB 3.0
Info: Segments per section = 1
Info: Sections per zone = 1
Info: sector size = 512
Info: total sectors = 2097152 (1024 MB)
Info: zone aligned segment0 blkaddr: 512
Info: format version with
"Linux version 5.13.7-arch1-1 (linux@archlinux) (gcc (GCC) 11.1.0, GNU ld (GNU
Binutils) 2.36.1) #1 SMP PREEMPT Sat, 31 Jul 2021 13:18:52 +0000"
Info: [/dev/sda2] Discarding device
Info: This device doesn't support BLKSECDISCARD
Info: This device doesn't support BLKDISCARD
Info: Overprovision ratio = 6.360%
Info: Overprovision segments = 68 (GC reserved = 39)
Info: format successful

Let's mount with compression and see the usage/free space:

$ mount -o nodiscard,compress_algorithm=lz4,compress_extension=* /dev/sda2
/mnt/usb
$ cat /etc/mtab | grep /dev/sda2
/dev/sda2 /mnt/usb f2fs
rw,lazytime,relatime,background_gc=on,discard,no_heap,user_xattr,inline_xattr,acl,inline_data,inline_dentry,flush_merge,extent_cache,mode=adaptive,active_logs=6,alloc_mode=reuse,checkpoint_merge,fsync_mode=posix,compress_algorithm=lz4,compress_log_size=2,compress_extension=*,compress_mode=fs
0 0

$ df -hT /mnt/usb

Filesystem     Type  Size  Used Avail Use% Mounted on
/dev/sda2      f2fs 1022M  155M  868M  16% /mnt/usb

I understand that there is some initial overprovision overhead and some other
f2fs overhead that I am not aware of (total 155M).

Next, I create a 500M file, filled with zeroes.

$ dd bs=1M count=500 if=/dev/zero of=/tmp/empty

500+0 records in
500+0 records out
524288000 bytes (524 MB, 500 MiB) copied, 0.196941 s, 2.7 GB/s

The file is highly compressible in lz4 as you can see to around 2M:

$ lz4 /tmp/empty
Compressed filename will be : empty.lz4
Compressed 524288000 bytes into 2057890 bytes ==> 0.39%

I then transfer the file over to the f2fs partition, hoping
that transparent compression will happen:

$ cp /tmp/empty /mnt/usb/empty

The sysfs claims that "transparent compression" happened during this copy:

$ cat /sys/fs/f2fs/sda2/{compr_new_inode,compr_saved_block,compr_written_block}
1
96000
32000

Yet at this point, the df program thinks otherwise:

$ df -hT /mnt/usb

Filesystem     Type  Size  Used Avail Use% Mounted on
/dev/sda2      f2fs 1022M  655M  368M  65% /mnt/usb

As you can see, the reported used space increased by 500M (155M previously +
500M of the file).
I would expect a usage increase of only around 2M, since that is how the
default lz4 compresses into.

I already knew that for individual files the `du` program is not reliable and
in case of btrfs, the `compsize` program should be used instead;
however, the `df` utility works just fine for btrfs+compression.
Let's assume that `df` is reliable for btrfs but is lying in case of f2fs.
If I would then copy again the same 500M file into the f2fs partition, the
partition runs out of space!

$ cp /tmp/empty /mnt/usb/empty2
cp: error writing '/mnt/usb/empty2': No space left on device

$ df -hT /mnt/usb
Filesystem     Type  Size  Used Avail Use% Mounted on
/dev/sda2      f2fs 1022M 1022M     0 100% /mnt/usb

The sysfs continues believing that the second compression happened:

$ cat /sys/fs/f2fs/sda2/{compr_new_inode,compr_saved_block,compr_written_block}

2
166488
55496

I see three possible cases happening:

1) The df program is reporting wrong usage/free space.
2) the f2fs sysfs is lying about performing compression.
3) f2fs "thinks" that there is no space left to allocate, although there is,
since the contents are compressed good.

This is tested and happens both for lz4 and zstd compression of f2fs.
Tested with:
mkfs.f2fs 1.14.0 (2020-08-24)
Linux 5.13.7

I was inspired by other people running into similar problem:

<https://www.reddit.com/r/filesystems/comments/ljzn7i/f2fs_compression_not_compressing>
<https://forums.gentoo.org/viewtopic-p-8485606.html?sid=e6384908dade712e3f8eaeeb7cf1242b>

-- 
You may reply to this email to add a comment.

You are receiving this mail because:
You are watching the assignee of the bug.

_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

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

* [f2fs-dev] [Bug 214009] Compression has no real effect in disk usage
  2021-08-09 14:08 [f2fs-dev] [Bug 214009] New: Compression has no real effect in disk usage bugzilla-daemon
@ 2021-08-09 14:35 ` bugzilla-daemon
  2021-08-09 14:41 ` bugzilla-daemon
  1 sibling, 0 replies; 3+ messages in thread
From: bugzilla-daemon @ 2021-08-09 14:35 UTC (permalink / raw)
  To: linux-f2fs-devel

https://bugzilla.kernel.org/show_bug.cgi?id=214009

Chao Yu (chao@kernel.org) changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |ASSIGNED
                 CC|                            |chao@kernel.org

--- Comment #1 from Chao Yu (chao@kernel.org) ---
Could you please check below documentation?

https://elixir.bootlin.com/linux/latest/source/Documentation/filesystems/f2fs.rst#L824

We've added three ioctl interfaces to query/release/reserve saved block of
compressed file:
- F2FS_IOC_GET_COMPRESS_BLOCKS
- F2FS_IOC_RELEASE_COMPRESS_BLOCKS
- F2FS_IOC_RESERVE_COMPRESS_BLOCKS

f2fs_io command has supported these ioctls with below sub-command:
  get_cblocks          get number of reserved blocks on compress inode
  release_cblocks      release reserved blocks on compress inode
  reserve_cblocks      reserve blocks on compress inode

You can use ioctls directly in your apps, or use f2fs_io in the script to
operate the space compression saved, let me know if you have further question.

-- 
You may reply to this email to add a comment.

You are receiving this mail because:
You are watching the assignee of the bug.

_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

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

* [f2fs-dev] [Bug 214009] Compression has no real effect in disk usage
  2021-08-09 14:08 [f2fs-dev] [Bug 214009] New: Compression has no real effect in disk usage bugzilla-daemon
  2021-08-09 14:35 ` [f2fs-dev] [Bug 214009] " bugzilla-daemon
@ 2021-08-09 14:41 ` bugzilla-daemon
  1 sibling, 0 replies; 3+ messages in thread
From: bugzilla-daemon @ 2021-08-09 14:41 UTC (permalink / raw)
  To: linux-f2fs-devel

https://bugzilla.kernel.org/show_bug.cgi?id=214009

Nikolaos Bezirgiannis (bezirg@gmail.com) changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|ASSIGNED                    |RESOLVED
         Resolution|---                         |INVALID

--- Comment #2 from Nikolaos Bezirgiannis (bezirg@gmail.com) ---
Thank you, I was not aware of this. Reading some articles on f2fs led me to
believe that the "transparent compression" acted similarly to btrfs or zfs
whereas the free space is automatically/transparently reclaimed.

-- 
You may reply to this email to add a comment.

You are receiving this mail because:
You are watching the assignee of the bug.

_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

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

end of thread, other threads:[~2021-08-09 14:41 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-08-09 14:08 [f2fs-dev] [Bug 214009] New: Compression has no real effect in disk usage bugzilla-daemon
2021-08-09 14:35 ` [f2fs-dev] [Bug 214009] " bugzilla-daemon
2021-08-09 14:41 ` bugzilla-daemon

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.