Hi Yangtao, I love your patch! Perhaps something to improve: [auto build test WARNING on jaegeuk-f2fs/dev-test] [cannot apply to jaegeuk-f2fs/dev linus/master v6.1-rc8 next-20221207] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Yangtao-Li/f2fs-introduce-hot_data_age_threshold-and-warm_data_age_threshold-mount-opt/20221206-143754 base: https://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs.git dev-test patch link: https://lore.kernel.org/r/20221206063616.68522-1-frank.li%40vivo.com patch subject: [PATCH] f2fs: introduce hot_data_age_threshold and warm_data_age_threshold mount opt reproduce: # https://github.com/intel-lab-lkp/linux/commit/91f112832ffd9afa43d01f4acae672c7dfae45b6 git remote add linux-review https://github.com/intel-lab-lkp/linux git fetch --no-tags linux-review Yangtao-Li/f2fs-introduce-hot_data_age_threshold-and-warm_data_age_threshold-mount-opt/20221206-143754 git checkout 91f112832ffd9afa43d01f4acae672c7dfae45b6 make menuconfig # enable CONFIG_COMPILE_TEST, CONFIG_WARN_MISSING_DOCUMENTS, CONFIG_WARN_ABI_ERRORS make htmldocs If you fix the issue, kindly add following tag where applicable | Reported-by: kernel test robot All warnings (new ones prefixed by >>): >> Documentation/filesystems/f2fs.rst:354: WARNING: Malformed table. vim +354 Documentation/filesystems/f2fs.rst 106 107 108 ======================== ============================================================ 109 background_gc=%s Turn on/off cleaning operations, namely garbage 110 collection, triggered in background when I/O subsystem is 111 idle. If background_gc=on, it will turn on the garbage 112 collection and if background_gc=off, garbage collection 113 will be turned off. If background_gc=sync, it will turn 114 on synchronous garbage collection running in background. 115 Default value for this option is on. So garbage 116 collection is on by default. 117 gc_merge When background_gc is on, this option can be enabled to 118 let background GC thread to handle foreground GC requests, 119 it can eliminate the sluggish issue caused by slow foreground 120 GC operation when GC is triggered from a process with limited 121 I/O and CPU resources. 122 nogc_merge Disable GC merge feature. 123 disable_roll_forward Disable the roll-forward recovery routine 124 norecovery Disable the roll-forward recovery routine, mounted read- 125 only (i.e., -o ro,disable_roll_forward) 126 discard/nodiscard Enable/disable real-time discard in f2fs, if discard is 127 enabled, f2fs will issue discard/TRIM commands when a 128 segment is cleaned. 129 no_heap Disable heap-style segment allocation which finds free 130 segments for data from the beginning of main area, while 131 for node from the end of main area. 132 nouser_xattr Disable Extended User Attributes. Note: xattr is enabled 133 by default if CONFIG_F2FS_FS_XATTR is selected. 134 noacl Disable POSIX Access Control List. Note: acl is enabled 135 by default if CONFIG_F2FS_FS_POSIX_ACL is selected. 136 active_logs=%u Support configuring the number of active logs. In the 137 current design, f2fs supports only 2, 4, and 6 logs. 138 Default number is 6. 139 disable_ext_identify Disable the extension list configured by mkfs, so f2fs 140 is not aware of cold files such as media files. 141 inline_xattr Enable the inline xattrs feature. 142 noinline_xattr Disable the inline xattrs feature. 143 inline_xattr_size=%u Support configuring inline xattr size, it depends on 144 flexible inline xattr feature. 145 inline_data Enable the inline data feature: Newly created small (<~3.4k) 146 files can be written into inode block. 147 inline_dentry Enable the inline dir feature: data in newly created 148 directory entries can be written into inode block. The 149 space of inode block which is used to store inline 150 dentries is limited to ~3.4k. 151 noinline_dentry Disable the inline dentry feature. 152 flush_merge Merge concurrent cache_flush commands as much as possible 153 to eliminate redundant command issues. If the underlying 154 device handles the cache_flush command relatively slowly, 155 recommend to enable this option. 156 nobarrier This option can be used if underlying storage guarantees 157 its cached data should be written to the novolatile area. 158 If this option is set, no cache_flush commands are issued 159 but f2fs still guarantees the write ordering of all the 160 data writes. 161 barrier If this option is set, cache_flush commands are allowed to be 162 issued. 163 fastboot This option is used when a system wants to reduce mount 164 time as much as possible, even though normal performance 165 can be sacrificed. 166 extent_cache Enable an extent cache based on rb-tree, it can cache 167 as many as extent which map between contiguous logical 168 address and physical address per inode, resulting in 169 increasing the cache hit ratio. Set by default. 170 noextent_cache Disable an extent cache based on rb-tree explicitly, see 171 the above extent_cache mount option. 172 noinline_data Disable the inline data feature, inline data feature is 173 enabled by default. 174 data_flush Enable data flushing before checkpoint in order to 175 persist data of regular and symlink. 176 reserve_root=%d Support configuring reserved space which is used for 177 allocation from a privileged user with specified uid or 178 gid, unit: 4KB, the default limit is 0.2% of user blocks. 179 resuid=%d The user ID which may use the reserved blocks. 180 resgid=%d The group ID which may use the reserved blocks. 181 fault_injection=%d Enable fault injection in all supported types with 182 specified injection rate. 183 fault_type=%d Support configuring fault injection type, should be 184 enabled with fault_injection option, fault type value 185 is shown below, it supports single or combined type. 186 187 =================== =========== 188 Type_Name Type_Value 189 =================== =========== 190 FAULT_KMALLOC 0x000000001 191 FAULT_KVMALLOC 0x000000002 192 FAULT_PAGE_ALLOC 0x000000004 193 FAULT_PAGE_GET 0x000000008 194 FAULT_ALLOC_BIO 0x000000010 (obsolete) 195 FAULT_ALLOC_NID 0x000000020 196 FAULT_ORPHAN 0x000000040 197 FAULT_BLOCK 0x000000080 198 FAULT_DIR_DEPTH 0x000000100 199 FAULT_EVICT_INODE 0x000000200 200 FAULT_TRUNCATE 0x000000400 201 FAULT_READ_IO 0x000000800 202 FAULT_CHECKPOINT 0x000001000 203 FAULT_DISCARD 0x000002000 204 FAULT_WRITE_IO 0x000004000 205 FAULT_SLAB_ALLOC 0x000008000 206 FAULT_DQUOT_INIT 0x000010000 207 FAULT_LOCK_OP 0x000020000 208 FAULT_BLKADDR 0x000040000 209 =================== =========== 210 mode=%s Control block allocation mode which supports "adaptive" 211 and "lfs". In "lfs" mode, there should be no random 212 writes towards main area. 213 "fragment:segment" and "fragment:block" are newly added here. 214 These are developer options for experiments to simulate filesystem 215 fragmentation/after-GC situation itself. The developers use these 216 modes to understand filesystem fragmentation/after-GC condition well, 217 and eventually get some insights to handle them better. 218 In "fragment:segment", f2fs allocates a new segment in ramdom 219 position. With this, we can simulate the after-GC condition. 220 In "fragment:block", we can scatter block allocation with 221 "max_fragment_chunk" and "max_fragment_hole" sysfs nodes. 222 We added some randomness to both chunk and hole size to make 223 it close to realistic IO pattern. So, in this mode, f2fs will allocate 224 1.. blocks in a chunk and make a hole in the 225 length of 1.. by turns. With this, the newly 226 allocated blocks will be scattered throughout the whole partition. 227 Note that "fragment:block" implicitly enables "fragment:segment" 228 option for more randomness. 229 Please, use these options for your experiments and we strongly 230 recommend to re-format the filesystem after using these options. 231 io_bits=%u Set the bit size of write IO requests. It should be set 232 with "mode=lfs". 233 usrquota Enable plain user disk quota accounting. 234 grpquota Enable plain group disk quota accounting. 235 prjquota Enable plain project quota accounting. 236 usrjquota= Appoint specified file and type during mount, so that quota 237 grpjquota= information can be properly updated during recovery flow, 238 prjjquota= : must be in root directory; 239 jqfmt= : [vfsold,vfsv0,vfsv1]. 240 offusrjquota Turn off user journalled quota. 241 offgrpjquota Turn off group journalled quota. 242 offprjjquota Turn off project journalled quota. 243 quota Enable plain user disk quota accounting. 244 noquota Disable all plain disk quota option. 245 alloc_mode=%s Adjust block allocation policy, which supports "reuse" 246 and "default". 247 fsync_mode=%s Control the policy of fsync. Currently supports "posix", 248 "strict", and "nobarrier". In "posix" mode, which is 249 default, fsync will follow POSIX semantics and does a 250 light operation to improve the filesystem performance. 251 In "strict" mode, fsync will be heavy and behaves in line 252 with xfs, ext4 and btrfs, where xfstest generic/342 will 253 pass, but the performance will regress. "nobarrier" is 254 based on "posix", but doesn't issue flush command for 255 non-atomic files likewise "nobarrier" mount option. 256 test_dummy_encryption 257 test_dummy_encryption=%s 258 Enable dummy encryption, which provides a fake fscrypt 259 context. The fake fscrypt context is used by xfstests. 260 The argument may be either "v1" or "v2", in order to 261 select the corresponding fscrypt policy version. 262 checkpoint=%s[:%u[%]] Set to "disable" to turn off checkpointing. Set to "enable" 263 to reenable checkpointing. Is enabled by default. While 264 disabled, any unmounting or unexpected shutdowns will cause 265 the filesystem contents to appear as they did when the 266 filesystem was mounted with that option. 267 While mounting with checkpoint=disabled, the filesystem must 268 run garbage collection to ensure that all available space can 269 be used. If this takes too much time, the mount may return 270 EAGAIN. You may optionally add a value to indicate how much 271 of the disk you would be willing to temporarily give up to 272 avoid additional garbage collection. This can be given as a 273 number of blocks, or as a percent. For instance, mounting 274 with checkpoint=disable:100% would always succeed, but it may 275 hide up to all remaining free space. The actual space that 276 would be unusable can be viewed at /sys/fs/f2fs//unusable 277 This space is reclaimed once checkpoint=enable. 278 checkpoint_merge When checkpoint is enabled, this can be used to create a kernel 279 daemon and make it to merge concurrent checkpoint requests as 280 much as possible to eliminate redundant checkpoint issues. Plus, 281 we can eliminate the sluggish issue caused by slow checkpoint 282 operation when the checkpoint is done in a process context in 283 a cgroup having low i/o budget and cpu shares. To make this 284 do better, we set the default i/o priority of the kernel daemon 285 to "3", to give one higher priority than other kernel threads. 286 This is the same way to give a I/O priority to the jbd2 287 journaling thread of ext4 filesystem. 288 nocheckpoint_merge Disable checkpoint merge feature. 289 compress_algorithm=%s Control compress algorithm, currently f2fs supports "lzo", 290 "lz4", "zstd" and "lzo-rle" algorithm. 291 compress_algorithm=%s:%d Control compress algorithm and its compress level, now, only 292 "lz4" and "zstd" support compress level config. 293 algorithm level range 294 lz4 3 - 16 295 zstd 1 - 22 296 compress_log_size=%u Support configuring compress cluster size. The size will 297 be 4KB * (1 << %u). The default and minimum sizes are 16KB. 298 compress_extension=%s Support adding specified extension, so that f2fs can enable 299 compression on those corresponding files, e.g. if all files 300 with '.ext' has high compression rate, we can set the '.ext' 301 on compression extension list and enable compression on 302 these file by default rather than to enable it via ioctl. 303 For other files, we can still enable compression via ioctl. 304 Note that, there is one reserved special extension '*', it 305 can be set to enable compression for all files. 306 nocompress_extension=%s Support adding specified extension, so that f2fs can disable 307 compression on those corresponding files, just contrary to compression extension. 308 If you know exactly which files cannot be compressed, you can use this. 309 The same extension name can't appear in both compress and nocompress 310 extension at the same time. 311 If the compress extension specifies all files, the types specified by the 312 nocompress extension will be treated as special cases and will not be compressed. 313 Don't allow use '*' to specifie all file in nocompress extension. 314 After add nocompress_extension, the priority should be: 315 dir_flag < comp_extention,nocompress_extension < comp_file_flag,no_comp_file_flag. 316 See more in compression sections. 317 318 compress_chksum Support verifying chksum of raw data in compressed cluster. 319 compress_mode=%s Control file compression mode. This supports "fs" and "user" 320 modes. In "fs" mode (default), f2fs does automatic compression 321 on the compression enabled files. In "user" mode, f2fs disables 322 the automaic compression and gives the user discretion of 323 choosing the target file and the timing. The user can do manual 324 compression/decompression on the compression enabled files using 325 ioctls. 326 compress_cache Support to use address space of a filesystem managed inode to 327 cache compressed block, in order to improve cache hit ratio of 328 random read. 329 inlinecrypt When possible, encrypt/decrypt the contents of encrypted 330 files using the blk-crypto framework rather than 331 filesystem-layer encryption. This allows the use of 332 inline encryption hardware. The on-disk format is 333 unaffected. For more details, see 334 Documentation/block/inline-encryption.rst. 335 atgc Enable age-threshold garbage collection, it provides high 336 effectiveness and efficiency on background GC. 337 discard_unit=%s Control discard unit, the argument can be "block", "segment" 338 and "section", issued discard command's offset/size will be 339 aligned to the unit, by default, "discard_unit=block" is set, 340 so that small discard functionality is enabled. 341 For blkzoned device, "discard_unit=section" will be set by 342 default, it is helpful for large sized SMR or ZNS devices to 343 reduce memory cost by getting rid of fs metadata supports small 344 discard. 345 memory=%s Control memory mode. This supports "normal" and "low" modes. 346 "low" mode is introduced to support low memory devices. 347 Because of the nature of low memory devices, in this mode, f2fs 348 will try to save memory sometimes by sacrificing performance. 349 "normal" mode is the default mode and same as before. 350 age_extent_cache Enable an age extent cache based on rb-tree. It records 351 data block update frequency of the extent per inode, in 352 order to provide better temperature hints for data block 353 allocation. > 354 hot_data_age_threshold=%u When age_extent_cache is on, it controls the age 355 threshold to indicate the data blocks as hot. By default it was 356 initialized as 262144 blocks(equals to 1GB). 357 warm_data_age_threshold=%u When age_extent_cache is on, it controls the age 358 threshold to indicate the data blocks as warm. By default it was 359 initialized as 2621440 blocks(equals to 10GB). 360 ======================== ============================================================ 361 -- 0-DAY CI Kernel Test Service https://01.org/lkp