On Fri, Sep 16, 2022 at 5:01 PM Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> wrote: > > (cc's added) > > On Fri, 16 Sep 2022 16:08:52 -0700 Ivan Babrou <ivan@xxxxxxxxxxxxxx> wrote: > > > Many monitoring tools include open file count as a metric. Currently > > the only way to get this number is to enumerate the files in /proc/pid/fd. > > > > The problem with the current approach is that it does many things people > > generally don't care about when they need one number for a metric. > > In our tests for cadvisor, which reports open file counts per cgroup, > > we observed that reading the number of open files is slow. Out of 35.23% > > of CPU time spent in `proc_readfd_common`, we see 29.43% spent in > > `proc_fill_cache`, which is responsible for filling dentry info. > > Some of this extra time is spinlock contention, but it's a contention > > for the lock we don't want to take to begin with. > > > > We considered putting the number of open files in /proc/pid/stat. > > Unfortunately, counting the number of fds involves iterating the fdtable, > > which means that it might slow down /proc/pid/stat for processes > > with many open files. Instead we opted to put this info in /proc/pid/fd > > as a size member of the stat syscall result. Previously the reported > > number was zero, so there's very little risk of breaking anything, > > while still providing a somewhat logical way to count the open files. > > Documentation/filesystems/proc.rst would be an appropriate place to > document this ;) I am more than happy to add the docs after there's a confirmation that this is an appropriate approach to expose this information. I probably should've mentioned this explicitly, that's on me. There are two alternative approaches at the bottom of my original email that might be considered.