unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Eli Zaretskii <eliz@gnu.org>
To: Bastian Beischer <bastian.beischer@rwth-aachen.de>
Cc: alexharsanyi@gmail.com, emacs-devel@gnu.org
Subject: Re: vc-dir operation is very slow on large git repositories in Emacs 26.1
Date: Mon, 25 Jun 2018 18:17:44 +0300	[thread overview]
Message-ID: <83lgb2sxnr.fsf@gnu.org> (raw)
In-Reply-To: <CAK9AuB8-bB_UVzqKy63ZAvuQDc1FxxJ+VWe5GxxXCKt4bDf41w@mail.gmail.com> (message from Bastian Beischer on Mon, 25 Jun 2018 13:09:37 +0200)

> From: Bastian Beischer <bastian.beischer@rwth-aachen.de>
> Date: Mon, 25 Jun 2018 13:09:37 +0200
> Cc: Eli Zaretskii <eliz@gnu.org>, Emacs-Devel <emacs-devel@gnu.org>
> 
> >From these timings it appears that you have been using a 4096 byte
> buffer.

Yes, the default buffer size of a pipe on Windows is 4KB.

> Assume that all the delay in the 83.7 seconds is due to 50ms waits,
> one such wait whenever the buffer is full. This is based on the fact
> that you observe a ~proportional slowdown when increasing the
> read-delay. Then this means that the buffer was full 1674 times, which
> means that the buffer size is 6.5 MB / 1674 = 4071 - approx. 4096
> bytes. So the predicted approximate delay for a message of size S is
> 
> D = (S / B) * W
> 
> where B is the buffer size (4096) and W is the w32-pipe-read-delay
> (0.05 s). Based on that logic it appears that setting
> w32-pipe-buffer-size to 16384 should give you a ~four times smaller
> total delay - especially when w32-pipe-read-delay is 50 ms, for
> example. Unless the OS refuses to provide you with such a buffer size?

I think you ignore a few factors here.  Are you familiar with how
Emacs on Windows reads data from async subprocesses?  If not, I
suggest to read the large comment around line 800 of w32proc.c and
study the code it describes.

With 50-msec delay, it is reasonable to assume that the pipe's buffer
gets filled while the reader thread waits for 50 msec, so most of the
time is indeed due to these waits.  But with zero waits, its quite
possible that Emacs reads the stuff from the pipe as fast as Git
writes to its other end, because the reading can begin very soon after
the first byte is written to the pipe (in reality, writes are
probably buffered, so the first chunk is much larger than 1 byte).  If
Emacs empties the pipe as fast as Git writes to it or faster, the size
of the pipe will have (almost) no effect whatsoever.

> Unless the OS refuses to provide you with such a buffer size?

No, there should be no such problem.

Enlarging the pipe buffer size is (IME) only needed when Emacs needs
to _write_ large amounts of data to the subprocesses, and the
subprocesses doesn't keep up.  We write to the pipe in the main
thread, so with small enough buffer and slow enough reading by the
subprocesses will eventually cause Emacs to hang, which is not really
user-friendly.  See bug#22344 and bug#24143, for example.



  parent reply	other threads:[~2018-06-25 15:17 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-06-20 10:50 vc-dir operation is very slow on large git repositories in Emacs 26.1 Alex Harsanyi
2018-06-20 15:51 ` Eli Zaretskii
2018-06-20 22:33   ` Alex Harsanyi
2018-06-21 14:32     ` Eli Zaretskii
2018-06-22  1:12       ` Alex Harsanyi
2018-06-22  8:57         ` Eli Zaretskii
2018-06-22  9:46           ` Alex Harsanyi
2018-06-22 12:46           ` Alex Harsanyi
2018-06-22 18:24             ` Eli Zaretskii
2018-06-22 20:43               ` w32-pipe-read-delay (was: vc-dir operation is very slow on large git repositories in Emacs 26.1) Stefan Monnier
2018-06-23  7:21                 ` Eli Zaretskii
     [not found]                   ` <CAH-ciFrCk=pVTDUA+8F1XZSK40Wr21yzz3u=mutJ0NM3UdojNw@mail.gmail.com>
2018-06-23 13:30                     ` Fwd: " Alex Harsanyi
2018-06-23 13:32                       ` Alex Harsanyi
2018-06-23 13:40                         ` Eli Zaretskii
2018-06-23 14:00                           ` Alex Harsanyi
2018-06-23 14:31                             ` Eli Zaretskii
2018-06-30  8:46                               ` Eli Zaretskii
2018-06-25 10:40               ` vc-dir operation is very slow on large git repositories in Emacs 26.1 Alex Harsanyi
2018-06-25 11:09                 ` Bastian Beischer
2018-06-25 12:23                   ` Alex Harsanyi
2018-06-25 15:17                   ` Eli Zaretskii [this message]
2018-06-25 15:44                     ` Bastian Beischer
2018-06-25 16:23                       ` Eli Zaretskii
2018-06-25 22:28                         ` Alex Harsanyi
2018-06-25 14:51                 ` Eli Zaretskii
2018-06-22  9:04   ` Dmitry Gutov
2018-06-23 13:37     ` Eli Zaretskii
2018-06-23 18:28       ` Dmitry Gutov
2018-06-23 18:44         ` Eli Zaretskii
2018-06-25 12:55           ` Dmitry Gutov
2018-06-25 15:20             ` Eli Zaretskii
2018-06-26 15:14               ` Sergey Organov
2018-06-27  2:01                 ` Dmitry Gutov
2018-06-27  2:49                   ` Tom Tromey
2018-06-27  9:41                     ` Dmitry Gutov
2018-06-27 15:12                       ` Eli Zaretskii
2018-06-28  0:30                         ` Dmitry Gutov
2018-06-28 12:55                           ` Eli Zaretskii
2018-06-28 13:06                             ` Dmitry Gutov
2018-06-28 13:12                               ` Eli Zaretskii
2018-06-28 13:18                                 ` Dmitry Gutov
2018-06-28 13:38                                   ` Eli Zaretskii
2018-06-28 13:47                                     ` Dmitry Gutov
2018-06-28 14:00                                       ` Eli Zaretskii
2018-06-28 13:21                       ` Sergey Organov
2018-06-28 13:28                         ` Dmitry Gutov

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

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=83lgb2sxnr.fsf@gnu.org \
    --to=eliz@gnu.org \
    --cc=alexharsanyi@gmail.com \
    --cc=bastian.beischer@rwth-aachen.de \
    --cc=emacs-devel@gnu.org \
    /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.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

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 read-only IMAP folder(s) and NNTP newsgroup(s).