Commit 2109901d authored by Gao Xiang's avatar Gao Xiang
Browse files

erofs: update documentation



- Refine highlights for main features;

- Add multi-reference pclusters and fragment description.

Signed-off-by: default avatarGao Xiang <hsiangkao@linux.alibaba.com>
Reviewed-by: default avatarYue Hu <huyue2@coolpad.com>
Reviewed-by: default avatarChao Yu <chao@kernel.org>
Link: https://lore.kernel.org/r/20221130095605.4656-1-hsiangkao@linux.alibaba.com
parent 27f2a2dc
Loading
Loading
Loading
Loading
+23 −13
Original line number Diff line number Diff line
@@ -30,12 +30,18 @@ It is implemented to be a better choice for the following scenarios:
   especially for those embedded devices with limited memory and high-density
   hosts with numerous containers.

Here is the main features of EROFS:
Here are the main features of EROFS:

 - Little endian on-disk design;

 - 4KiB block size and 32-bit block addresses, therefore 16TiB address space
   at most for now;
 - Block-based distribution and file-based distribution over fscache are
   supported;

 - Support multiple devices to refer to external blobs, which can be used
   for container images;

 - 4KiB block size and 32-bit block addresses for each device, therefore
   16TiB address space at most for now;

 - Two inode layouts for different requirements:

@@ -50,28 +56,29 @@ Here is the main features of EROFS:
   Metadata reserved      8 bytes       18 bytes
   =====================  ============  ======================================

 - Metadata and data could be mixed as an option;

 - Support extended attributes (xattrs) as an option;
 - Support extended attributes as an option;

 - Support tailpacking data and xattr inline compared to byte-addressed
   unaligned metadata or smaller block size alternatives;

 - Support POSIX.1e ACLs by using xattrs;
 - Support POSIX.1e ACLs by using extended attributes;

 - Support transparent data compression as an option:
   LZ4 and MicroLZMA algorithms can be used on a per-file basis; In addition,
   inplace decompression is also supported to avoid bounce compressed buffers
   and page cache thrashing.

 - Support chunk-based data deduplication and rolling-hash compressed data
   deduplication;

 - Support tailpacking inline compared to byte-addressed unaligned metadata
   or smaller block size alternatives;

 - Support merging tail-end data into a special inode as fragments.

 - Support direct I/O on uncompressed files to avoid double caching for loop
   devices;

 - Support FSDAX on uncompressed images for secure containers and ramdisks in
   order to get rid of unnecessary page cache.

 - Support multiple devices for multi blob container images;

 - Support file-based on-demand loading with the Fscache infrastructure.

The following git tree provides the file system user-space tools under
@@ -259,7 +266,7 @@ By the way, chunk-based files are all uncompressed for now.

Data compression
----------------
EROFS implements LZ4 fixed-sized output compression which generates fixed-sized
EROFS implements fixed-sized output compression which generates fixed-sized
compressed data blocks from variable-sized input in contrast to other existing
fixed-sized input solutions. Relatively higher compression ratios can be gotten
by using fixed-sized output compression since nowadays popular data compression
@@ -314,3 +321,6 @@ to understand its delta0 is constantly 1, as illustrated below::

If another HEAD follows a HEAD lcluster, there is no room to record CBLKCNT,
but it's easy to know the size of such pcluster is 1 lcluster as well.

Since Linux v6.1, each pcluster can be used for multiple variable-sized extents,
therefore it can be used for compressed data deduplication.