[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[bug #48169] find makes unnecessary syscalls

From: Tavian Barnes
Subject: [bug #48169] find makes unnecessary syscalls
Date: Sun, 4 Dec 2016 05:18:14 +0000 (UTC)
User-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.100 Safari/537.36

Follow-up Comment #2, bug #48169 (project findutils):

> Is there are measurable performance difference?

Hard to say.  find is now much better at avoiding stat() calls on
non-directories, so it's overall faster.

Anyway I tracked down where some of these are coming from.  First off, the
unused F_DUPFD_CLOEXEC comes from ftsfind.c doing

    curr_fd = dup_cloexec (dir_fd);

But curr_fd isn't actually *used* for anything any more, so it could be

The duplicate stat comes from fts.c:

    /* Now read the stat info again after opening a directory to
       reveal eventual changes caused by a submount triggered by
       the traversal.  But do it only for utilities which use
       FTS_TIGHT_CYCLE_CHECK.  Therefore, only find and du
       benefit/suffer from this feature for now.  */
    LEAVE_DIR (sp, cur, "4");
    fts_stat (sp, cur, false);

so I guess that is necessary for automounts.  But maybe it's possible to avoid
stat'ing before it's  opened?

fts.c could use dup_cloexec here:

    dir_fd = dup (dir_fd);
    if (0 <= dir_fd)
      set_cloexec_flag (dir_fd, true);

And finally, fts.c's opendirat() could pass O_CLOEXEC to openat() to avoid the
set_cloexec_flag() call.


Reply to this item at:


  Message sent via/by Savannah

reply via email to

[Prev in Thread] Current Thread [Next in Thread]