mirror of
https://github.com/tailscale/tailscale.git
synced 2026-09-18 17:18:56 -04:00
metrics: use Linux 6.2+ stat fast path for CurrentFDs
As of Linux 6.2 (torvalds/linux@f1f1f25699), the stat size of the /proc/self/fd directory is the number of open file descriptors, so CurrentFDs no longer needs to walk the directory on modern kernels. The walk is O(n) in the number of open file descriptors, which adds up on servers like derper that hold many connections and report this metric on every scrape: at 10k open fds, the walk takes about 2.2ms while an fstat takes a constant 300ns. We fstat a directory file descriptor held open for the process lifetime rather than calling stat with the path, because syscall.Stat copies the path string to a NUL-terminated buffer on every call and the metric must remain allocation-free. Kernels older than 6.2 report a size of zero, in which case we fall back to the directory walk. Updates #2784 Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com> Change-Id: I1742db2ae1938c77f9b7d137b167ab4a2b6b6167
This commit is contained in:
500 Internal Server Error
Gitea Version: 1.28.0+dev-477-g8b6ad49a5f