git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: "SZEDER Gábor" <szeder.dev@gmail.com>
To: Markus Elfring <Markus.Elfring@web.de>
Cc: "René Scharfe" <l.s.r@web.de>,
	git@vger.kernel.org, "Jeff King" <peff@peff.net>
Subject: Re: coccinelle: improve array.cocci
Date: Fri, 22 Nov 2019 16:29:50 +0100	[thread overview]
Message-ID: <20191122152950.GZ23183@szeder.dev> (raw)
In-Reply-To: <06ff24b6-f154-9ec6-7b22-05b0ea664a36@web.de>

On Thu, Nov 21, 2019 at 08:44:12PM +0100, Markus Elfring wrote:
> The program “spatch” supports parallelisation also directly by the parameter “--jobs”.
> Did you try it out occasionally?

I did try --jobs on a couple of occasions, and the results always
varied between broken, not working, or downright making things even
slower.


  $ spatch --version
  spatch version 1.0.4 with Python support and with PCRE support
  $ spatch --sp-file contrib/coccinelle/array.cocci --all-includes --patch . --jobs 2 alias.c alloc.c
  init_defs_builtins: /usr/lib/coccinelle/standard.h
  HANDLING: alias.c alloc.c
  Fatal error: exception Sys_error("array: No such file or directory")

This issue seems to be fixed in later versions, but this is the
version what many distros still ship and what is used in our CI
builds, so we do care about 1.0.4.


  $ spatch --version
  spatch version 1.0.8 compiled with OCaml version 4.05.0
  Flags passed to the configure script: [none]
  OCaml scripting support: yes
  Python scripting support: yes
  Syntax of regular expressions: PCRE
  $ /usr/bin/time --format='%e | %M' make contrib/coccinelle/array.cocci.patch
      SPATCH contrib/coccinelle/array.cocci
  102.06 | 129084

Our Makefile recipes run Coccinelle in a sequential loop, one 'spatch'
invocation for each source file by default.  Therefore, merely passing
in '--jobs <N>' doesn't bring any runtime benefits:

  $ /usr/bin/time --format='%e | %M' make SPATCH_FLAGS='--all-includes --patch . --jobs 8' contrib/coccinelle/array.cocci.patch
      SPATCH contrib/coccinelle/array.cocci
  105.31 | 118512

Some time ago we found that invoking 'spatch' with multiple files at
once does bring notable speedup (with 1.0.4), although at the cost of
drastically increased memory footprint, see commit 960154b9c1
(coccicheck: optionally batch spatch invocations, 2019-05-06).  Alas,
trying to use that in the hope that 'spatch' can do more in parallel
if it has more files to process at once doesn't bring any runtime
benefits, either:

  $ /usr/bin/time --format='%e | %M' make SPATCH_FLAGS='--all-includes --patch . --jobs 8' SPATCH_BATCH_SIZE=8 contrib/coccinelle/array.cocci.patch
      SPATCH contrib/coccinelle/array.cocci
  116.27 | 349964

And by further increasing the batch size it just gets notably slower;
also note the order of magnitude higher max memory usage:

  $ /usr/bin/time --format='%e | %M' make SPATCH_FLAGS='--all-includes --patch . --jobs 8' SPATCH_BATCH_SIZE=32 contrib/coccinelle/array.cocci.patch
      SPATCH contrib/coccinelle/array.cocci
  197.70 | 1205784

It appears that batching 'spatch' invocations with 1.0.8 does not
bring the same benefits as with 1.0.4, but brings slowdowns instead...

Anyway, looking at 'ps u -L' output it appears that 'spatch' doesn't
really do any parallel work, and there are only two 'spatch' processes
and no threads despite '--jobs 8':

  szeder    2561  0.4  0.5  36944 21520 pts/0    S+   15:31   0:00 spatch
  szeder    2567 97.1 30.5 1228372 1205332 pts/0 R+   15:31   0:29 spatch


Note that 1.0.8 above was run in a Docker container, while 1.0.4 on
the host.  This may or may not have influenced the runtimes reported
above.  FWIW, 'make -j4 coccicheck' parallelizes just fine even in the
container and with 1.0.8.


A different approach relying on 'make -j' to parallelize 'spatch'
invocations was discussed here:

  https://public-inbox.org/git/20180802115522.16107-1-szeder.dev@gmail.com/T/#u


  reply	other threads:[~2019-11-22 15:29 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-11-12 15:08 coccinelle: adjustments for array.cocci? Markus Elfring
2019-11-12 18:37 ` René Scharfe
2019-11-13  2:11   ` Junio C Hamano
2019-11-13  8:49     ` Markus Elfring
2019-11-14  2:03       ` Junio C Hamano
2019-11-14 13:15         ` Markus Elfring
2019-11-14 16:41           ` René Scharfe
2019-11-14 17:14             ` Markus Elfring
2019-11-14 17:46               ` René Scharfe
2019-11-15 11:11                 ` git-coccinelle: " Markus Elfring
2019-11-15 14:20                   ` Markus Elfring
2019-11-15 18:50                   ` Markus Elfring
2019-11-16  1:00                     ` [Cocci] " Julia Lawall
2019-11-16  6:57                       ` Markus Elfring
2019-11-16  8:29                       ` Markus Elfring
2019-11-16 17:57                   ` Julia Lawall
2019-11-16 18:29                     ` Markus Elfring
2019-11-15 20:37   ` coccinelle: " Markus Elfring
2019-11-16 21:13     ` René Scharfe
2019-11-17  7:56       ` Markus Elfring
2019-11-17 13:40         ` René Scharfe
2019-11-17 18:19           ` Markus Elfring
2019-11-19 19:14             ` René Scharfe
2019-11-19 20:21               ` Markus Elfring
2019-11-21 19:01                 ` René Scharfe
2019-11-16 16:33   ` Markus Elfring
2019-11-16 21:38     ` René Scharfe
2019-11-17  8:19       ` Markus Elfring
2019-11-17 13:40         ` René Scharfe
2019-11-17 18:36           ` Markus Elfring
2019-11-19 19:15             ` René Scharfe
2019-11-18 16:10           ` [PATCH] coccinelle: improve array.cocci Markus Elfring
2019-11-19 19:15             ` René Scharfe
2019-11-20  9:01               ` Markus Elfring
2019-11-21 19:02                 ` René Scharfe
2019-11-21 19:44                   ` Markus Elfring
2019-11-22 15:29                     ` SZEDER Gábor [this message]
2019-11-22 16:17                       ` Markus Elfring
2019-11-22  5:54               ` [PATCH] " Junio C Hamano
2019-11-22  7:34                 ` Markus Elfring
2020-01-25  8:23             ` Markus Elfring

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: http://vger.kernel.org/majordomo-info.html

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

  git send-email \
    --in-reply-to=20191122152950.GZ23183@szeder.dev \
    --to=szeder.dev@gmail.com \
    --cc=Markus.Elfring@web.de \
    --cc=git@vger.kernel.org \
    --cc=l.s.r@web.de \
    --cc=peff@peff.net \
    /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://80x24.org/mirrors/git.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).