coreutils
coreutils copied to clipboard
df statx
checked with 0.0.12 (and 0.0.8)
When running
df -h /my_fs
instead of just checking /my_fs, df iterates through every mounted filesystem with a statx e.g.
statx(AT_FDCWD, "/data/something", AT_STATX_SYNC_AS_STAT, STATX_ALL, {stx_mask=STATX_BASIC_STATS, stx_attributes=0, stx_mode=S_IFDIR|0755, stx_size=4096, ...}) = 0
This may be fine with only a few mounts, but when a system has hundreds of mounts it can take some time to return results when the system is under load and run for the first time. gnu df also had this/similar problem but was addressed a long time ago I believe. Wondering if there was a way to only iterate the mount of interest and skip the rest in this case?
Maybe pull request #3161 will resolve this issue?
I don't believe it does - I grabbed the latest git version - same problem, Then grabbed the updated df.rs file from the above out of tree and it also shows the same behaviour.
I think this issue is not specific to df. This issue is created because when uucore::fsext::read_fs_list is invoked, it will create a mount entry for every line read from mtab file and while creation it will call set_missing_fields() which calls std::fs::metadata() for each entry read from mount_info. This will internally make a syscall statx.
Refer to this section of code -> https://github.com/uutils/coreutils/blob/main/src/uucore/src/lib/features/fsext.rs#L150-L163
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.
This ticket may not have seen any recent activity however it's still an issue at 0.0.30 - gnu df -h responds instantly (0m0.116s), rust df -h takes many minutes to respond on a system with 100's of mount points (~900 in this case, it's been 5 minutes and still no response.).
could you please run it with samply and share the execution profile ? :) thanks
@OH-AU please upload it directly in the firefox profiler. the json you shared doesn't have any symbol. see: https://share.firefox.dev/41BZVHQ
https://share.firefox.dev/3XXyoPR ?