ikeep
does exactly what the documents say it does. I believe your confusion comes from not understanding what an inode
is. An inode
stores meta-data about the file. It is part of the filesystem structure and contains none of the data in the file. As the description of the patch which introduced the need for ikeep
explains:
XFS dynamically allocates space for inodes as they are created, this is different from many other filesystems where inode space is statically allocated at mkfs time. While inode space is dynamically allocated, it is never freed - up until now that is.
This non-freeing of space tends to lead to fragmentation on filesystems where lots of files come and go. It can also lead to inodes and their parent directories being scattered around the disk more.
Most filesystems allocate all the inodes they will ever need when you "make the filesystem" a.k.a. "format the drive") and never delete them. XFS is different in that it makes them on demand.
Fragmentation and things being "scattered around the disk more" cause significant performance problems for traditional spinning-platter disks. However, on an SSD, those things are no problem at all. Conversely, deleting disk blocks is a significant performance problem on SSDs while being no problem for spinning-disks. So while the patch making it the default to delete empty inodes was a performance improvement for spinning-disks, it actually made performance worse on SSDs. Hence the recommendation to use ikeep
on SSDs.