linux-f2fs-devel.lists.sourceforge.net archive mirror
 help / color / mirror / Atom feed
* [f2fs-dev] [PATCH 00/13] f2fs: introduce inline tail
@ 2024-09-03  8:54 Wu Bo via Linux-f2fs-devel
  2024-09-03  8:54 ` [f2fs-dev] [PATCH 01/13] f2fs: add inline tail mount option Wu Bo via Linux-f2fs-devel
                   ` (14 more replies)
  0 siblings, 15 replies; 23+ messages in thread
From: Wu Bo via Linux-f2fs-devel @ 2024-09-03  8:54 UTC (permalink / raw)
  To: linux-kernel; +Cc: Wu Bo, Jaegeuk Kim, Wu Bo, linux-f2fs-devel

The inode in F2FS occupies an entire 4k block. For many small files, this means
they consume much more space than their actual size. Therefore, there is
significant potential to better utilize the inode block space.

Currently, F2FS has two features to make use of the inode block space: inline
data and inline xattr.

Inline data stores file which size is smaller then 3.5k in inode block. However,
for slightly larger small files, there still have much waste.
For example, a 5k file requires 3 blocks, totaling 12k of space, which is
more than twice the size of the file itself!

Additionally, the end of a file often does not occupy an entire block. If we can
store the end of the file data within the inode block, we can save an entire
block for the file. This is particularly important for small files.

In fact, the current inline data is a special case of inline tail, and
inline tail is an extension of inline data.

To make it simple, inline tail only on small files(<64k). And for larger files,
inline tails don't provide any significant benefits.

The layout of an inline tail inode block is following:

| inode block     | 4096 |     inline tail enable    |
| --------------- | ---- | --------------------------|
| inode info      | 360  |                           |
| --------------- | ---- | --------------------------|
|                 |      | extra info         | 0~36 |
|                 |      | **compact_addr[16] | 64   |
| addr table[923] | 3692 | reserved           | 4    |
|                 |      | **tail data        |      |
|                 |      | inline_xattr       | 200  |
| --------------- | ---- | --------------------------|
| nid table[5]    | 20   |
| node footer     | 24   |

F2fs-tools to support inline tail:
https://lore.kernel.org/linux-f2fs-devel/20240903075931.3339584-1-bo.wu@vivo.com

I tested inline tail by copying the source code of Linux 6.9.7. The storage
space was reduced by approximately 8%. Additionally, due to the reduced IO, the
copy time also reduced by around 10%.

This patch series has been tested with xfstests by running 'kvm-xfstests -c f2fs
-g quick' both with and without the patch; no regressions were observed.
The test result is:
f2fs/default: 583 tests, 6 failures, 213 skipped, 650 seconds
  Failures: generic/050 generic/064 generic/250 generic/252 generic/563
      generic/735
      Totals: 607 tests, 213 skipped, 30 failures, 0 errors, 579s

Wu Bo (13):
  f2fs: add inline tail mount option
  f2fs: add inline tail disk layout definition
  f2fs: implement inline tail write & truncate
  f2fs: implement inline tail read & fiemap
  f2fs: set inline tail flag when create inode
  f2fs: fix address info has been truncated
  f2fs: support seek for inline tail
  f2fs: convert inline tail when inode expand
  f2fs: fix data loss during inline tail writing
  f2fs: avoid inlining quota files
  f2fs: fix inline tail data lost
  f2fs: convert inline tails to avoid potential issues
  f2fs: implement inline tail forward recovery

 fs/f2fs/data.c     |  93 +++++++++++++++++++++++++-
 fs/f2fs/f2fs.h     |  46 ++++++++++++-
 fs/f2fs/file.c     |  85 +++++++++++++++++++++++-
 fs/f2fs/inline.c   | 159 +++++++++++++++++++++++++++++++++++++++------
 fs/f2fs/inode.c    |   6 ++
 fs/f2fs/namei.c    |   3 +
 fs/f2fs/node.c     |   6 +-
 fs/f2fs/recovery.c |   9 ++-
 fs/f2fs/super.c    |  25 +++++++
 fs/f2fs/verity.c   |   4 ++
 10 files changed, 409 insertions(+), 27 deletions(-)

-- 
2.35.3



_______________________________________________
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] 23+ messages in thread

end of thread, other threads:[~2024-09-06 14:53 UTC | newest]

Thread overview: 23+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-09-03  8:54 [f2fs-dev] [PATCH 00/13] f2fs: introduce inline tail Wu Bo via Linux-f2fs-devel
2024-09-03  8:54 ` [f2fs-dev] [PATCH 01/13] f2fs: add inline tail mount option Wu Bo via Linux-f2fs-devel
2024-09-03  8:54 ` [f2fs-dev] [PATCH 02/13] f2fs: add inline tail disk layout definition Wu Bo via Linux-f2fs-devel
2024-09-03  8:54 ` [f2fs-dev] [PATCH 03/13] f2fs: implement inline tail write & truncate Wu Bo via Linux-f2fs-devel
2024-09-03  8:54 ` [f2fs-dev] [PATCH 04/13] f2fs: implement inline tail read & fiemap Wu Bo via Linux-f2fs-devel
2024-09-03  8:54 ` [f2fs-dev] [PATCH 05/13] f2fs: set inline tail flag when create inode Wu Bo via Linux-f2fs-devel
2024-09-03  9:49   ` [f2fs-dev] [External Mail] " Huang Jianan via Linux-f2fs-devel
2024-09-03  9:50   ` Huang Jianan via Linux-f2fs-devel
2024-09-04  3:03     ` [f2fs-dev] " Wu Bo via Linux-f2fs-devel
2024-09-03  8:54 ` [f2fs-dev] [PATCH 06/13] f2fs: fix address info has been truncated Wu Bo via Linux-f2fs-devel
2024-09-03  8:54 ` [f2fs-dev] [PATCH 07/13] f2fs: support seek for inline tail Wu Bo via Linux-f2fs-devel
2024-09-03  8:54 ` [f2fs-dev] [PATCH 08/13] f2fs: convert inline tail when inode expand Wu Bo via Linux-f2fs-devel
2024-09-03  8:54 ` [f2fs-dev] [PATCH 09/13] f2fs: fix data loss during inline tail writing Wu Bo via Linux-f2fs-devel
2024-09-03  8:54 ` [f2fs-dev] [PATCH 10/13] f2fs: avoid inlining quota files Wu Bo via Linux-f2fs-devel
2024-09-03  8:54 ` [f2fs-dev] [PATCH 11/13] f2fs: fix inline tail data lost Wu Bo via Linux-f2fs-devel
2024-09-03  8:54 ` [f2fs-dev] [PATCH 12/13] f2fs: convert inline tails to avoid potential issues Wu Bo via Linux-f2fs-devel
2024-09-03  8:54 ` [f2fs-dev] [PATCH 13/13] f2fs: implement inline tail forward recovery Wu Bo via Linux-f2fs-devel
2024-09-03 22:47   ` kernel test robot
2024-09-03 16:29 ` [f2fs-dev] [PATCH 00/13] f2fs: introduce inline tail Eric Biggers via Linux-f2fs-devel
2024-09-04  3:14   ` Wu Bo via Linux-f2fs-devel
2024-09-06  9:02 ` Juhyung Park
2024-09-06 10:57   ` Wu Bo via Linux-f2fs-devel
2024-09-06 14:52     ` Juhyung Park

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).