It would be useful to implement TopN list support for file heat.
After an hour discussion with Yingjin and Shilong about the possible designs and their cons and pros, we think the following design might work:
1) In order to avoid any performance impact, the sorting of the TopN will not add anything in the I/O process.
2) TopN sorting will be implemented using binary heap based on cfs_binheap.
3) A background thread scans "s_inodes" list of "struct super_block" and adds each inode into the binary heap. Examples of this are wait_sb_inodes(), add_dquot_ref(), drop_pagecache_sb() etc.
4) The scanning frequency could be a configurable parameter which depends on total inode numbers, heat decay time, resolution ratio (the rate that user-space tool dumps the list), etc.
5) Between handling of each inode, functions like cond_resched() should be called to avoid too high CPU usage or affecting normal I/O or file system access.
6) The binary heap is reverse order, meaning the top node is the file with least heat on the top.
7) Whenever an inode is adding to the binary heap, a new structure (e.g. "struct inode_heat_node") will be allocated for the inode with FIDs, inums and other fields properly set.
8) If the size of binary heap becomes larger than N (i.e. size == N+1) after inserting, an inodes will be removed from the top of the binary heap.
9) optimization: cfs_binheap_copy() will be implemented to copy the binary heap. When a user-space process starts to dump the TopN list, the binary heap will be copied so as to make the dumping quicker. cfs_binheap_copy() essentially copies element arrays, thus should be fast.
10) When user-space tool starts to dump the TopN list, the dumping binary heap shall be removed from the top to generate the TopN list with ascending order. The user-space tool shall change the list to descending order if needed.
11) Before dumping the TopN list, the administrator should configure which type of file heats (read, write, read sample or write sample) the sorting should be based on. N should also be a configurable parameter. These things could be configured through /sys or /proc interface. If memory is not a limitation, we could maitain four topN list at the same time for each type of file heats.
12) User-space tool shall read the TopN list and show in a proper way flushing the result after each time period (like what command top does).
Andreas Dilger (adilger@whamcloud.com) uploaded a new patch: https://review.whamcloud.com/34757
Subject: LU-10602 utils: fix file heat support
Project: fs/lustre-release
Branch: master
Current Patch Set: 1
Commit: 6a9db0937c5c4ae526d250aff7d11c83fb22bfd0