From: Johannes Sixt <j6t@kdbg.org>
To: marius@trolltech.com
Cc: git@vger.kernel.org, msysgit@googlegroups.com
Subject: Re: [msysGit] [PATCH] MinGW readdir reimplementation to support d_type
Date: Thu, 09 Apr 2009 22:34:38 +0200 [thread overview]
Message-ID: <49DE5BDE.9050709@kdbg.org> (raw)
In-Reply-To: <1239224507-5372-1-git-send-email-marius@trolltech.com>
Marius Storm-Olsen schrieb:
> The original readdir implementation was fast, but didn't
> support the d_type. This means that git would do additional
> lstats for each entry, to figure out if the entry was a
> directory or not. This unneedingly slowed down many
> operations, since Windows API provides this information
> directly when walking the directories.
>
> By running this implementation on Moe's repo structure:
> mkdir bummer && cd bummer; for ((i=0;i<100;i++)); do
> mkdir $i && pushd $i;
> for ((j=0;j<1000;j++)); do echo "$j" >$j; done;
> popd;
> done
>
> We see the following speedups:
> git add .
> -------------------
> old: 00:00:23(.087)
> new: 00:00:21(.512) 1.07x
>
> git status
> -------------------
> old: 00:00:03(.306)
> new: 00:00:01(.684) 1.96x
>
> git clean -dxf
> -------------------
> old: 00:00:01(.918)
> new: 00:00:00(.295) 6.50x
Well done!
> +struct mingw_dirent
> +{
> + long d_ino; /* Always zero. */
> + union {
> + unsigned short d_reclen; /* Always zero. */
> + unsigned char d_type; /* Reimplementation adds this */
> + };
VERY sneaky! I was wondering why you could get away without replacing
opendir and closedir, and why you still defined a replacement mingw_DIR
that contains the replacement mingw_dirent, until I noticed this unnamed
union.
Since we don't use d_reclen anywhere in the code, wouldn't you get away with
#define d_type d_reclen
unless the type (short vs. char) makes a difference. Or would you say that
doing that would be even more sneaky?
> + unsigned short d_namlen; /* Length of name in d_name. */
> + char d_name[FILENAME_MAX]; /* File name. */
> +};
> +#define dirent mingw_dirent
> +#define readdir(x) mingw_readdir(x)
> +#endif // !NO_MINGW_REPLACE_READDIR
-- Hannes
next prev parent reply other threads:[~2009-04-09 20:36 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-04-08 21:01 [PATCH] MinGW readdir reimplementation to support d_type Marius Storm-Olsen
2009-04-09 20:34 ` Johannes Sixt [this message]
2009-04-10 7:50 ` Marius Storm-Olsen
2009-04-11 21:44 ` Johannes Sixt
2009-05-07 21:26 ` Heiko Voigt
2009-05-08 5:45 ` Marius Storm-Olsen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=49DE5BDE.9050709@kdbg.org \
--to=j6t@kdbg.org \
--cc=git@vger.kernel.org \
--cc=marius@trolltech.com \
--cc=msysgit@googlegroups.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).