git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 2/4] fsmonitor: Don't bother pretty-printing JSON from watchman

From
AVAlex Vandiver <alexmv@dropbox.com>
Date
Oct 26, 2017, 00:44 UTC
Message-ID
<alpine.DEB.2.10.1710251722310.9817@alexmv-linux>
In-Reply-To
<c43315f3-4155-6b07-bde2-5855dceacf80@gmail.com>
On Fri, 20 Oct 2017, Ben Peart wrote:
Show 12 quoted lines
> > While I am very much infavor of this change (I was not aware of the
> > --no-pretty option), I would like to see some statistics on that. Could
> > you measure the impact, please, and include the results in the commit
> > message?
> > 
> > Ciao,
> > Johannes
> > 
> 
> I was also unaware of the --no-pretty option. I've tested this on Windows
> running version 4.9.0 of Watchman and verified that it does work correctly.
> I'm also curious if it produces any measurable difference in performance.

On a repository with ~160k files, the following test harness, which requests all files inside the repository and parses that output:

--------------8<----------- #!/usr/bin/perl

use strict; use warnings; use IPC::Open2;

my $pid = open2(\*CHLD_OUT, \*CHLD_IN, "watchman -j @ARGV")
    or die "open2() failed: $!\n" .
    "Falling back to scanning...\n";
my $query = qq|["query", "$ENV{PWD}", {}]|;

print CHLD_IN $query; close CHLD_IN; my $response = do {local $/; <CHLD_OUT>};

my $json_pkg;
eval {
    require JSON::XS;
    $json_pkg = "JSON::XS";
    1;
} or do {
    require JSON::PP;
    $json_pkg = "JSON::PP";
};

my $o = $json_pkg->new->utf8->decode($response); --------------8<-----------

...run with dumbbench[1], produces:
    $ dumbbench -- ./test.pl
    cmd: Ran 22 iterations (2 outliers).
    cmd: Rounded run time per iteration: 5.240e+00 +/- 1.1e-02 (0.2%)
    $ dumbbench -- ./test.pl --no-pretty
    cmd: Ran 21 iterations (1 outliers).
    cmd: Rounded run time per iteration: 4.866e+00 +/- 1.3e-02 (0.3%)

...so a modest 8% speedup. I note that those numbers are for a perl with JSON::XS installed; without it installed, the runtime is so long that I gave up waiting for it.

Anyways, I'll put that in the commit message in the re-roll.
 - Alex
[1] https://metacpan.org/release/Dumbbench
Previous: Ben PeartNext: Johannes Schindelin
Message 5 of 21 in “fsmonitor fixes”
  1. 0/4 fsmonitor fixesAlex Vandiver, Oct 20, 2017
  2. 2/4 fsmonitor: Don't bother pretty-printing JSON from watchmanAlex Vandiver, Oct 20, 2017
  3. Johannes SchindelinOct 20, 2017
  4. Ben PeartOct 20, 2017
  5. Alex VandiverOct 26, 2017
  6. Johannes SchindelinOct 27, 2017
  7. 3/4 fsmonitor: Document GIT_TRACE_FSMONITORAlex Vandiver, Oct 20, 2017
  8. Ben PeartOct 20, 2017
  9. 4/4 fsmonitor: Delay updating state until after split index is mergedAlex Vandiver, Oct 20, 2017
  10. Johannes SchindelinOct 20, 2017
  11. Ben PeartOct 20, 2017
  12. Junio C HamanoOct 21, 2017
  13. Jeff KingOct 21, 2017
  14. Johannes SchindelinOct 23, 2017
  15. Ben PeartOct 23, 2017
  16. Alex VandiverOct 26, 2017
  17. 1/4 fsmonitor: Watch, and ask about, the top of the repo, not the CWDAlex Vandiver, Oct 20, 2017
  18. Johannes SchindelinOct 20, 2017
  19. Alex VandiverOct 26, 2017
  20. Johannes SchindelinOct 27, 2017
  21. Johannes SchindelinOct 20, 2017

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.