@@ -13,7 +13,7 @@ in meeting your performance expectations for your specific workload.
13
13
Combination of features can vary in performance, the table does not
14
14
cover all possibilities.
15
15
16
- **The table is based on the latest released linux kernel: 6.2 **
16
+ **The table is based on the latest released linux kernel: 6.3 **
17
17
18
18
The columns for each feature reflect the status of the implementation
19
19
in following ways:
@@ -30,187 +30,199 @@ in following ways:
30
30
- **Unstable **: do not use for other then testing purposes, known
31
31
severe problems, missing implementation of some core parts
32
32
33
+ .. role :: statusok
34
+ .. role :: statusmok
35
+ .. role :: statusunst
36
+
33
37
.. list-table ::
34
38
:header-rows: 1
35
39
36
40
* - Feature
37
41
- Stability
38
42
- Performance
39
43
- Notes
40
- * - discard (synchronous)
41
- - OK
44
+ * - :doc: ` discard (synchronous)<Trim> `
45
+ - :statusok: ` OK `
42
46
-
43
47
- mounted with `-o discard ` (has performance implications), also see `fstrim `
44
- * - discard (asynchronous)
45
- - OK
48
+ * - :doc: ` discard (asynchronous)<Trim> `
49
+ - :statusok: ` OK `
46
50
-
47
- - mounted with `-o discard=async ` (improved performance)"
51
+ - mounted with `-o discard=async ` (improved performance)
48
52
* - Autodefrag
49
- - OK
53
+ - :statusok: ` OK `
50
54
-
51
55
-
52
- * - Defrag
53
- - mostly OK
56
+ * - :doc: ` Defrag<Defragmentation> `
57
+ - :statusmok: ` mostly OK `
54
58
-
55
59
- extents get unshared (see below)
56
- * - Compression
57
- - OK (4.14)
60
+ * - :doc: ` Compression<Compression> `
61
+ - :statusok: ` OK `
58
62
-
59
63
-
60
- * - Out-of-band dedupe
61
- - OK
62
- - mostly OK
64
+ * - :doc: ` Out-of-band dedupe<Deduplication> `
65
+ - :statusok: ` OK `
66
+ - :statusmok: ` mostly OK `
63
67
- (reflink), heavily referenced extents have a noticeable performance hit (see below)
64
- * - File range cloning
65
- - OK
66
- - mostly OK
68
+ * - :doc: ` File range cloning<Reflink> `
69
+ - :statusok: ` OK `
70
+ - :statusmok: ` mostly OK `
67
71
- (reflink), heavily referenced extents have a noticeable performance hit (see below)
68
- * - More checksumming algorithms
69
- - OK
72
+ * - :doc: ` More checksumming algorithms<Checksumming> `
73
+ - :statusok: ` OK `
70
74
- OK
71
75
-
72
- * - Auto-repair
73
- - OK
76
+ * - :doc: ` Auto-repair<Auto-repair> `
77
+ - :statusok: ` OK `
74
78
- OK
75
79
- automatically repair from a correct spare copy if possible (DUP, RAID1, RAID10, RAID56)
76
- * - Scrub
77
- - OK
80
+ * - :doc: ` Scrub<Scrub> `
81
+ - :statusok: ` OK `
78
82
- OK
79
83
-
80
84
* - Scrub + RAID56
81
- - mostly OK
85
+ - :statusmok: ` mostly OK `
82
86
- mostly OK
83
87
-
84
88
* - nodatacow
85
- - OK
89
+ - :statusok: ` OK `
86
90
- OK
87
91
-
88
- * - Device replace
89
- - mostly OK
92
+ * - :doc: ` Device replace<Volume-management> `
93
+ - :statusmok: ` mostly OK `
90
94
- mostly OK
91
95
- (see below)
92
96
* - Degraded mount
93
- - OK (4.14)
97
+ - :statusok: ` OK `
94
98
- n/a
95
99
-
96
- * - Single (block group profile)
97
- - OK
100
+ * - :ref: ` Single (block group profile)<mkfs-section-profiles> `
101
+ - :statusok: ` OK `
98
102
- OK
99
103
-
100
- * - DUP (block group profile)
101
- - OK
104
+ * - :ref: ` DUP (block group profile)<mkfs-section-profiles> `
105
+ - :statusok: ` OK `
102
106
- OK
103
107
-
104
- * - RAID0
105
- - OK
108
+ * - :ref: ` RAID0<mkfs-section-profiles> `
109
+ - :statusok: ` OK `
106
110
- OK
107
111
-
108
- * - RAID1
109
- - OK
112
+ * - :ref: ` RAID1<mkfs-section-profiles> `
113
+ - :statusok: ` OK `
110
114
- mostly OK
111
115
- reading from mirrors in parallel can be optimized further (see below)
112
- * - RAID1C3
113
- - OK
116
+ * - :ref: ` RAID1C3<mkfs-section-profiles> `
117
+ - :statusok: ` OK `
114
118
- mostly OK
115
119
- reading from mirrors in parallel can be optimized further (see below)
116
- * - RAID1C4
117
- - OK
120
+ * - :ref: ` RAID1C4<mkfs-section-profiles> `
121
+ - :statusok: ` OK `
118
122
- mostly OK
119
123
- reading from mirrors in parallel can be optimized further (see below)
120
- * - RAID10
121
- - OK
124
+ * - :ref: ` RAID10<mkfs-section-profiles> `
125
+ - :statusok: ` OK `
122
126
- mostly OK
123
127
- reading from mirrors in parallel can be optimized further (see below)
124
- * - RAID56
125
- - unstable
128
+ * - :ref: ` RAID56<mkfs-section-profiles> `
129
+ - :statusunst: ` unstable `
126
130
- n/a
127
131
- (see below)
128
132
* - Mixed block groups
129
- - OK
133
+ - :statusok: ` OK `
130
134
- OK
131
135
-
132
- * - Filesystem resize
133
- - OK
136
+ * - :doc: ` Filesystem resize<Resize> `
137
+ - :statusok: ` OK `
134
138
- OK
135
139
- shrink, grow
136
- * - Balance
137
- - OK
140
+ * - :doc: ` Balance<Balance> `
141
+ - :statusok: ` OK `
138
142
- OK
139
143
- balance + qgroups can be slow when there are many snapshots
140
144
* - Offline UUID change
141
- - OK
145
+ - :statusok: ` OK `
142
146
- OK
143
147
-
144
148
* - Metadata UUID change
145
- - OK
149
+ - :statusok: ` OK `
146
150
- OK
147
151
-
148
- * - Subvolumes, snapshots
149
- - OK
152
+ * - :doc: ` Subvolumes, snapshots<Subvolumes> `
153
+ - :statusok: ` OK `
150
154
- OK
151
155
-
152
- * - Send
153
- - OK
156
+ * - :doc: ` Send<Send-receive> `
157
+ - :statusok: ` OK `
154
158
- OK
155
159
-
156
- * - Receive
157
- - OK
160
+ * - :doc: ` Receive<Send-receive> `
161
+ - :statusok: ` OK `
158
162
- OK
159
163
-
160
- * - Seeding
161
- - OK
164
+ * - :doc: ` Seeding<Seeding-device> `
165
+ - :statusok: ` OK `
162
166
- OK
163
167
-
164
- * - Quotas, qgroups
165
- - mostly OK
168
+ * - :doc: ` Quotas, qgroups<Qgroups> `
169
+ - :statusmok: ` mostly OK `
166
170
- mostly OK
167
171
- qgroups with many snapshots slows down balance
168
- * - Swapfile
169
- - OK
172
+ * - :doc: ` Swapfile<Swapfile> `
173
+ - :statusok: ` OK `
170
174
- n/a
171
175
- with some limitations
172
- * - NFS
173
- - OK
176
+ * - :ref: ` NFS<interop-nfs> `
177
+ - :statusok: ` OK `
174
178
- OK
175
179
-
176
- * - cgroups
177
- - OK
180
+ * - :ref: ` cgroups<interop-cgroups> `
181
+ - :statusok: ` OK `
178
182
- OK
179
183
- IO controller
180
- * - Samba
181
- - OK
184
+ * - :ref: ` Samba<interop-samba> `
185
+ - :statusok: ` OK `
182
186
- OK
183
187
- compression, server-side copies, snapshots
184
- * - io_uring
185
- - OK
188
+ * - :ref: ` io_uring<interop-io-uring> `
189
+ - :statusok: ` OK `
186
190
- OK
187
191
-
188
- * - fsverity
189
- - OK
192
+ * - :ref: ` fsverity<interop-fsverity> `
193
+ - :statusok: ` OK `
190
194
- OK
191
195
-
192
- * - idmapped mount
193
- - OK
196
+ * - :ref: ` idmapped mount<interop-idmapped> `
197
+ - :statusok: ` OK `
194
198
- OK
195
199
-
196
- * - Free space tree
197
- - OK (4.9)
200
+ * - :ref: ` Free space tree<mkfs-feature-free-space-tree> `
201
+ - :statusok: ` OK `
198
202
-
199
203
-
200
- * - no-holes
201
- - OK
202
- - OK
204
+ * - Block group tree
205
+ - :statusok: `OK `
203
206
-
204
- * - skinny-metadata
205
- - OK
207
+ -
208
+ * - :ref: `no-holes<mkfs-feature-no-holes> `
209
+ - :statusok: `OK `
206
210
- OK
207
211
-
208
- * - extended-refs
212
+ * - :ref: `skinny-metadata<mkfs-feature-skinny-metadata> `
213
+ - :statusok: `OK `
209
214
- OK
215
+ -
216
+ * - :ref: `extended-refs<mkfs-feature-extended-refs> `
217
+ - :statusok: `OK `
210
218
- OK
211
219
-
212
- * - zoned mode
220
+ * - :doc: `Subpage block size<Subpage> `
221
+ - :statusmok: `mostly OK `
213
222
- mostly OK
223
+ -
224
+ * - :doc: `Zoned mode<Zoned-mode> `
225
+ - :statusmok: `mostly OK `
214
226
- mostly OK
215
227
- there are known bugs, use only for testing
216
228
@@ -223,6 +235,70 @@ Please open an issue if:
223
235
- a reference could be enhanced by an actual link to documentation
224
236
(wiki, manual pages)
225
237
238
+ Subpage block size
239
+ ------------------
240
+
241
+ Most commonly used page sizes are 4KiB, 16KiB and 64KiB. All combinations with
242
+ a 4KiB sector size filesystems are supported. Some features are not compatible
243
+ with subpage or require another feature to work:
244
+
245
+ .. list-table ::
246
+ :header-rows: 1
247
+
248
+ * - Feature
249
+ - Status
250
+ - Notes
251
+ * - Inline files
252
+ - unsupported
253
+ - The max_inline mount option value is ignored
254
+ * - Free space cache v1
255
+ - unsupported
256
+ - Free space tree is mandatory
257
+ * - Compression
258
+ - partial support
259
+ - Only page-aligned ranges can be compressed
260
+
261
+
262
+ Zoned mode
263
+ ----------
264
+
265
+ .. list-table ::
266
+ :header-rows: 1
267
+
268
+ * - Feature
269
+ - Status
270
+ - Notes
271
+ * - Boot
272
+ - incompatible
273
+ - The blocks where partition table is stored is used for super block
274
+ * - Mixed block groups
275
+ - incompatible
276
+ - Interleaving data and metadata would lead to out of order write
277
+ * - NODATACOW
278
+ - incompatible
279
+ - In-place overwrite
280
+ * - fallocate
281
+ - incompatible
282
+ - Preallocation of blocks would require an out of order write
283
+ * - Free space cache v1
284
+ - incompatible
285
+ - Cache data are updated in a NODATACOW-way
286
+ * - Free space tree
287
+ - supported
288
+ -
289
+ * - fstrim
290
+ - not implemented
291
+ - This would require free space v1
292
+ * - single profile
293
+ - supported
294
+ - Both data and metadata
295
+ * - DUP profile
296
+ - partial support
297
+ - Only for metadata
298
+ * - RAID (all)
299
+ - not implemented
300
+ - This requires raid-stripe-tree feature which is still work in progress
301
+
226
302
227
303
Details that do not fit the table
228
304
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -275,10 +351,10 @@ continue to be mountable and usable by newer kernels.
275
351
The core of the on-disk format that comprises building blocks of the
276
352
filesystem:
277
353
278
- - layout of the main data structures, eg . superblock, b-tree nodes,
354
+ - layout of the main data structures, e.g . superblock, b-tree nodes,
279
355
b-tree keys, block headers
280
356
- the COW mechanism, based on the original design of Ohad Rodeh's paper
281
- "Shadowing and clones"
357
+ "B-trees, Shadowing and Clones" (http://sylab-srv.cs.fiu.edu/lib/exe/fetch.php?media=paperclub:shadow_btree.pdf)
282
358
283
359
Newly introduced features build on top of the above and could add
284
360
specific structures. If a backward compatibility is not possible to
0 commit comments