Skip to content

create_dir_all performs a quadradic number of system calls #51

Description

@sunfishcode

create_dir_all uses the algorithm from libstd for recursively creating all components. However, cap-primitives' mkdir function performs a system call per path component per call, so calling it once per path component leads to a quadratic number of system calls.

We should add a create_dir_all function in cap-primitives which, for each path component, creates a directory for that component (ignoring a io::ErrorKind::AlreadyExists error), opens the newly created directory, and then uses the resulting handle as the base for handling the next component.

Similar to open_manually, it should handle .. components by keeping a stack of handles as it goes, so that it can simply pop an entry from that stack to ascend to the parent.

And then, the cap-std and cap-async-std create_dir_all routines can use it.

Activity

  1. sunfishcode commented on Jul 27, 2020

    @sunfishcode
    OwnerAuthor

    We should also think about adding a function which creates a directory and opens it as a new Dir, for the common case where one does create_dir_all followed by open_dir. If create_dir_all opens the intermediate directories as it goes, then the final open_dir could open just the last component instead of the full path.

  2. 0xIO32 commented on Nov 8, 2024

    @0xIO32

    No activity in this issue since 4 years ... Is it still being worked on?

  3. sunfishcode commented on Nov 8, 2024

    @sunfishcode
    OwnerAuthor

    I'm not aware of anyone actively working on it at this time.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions