Re: [PATCH v2 3/8] coccicheck: add indexing enhancement options

2016-06-17 Thread Julia Lawall
On Fri, 17 Jun 2016, Luis R. Rodriguez wrote:

> On Fri, Jun 17, 2016 at 11:47:25AM +0200, Julia Lawall wrote:
> >
> >
> > On Thu, 16 Jun 2016, Luis R. Rodriguez wrote:
> >
> > > Coccinelle has support to make use of its own enhanced "grep"
> > > mechanisms instead of using regular grep for searching code,
> > > it calls this 'coccigrep'. In lack of any indexing optimization
> > > information it uses --use-coccigrep by default.
> > >
> > > This patch enable indexing optimizations heuristics so that coccigrep
> > > can automatically detect what indexing options are available and use
> > > them accordinly without any user input.
> > >
> > > Since git has its own index, support for using 'git grep' has been
> > > added to Coccinelle, that should on average perform better than
> > > using the internal coccigrep. Coccinelle has had idutils support
> > > as well for a while now, you however need to refer to the index
> > > file. We support detecting two idutils index files by default,
> > > ID and .id-utils.index, assuming you ran either of:
> > >
> > >  # What you might have done:
> > > mkid -s
> > >  # as in coccinelle scripts/idutils_index.sh
> > > mkid -i C --output .id-utils.index *
> > >
> > > Lastly, Coccinelle has had support for glimpseindex for a long while,
> > > however the glimpseindex tool, the agrep library were previously closed
> > > source, its all now open sourced, and provides the best performance, so
> > > support that if we can detect you have a glimpse index.
> > >
> > > You can always override the index as follows:
> > >
> > > $ make coccicheck V=1 MODE=report COCCI_INDEX="--use-idutils ID"
> >
> > Why not just have a generic COCCI_ARGS argument?
>
> Actually SPFLAGS exists already so we can just document to
> override using that. Will fix.

That seems like a good solution.

julia


Re: [PATCH v2 3/8] coccicheck: add indexing enhancement options

2016-06-17 Thread Luis R. Rodriguez
On Fri, Jun 17, 2016 at 11:47:25AM +0200, Julia Lawall wrote:
> 
> 
> On Thu, 16 Jun 2016, Luis R. Rodriguez wrote:
> 
> > Coccinelle has support to make use of its own enhanced "grep"
> > mechanisms instead of using regular grep for searching code,
> > it calls this 'coccigrep'. In lack of any indexing optimization
> > information it uses --use-coccigrep by default.
> >
> > This patch enable indexing optimizations heuristics so that coccigrep
> > can automatically detect what indexing options are available and use
> > them accordinly without any user input.
> >
> > Since git has its own index, support for using 'git grep' has been
> > added to Coccinelle, that should on average perform better than
> > using the internal coccigrep. Coccinelle has had idutils support
> > as well for a while now, you however need to refer to the index
> > file. We support detecting two idutils index files by default,
> > ID and .id-utils.index, assuming you ran either of:
> >
> >  # What you might have done:
> > mkid -s
> >  # as in coccinelle scripts/idutils_index.sh
> > mkid -i C --output .id-utils.index *
> >
> > Lastly, Coccinelle has had support for glimpseindex for a long while,
> > however the glimpseindex tool, the agrep library were previously closed
> > source, its all now open sourced, and provides the best performance, so
> > support that if we can detect you have a glimpse index.
> >
> > You can always override the index as follows:
> >
> > $ make coccicheck V=1 MODE=report COCCI_INDEX="--use-idutils ID"
> 
> Why not just have a generic COCCI_ARGS argument?

Actually SPFLAGS exists already so we can just document to
override using that. Will fix.

  Luis


Re: [PATCH v2 3/8] coccicheck: add indexing enhancement options

2016-06-17 Thread Julia Lawall


On Thu, 16 Jun 2016, Luis R. Rodriguez wrote:

> Coccinelle has support to make use of its own enhanced "grep"
> mechanisms instead of using regular grep for searching code,
> it calls this 'coccigrep'. In lack of any indexing optimization
> information it uses --use-coccigrep by default.
>
> This patch enable indexing optimizations heuristics so that coccigrep
> can automatically detect what indexing options are available and use
> them accordinly without any user input.
>
> Since git has its own index, support for using 'git grep' has been
> added to Coccinelle, that should on average perform better than
> using the internal coccigrep. Coccinelle has had idutils support
> as well for a while now, you however need to refer to the index
> file. We support detecting two idutils index files by default,
> ID and .id-utils.index, assuming you ran either of:
>
>  # What you might have done:
> mkid -s
>  # as in coccinelle scripts/idutils_index.sh
> mkid -i C --output .id-utils.index *
>
> Lastly, Coccinelle has had support for glimpseindex for a long while,
> however the glimpseindex tool, the agrep library were previously closed
> source, its all now open sourced, and provides the best performance, so
> support that if we can detect you have a glimpse index.
>
> You can always override the index as follows:
>
> $ make coccicheck V=1 MODE=report COCCI_INDEX="--use-idutils ID"

Why not just have a generic COCCI_ARGS argument?

julia


> These tests have been run on an 8 core system:
>
> Before:
>
> $ export COCCI=scripts/coccinelle/misc/irqf_oneshot.cocci
> $ time make coccicheck MODE=report
>
> coccigrep (default and without this patch):
> real0m16.369s
> user0m58.712s
> sys 0m5.064s
>
> After:
>
> $ export COCCI=scripts/coccinelle/misc/irqf_oneshot.cocci
> $ time make coccicheck MODE=report
>
> With glimpse:
> real0m6.549s
> user0m49.136s
> sys 0m3.076s
>
> With idutils:
> real0m6.749s
> user0m51.936s
> sys 0m3.876s
>
> With gitgrep:
> real0m6.805s
> user0m51.572s
> sys 0m4.432s
>
> v2 changes:
>
> o simplify DIR assignment to 1 line
> o detected a bug when KBUILD_EXTMOD is used other than the parent
>   directory for both glimpse and idutils, so we avoid both when
>   M=path/driver/ is used. This is being looked into upstream on
>   Coccinelle.
> o move indexing heuristics to a file
> o document logic used for indexing
> o add idutils support, supports two indexing files
> o remove coccigrep heuristics as its the default anyway
> o add COCCI_INDEX to enable overriding heuristics, you can use this
>   as follows, for example:
> o replace references to stderr file with DEBUG_FILE use instructions
>
> $ export COCCI=scripts/coccinelle/misc/irqf_oneshot.cocci
> $ make coccicheck V=1 MODE=report COCCI_INDEX="--use-coccigrep"
> $ make coccicheck V=1 MODE=report COCCI_INDEX="--use-idutils ID"
> $ make coccicheck V=1 MODE=report COCCI_INDEX="--use-glimpse"
> $ make coccicheck V=1 MODE=report COCCI_INDEX="--use-gitgrep"
>
> Signed-off-by: Luis R. Rodriguez 
> ---
>  scripts/coccicheck | 150 
> +
>  1 file changed, 150 insertions(+)
>
> diff --git a/scripts/coccicheck b/scripts/coccicheck
> index 7acef3efc258..30f5a531ad34 100755
> --- a/scripts/coccicheck
> +++ b/scripts/coccicheck
> @@ -5,6 +5,7 @@
>  # version 1.0.0-rc11.
>  #
>
> +DIR="$(dirname $(readlink -f $0))/.."
>  SPATCH="`which ${SPATCH:=spatch}`"
>
>  if [ ! -x "$SPATCH" ]; then
> @@ -15,6 +16,134 @@ fi
>  USE_JOBS="no"
>  $SPATCH --help | grep "\-\-jobs" > /dev/null && USE_JOBS="yes"
>
> +function can_use_glimpse()
> +{
> + $SPATCH --help | grep "\-\-use\-glimpse" > /dev/null
> + if [ $? -ne 0 ]; then
> + echo "no"
> + return
> + fi
> + if [ ! -f $DIR/.glimpse_index ]; then
> + echo "no"
> + return
> + fi
> +
> + # As of coccinelle 1.0.5 --use-glimpse cannot be used with M= other
> + # than the base directory. We expect a future release will let us
> + # specify the full path of the glimpse index but even if that's
> + # supported, glimpse use seems to require an index per every
> + # directory parsed, so you'd have to generate a glimpse index
> + # per directory. If M=path is used (where epath is not the top level)
> + # we'll have to fallback to alternatives then.
> + if [ "$KBUILD_EXTMOD" != "./" -a "$KBUILD_EXTMOD" != "" ]; then
> + echo "no"
> + return
> + fi
> + echo yes
> +}
> +
> +function can_use_idutils()
> +{
> + $SPATCH --help | grep "\-\-use\-idutils" > /dev/null
> + if [ $? -ne 0 ]; then
> + echo "no"
> + return
> + fi
> + # As of coccinelle 1.0.5 --use-idutils will bust if one uses
> + # idutils with an index out of the main tree.
> + if [ "$KBUILD_EXTMOD" != "./" -a "$KBUILD_EXTMOD" != "" ]; then
> + echo "no"
> + return
> + fi
> +