* [Cocci] [PATCH] Coccinelle: null: Optimise disjunctions in SmPL script “eno.cocci” @ 2020-10-25 18:01 Markus Elfring 2020-10-25 18:28 ` Julia Lawall 0 siblings, 1 reply; 7+ messages in thread From: Markus Elfring @ 2020-10-25 18:01 UTC (permalink / raw) To: Coccinelle, Gilles Muller, Julia Lawall, Michal Marek, Nicolas Palix Cc: kernel-janitors, linux-kernel From: Markus Elfring <elfring@users.sourceforge.net> Date: Sun, 25 Oct 2020 18:54:36 +0100 A disjunction is applied by this script for the semantic patch language. This construct uses short-circuit evaluation. It has got the consequence that the last element of the specified condition will only be checked if all previous parts did not match. Such a technical detail leads to a recommended ordering of condition parts if you would like to care for optimal run time characteristics of SmPL code. An usage incidence was determined for the specified identifiers in source files from the software “Linux next-20201023” by another SmPL script. See also: Determination of an usage statistic for memory allocation calls https://lore.kernel.org/cocci/2774601.u91sIFNy1E@sonne/ This analysis result indicates a clear ranking for such function calls. Thus reorder the SmPL disjunction items according to their usage incidence. Signed-off-by: Markus Elfring <elfring@users.sourceforge.net> --- scripts/coccinelle/null/eno.cocci | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/scripts/coccinelle/null/eno.cocci b/scripts/coccinelle/null/eno.cocci index 81584ff87956..969cab5116a9 100644 --- a/scripts/coccinelle/null/eno.cocci +++ b/scripts/coccinelle/null/eno.cocci @@ -17,8 +17,16 @@ virtual report @depends on patch@ expression x,E; @@ - -x = \(kmalloc\|kzalloc\|kcalloc\|kmem_cache_alloc\|kmem_cache_zalloc\|kmem_cache_alloc_node\|kmalloc_node\|kzalloc_node\)(...) + x = +(kzalloc +|kmalloc +|kcalloc +|kmem_cache_alloc +|kmem_cache_zalloc +|kzalloc_node +|kmalloc_node +|kmem_cache_alloc_node +)(...) ... when != x = E - IS_ERR(x) + !x @@ -27,8 +35,7 @@ x = \(kmalloc\|kzalloc\|kcalloc\|kmem_cache_alloc\|kmem_cache_zalloc\|kmem_cache expression x,E; position p1,p2; @@ - -*x = \(kmalloc@p1\|kzalloc@p1\|kcalloc@p1\|kmem_cache_alloc@p1\|kmem_cache_zalloc@p1\|kmem_cache_alloc_node@p1\|kmalloc_node@p1\|kzalloc_node@p1\)(...) +*x = \(kzalloc@p1\|kmalloc@p1\|kcalloc@p1\|kmem_cache_alloc@p1\|kmem_cache_zalloc@p1\|kzalloc_node@p1\|kmalloc_node@p1\|kmem_cache_alloc_node@p1\)(...) ... when != x = E * IS_ERR@p2(x) -- 2.29.1 _______________________________________________ Cocci mailing list Cocci@systeme.lip6.fr https://systeme.lip6.fr/mailman/listinfo/cocci ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [Cocci] [PATCH] Coccinelle: null: Optimise disjunctions in SmPL script “eno.cocci” 2020-10-25 18:01 [Cocci] [PATCH] Coccinelle: null: Optimise disjunctions in SmPL script “eno.cocci” Markus Elfring @ 2020-10-25 18:28 ` Julia Lawall 2020-10-25 18:45 ` [Cocci] " Markus Elfring 0 siblings, 1 reply; 7+ messages in thread From: Julia Lawall @ 2020-10-25 18:28 UTC (permalink / raw) To: Markus Elfring Cc: Michal Marek, Gilles Muller, Nicolas Palix, kernel-janitors, linux-kernel, Coccinelle [-- Attachment #1: Type: text/plain, Size: 2983 bytes --] On Sun, 25 Oct 2020, Markus Elfring wrote: > From: Markus Elfring <elfring@users.sourceforge.net> > Date: Sun, 25 Oct 2020 18:54:36 +0100 > > A disjunction is applied by this script for the semantic patch language. > This construct uses short-circuit evaluation. It has got the consequence > that the last element of the specified condition will only be checked > if all previous parts did not match. Such a technical detail leads to > a recommended ordering of condition parts if you would like to care for > optimal run time characteristics of SmPL code. > > An usage incidence was determined for the specified identifiers in source > files from the software “Linux next-20201023” by another SmPL script. > > See also: > Determination of an usage statistic for memory allocation calls > https://lore.kernel.org/cocci/2774601.u91sIFNy1E@sonne/ > > This analysis result indicates a clear ranking for such function calls. > Thus reorder the SmPL disjunction items according to their usage incidence. Did you actually test this before and after the change and see a difference in performance? On my laptop, I see absolutely no difference, for the patch mode and for the context mode. I didn't try the other cases. Before the change: patch: 440.182u 2.049s 1:53.12 390.9% 0+0k 0+232io 4pf+0w context: 392.931u 2.164s 1:41.53 389.1% 0+0k 432+360io 5pf+0w After the change: patch: 442.182u 2.090s 1:54.13 389.2% 0+0k 0+240io 4pf+0w context: 392.742u 2.035s 1:41.37 389.4% 0+0k 0+360io 4pf+0w julia > > Signed-off-by: Markus Elfring <elfring@users.sourceforge.net> > --- > scripts/coccinelle/null/eno.cocci | 15 +++++++++++---- > 1 file changed, 11 insertions(+), 4 deletions(-) > > diff --git a/scripts/coccinelle/null/eno.cocci b/scripts/coccinelle/null/eno.cocci > index 81584ff87956..969cab5116a9 100644 > --- a/scripts/coccinelle/null/eno.cocci > +++ b/scripts/coccinelle/null/eno.cocci > @@ -17,8 +17,16 @@ virtual report > @depends on patch@ > expression x,E; > @@ > - > -x = \(kmalloc\|kzalloc\|kcalloc\|kmem_cache_alloc\|kmem_cache_zalloc\|kmem_cache_alloc_node\|kmalloc_node\|kzalloc_node\)(...) > + x = > +(kzalloc > +|kmalloc > +|kcalloc > +|kmem_cache_alloc > +|kmem_cache_zalloc > +|kzalloc_node > +|kmalloc_node > +|kmem_cache_alloc_node > +)(...) > ... when != x = E > - IS_ERR(x) > + !x > @@ -27,8 +35,7 @@ x = \(kmalloc\|kzalloc\|kcalloc\|kmem_cache_alloc\|kmem_cache_zalloc\|kmem_cache > expression x,E; > position p1,p2; > @@ > - > -*x = \(kmalloc@p1\|kzalloc@p1\|kcalloc@p1\|kmem_cache_alloc@p1\|kmem_cache_zalloc@p1\|kmem_cache_alloc_node@p1\|kmalloc_node@p1\|kzalloc_node@p1\)(...) > +*x = \(kzalloc@p1\|kmalloc@p1\|kcalloc@p1\|kmem_cache_alloc@p1\|kmem_cache_zalloc@p1\|kzalloc_node@p1\|kmalloc_node@p1\|kmem_cache_alloc_node@p1\)(...) > ... when != x = E > * IS_ERR@p2(x) > > -- > 2.29.1 > > _______________________________________________ > Cocci mailing list > Cocci@systeme.lip6.fr > https://systeme.lip6.fr/mailman/listinfo/cocci > [-- Attachment #2: Type: text/plain, Size: 136 bytes --] _______________________________________________ Cocci mailing list Cocci@systeme.lip6.fr https://systeme.lip6.fr/mailman/listinfo/cocci ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Cocci] Coccinelle: null: Optimise disjunctions in SmPL script “eno.cocci” 2020-10-25 18:28 ` Julia Lawall @ 2020-10-25 18:45 ` Markus Elfring 2020-10-25 18:56 ` Julia Lawall 0 siblings, 1 reply; 7+ messages in thread From: Markus Elfring @ 2020-10-25 18:45 UTC (permalink / raw) To: Julia Lawall, Coccinelle Cc: kernel-janitors, Michal Marek, Nicolas Palix, linux-kernel, Gilles Muller >> This analysis result indicates a clear ranking for such function calls. >> Thus reorder the SmPL disjunction items according to their usage incidence. > > Did you actually test this before and after the change and see a > difference in performance? Would you become interested to configure a representative test environment for safe comparisons of corresponding run time characteristics of the affected software? > On my laptop, I see absolutely no difference, > for the patch mode and for the context mode. Does such information trigger a desire to clarify involved aspects in more detail? Regards, Markus _______________________________________________ Cocci mailing list Cocci@systeme.lip6.fr https://systeme.lip6.fr/mailman/listinfo/cocci ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Cocci] Coccinelle: null: Optimise disjunctions in SmPL script “eno.cocci” 2020-10-25 18:45 ` [Cocci] " Markus Elfring @ 2020-10-25 18:56 ` Julia Lawall 2020-10-25 20:10 ` Markus Elfring 0 siblings, 1 reply; 7+ messages in thread From: Julia Lawall @ 2020-10-25 18:56 UTC (permalink / raw) To: Markus Elfring Cc: Michal Marek, Gilles Muller, Nicolas Palix, kernel-janitors, linux-kernel, Coccinelle On Sun, 25 Oct 2020, Markus Elfring wrote: > >> This analysis result indicates a clear ranking for such function calls. > >> Thus reorder the SmPL disjunction items according to their usage incidence. > > > > Did you actually test this before and after the change and see a > > difference in performance? > > Would you become interested to configure a representative test environment > for safe comparisons of corresponding run time characteristics > of the affected software? In what sense could the comparison possibly be unsafe? Just use time and run spatch on whatever machine you want. It's not that complicated. > > On my laptop, I see absolutely no difference, > > for the patch mode and for the context mode. > > Does such information trigger a desire to clarify involved aspects in more detail? Intel(R) Core(TM) i5-6200U CPU @ 2.30GHz julia _______________________________________________ Cocci mailing list Cocci@systeme.lip6.fr https://systeme.lip6.fr/mailman/listinfo/cocci ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Cocci] Coccinelle: null: Optimise disjunctions in SmPL script “eno.cocci” 2020-10-25 18:56 ` Julia Lawall @ 2020-10-25 20:10 ` Markus Elfring 2020-10-25 20:27 ` Julia Lawall 0 siblings, 1 reply; 7+ messages in thread From: Markus Elfring @ 2020-10-25 20:10 UTC (permalink / raw) To: Julia Lawall, Coccinelle Cc: kernel-janitors, Michal Marek, Nicolas Palix, linux-kernel, Gilles Muller >> Would you become interested to configure a representative test environment >> for safe comparisons of corresponding run time characteristics >> of the affected software? > > In what sense could the comparison possibly be unsafe? * Our test systems are obviously different. Thus concerns can be considered for reproducibility of test results on other possible configurations. * We share only a tiny fraction of technical information which would probably be needed for “benchmarks”. > Just use time and run spatch on whatever machine you want. fring@Sonne:~/Projekte/Linux/next-patched> elfring@Sonne:~/Projekte/Linux/next-patched> git checkout next-20201023 && XX=$(date) && time spatch -D patch --timeout 9 --jobs 4 --chunksize 1 --include-headers --no-includes --dir . scripts/coccinelle/null/eno.cocci > ~/Projekte/Bau/Linux/scripts/Coccinelle/call_checks/20201023/eno1.diff 2> ~/Projekte/Bau/Linux/scripts/Coccinelle/call_checks/20201023/eno1-errors.txt; YY=$(date) && echo "$XX | $YY" … real 2m54,266s user 10m15,553s sys 0m4,004s So 25. Okt 20:53:56 CET 2020 | So 25. Okt 20:56:51 CET 2020 elfring@Sonne:~/Projekte/Linux/next-patched> git checkout next-20201023 && XX=$(date) && time spatch -D context --timeout 9 --jobs 4 --chunksize 1 --include-headers --no-includes --dir . scripts/coccinelle/null/eno.cocci > ~/Projekte/Bau/Linux/scripts/Coccinelle/call_checks/20201023/eno2.txt 2> ~/Projekte/Bau/Linux/scripts/Coccinelle/call_checks/20201023/eno2-errors.txt; YY=$(date) && echo "$XX | $YY" … real 2m38,494s user 9m39,364s sys 0m4,094s So 25. Okt 20:58:05 CET 2020 | So 25. Okt 21:00:44 CET 2020 elfring@Sonne:~/Projekte/Linux/next-patched> git checkout optimise_disjunction_in_eno.cocci-1 && XX=$(date) && time spatch -D patch --timeout 9 --jobs 4 --chunksize 1 --include-headers --no-includes --dir . scripts/coccinelle/null/eno.cocci > ~/Projekte/Bau/Linux/scripts/Coccinelle/call_checks/20201023/eno3.diff 2> ~/Projekte/Bau/Linux/scripts/Coccinelle/call_checks/20201023/eno3-errors.txt; YY=$(date) && echo "$XX | $YY" … real 2m46,097s user 10m15,467s sys 0m3,984s So 25. Okt 21:00:56 CET 2020 | So 25. Okt 21:03:42 CET 2020 elfring@Sonne:~/Projekte/Linux/next-patched> git checkout optimise_disjunction_in_eno.cocci-1 && XX=$(date) && time spatch -D context --timeout 9 --jobs 4 --chunksize 1 --include-headers --no-includes --dir . scripts/coccinelle/null/eno.cocci > ~/Projekte/Bau/Linux/scripts/Coccinelle/call_checks/20201023/eno4.txt 2> ~/Projekte/Bau/Linux/scripts/Coccinelle/call_checks/20201023/eno4-errors.txt; YY=$(date) && echo "$XX | $YY" … real 2m41,472s user 9m37,492s sys 0m3,834s So 25. Okt 21:03:56 CET 2020 | So 25. Okt 21:06:37 CET 2020 > Intel(R) Core(TM) i5-6200U CPU @ 2.30GHz AMD Phenom(tm) II X4 850 Processor Will any other aspects become relevant? Regards, Markus _______________________________________________ Cocci mailing list Cocci@systeme.lip6.fr https://systeme.lip6.fr/mailman/listinfo/cocci ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Cocci] Coccinelle: null: Optimise disjunctions in SmPL script “eno.cocci” 2020-10-25 20:10 ` Markus Elfring @ 2020-10-25 20:27 ` Julia Lawall 2020-10-25 20:45 ` Markus Elfring 0 siblings, 1 reply; 7+ messages in thread From: Julia Lawall @ 2020-10-25 20:27 UTC (permalink / raw) To: Markus Elfring Cc: Michal Marek, Gilles Muller, Nicolas Palix, kernel-janitors, linux-kernel, Coccinelle [-- Attachment #1: Type: text/plain, Size: 3566 bytes --] On Sun, 25 Oct 2020, Markus Elfring wrote: > >> Would you become interested to configure a representative test environment > >> for safe comparisons of corresponding run time characteristics > >> of the affected software? > > > > In what sense could the comparison possibly be unsafe? > > * Our test systems are obviously different. > Thus concerns can be considered for reproducibility of test results > on other possible configurations. > > * We share only a tiny fraction of technical information which would probably > be needed for “benchmarks”. > > > > Just use time and run spatch on whatever machine you want. > > fring@Sonne:~/Projekte/Linux/next-patched> > elfring@Sonne:~/Projekte/Linux/next-patched> git checkout next-20201023 && XX=$(date) && time spatch -D patch --timeout 9 --jobs 4 --chunksize 1 --include-headers --no-includes --dir . scripts/coccinelle/null/eno.cocci > ~/Projekte/Bau/Linux/scripts/Coccinelle/call_checks/20201023/eno1.diff 2> ~/Projekte/Bau/Linux/scripts/Coccinelle/call_checks/20201023/eno1-errors.txt; YY=$(date) && echo "$XX | $YY" > … > real 2m54,266s > user 10m15,553s > sys 0m4,004s > So 25. Okt 20:53:56 CET 2020 | So 25. Okt 20:56:51 CET 2020 > elfring@Sonne:~/Projekte/Linux/next-patched> git checkout next-20201023 && XX=$(date) && time spatch -D context --timeout 9 --jobs 4 --chunksize 1 --include-headers --no-includes --dir . scripts/coccinelle/null/eno.cocci > ~/Projekte/Bau/Linux/scripts/Coccinelle/call_checks/20201023/eno2.txt 2> ~/Projekte/Bau/Linux/scripts/Coccinelle/call_checks/20201023/eno2-errors.txt; YY=$(date) && echo "$XX | $YY" > … > real 2m38,494s > user 9m39,364s > sys 0m4,094s > So 25. Okt 20:58:05 CET 2020 | So 25. Okt 21:00:44 CET 2020 > elfring@Sonne:~/Projekte/Linux/next-patched> git checkout optimise_disjunction_in_eno.cocci-1 && XX=$(date) && time spatch -D patch --timeout 9 --jobs 4 --chunksize 1 --include-headers --no-includes --dir . scripts/coccinelle/null/eno.cocci > ~/Projekte/Bau/Linux/scripts/Coccinelle/call_checks/20201023/eno3.diff 2> ~/Projekte/Bau/Linux/scripts/Coccinelle/call_checks/20201023/eno3-errors.txt; YY=$(date) && echo "$XX | $YY" > … > real 2m46,097s > user 10m15,467s > sys 0m3,984s > So 25. Okt 21:00:56 CET 2020 | So 25. Okt 21:03:42 CET 2020 > elfring@Sonne:~/Projekte/Linux/next-patched> git checkout optimise_disjunction_in_eno.cocci-1 && XX=$(date) && time spatch -D context --timeout 9 --jobs 4 --chunksize 1 --include-headers --no-includes --dir . scripts/coccinelle/null/eno.cocci > ~/Projekte/Bau/Linux/scripts/Coccinelle/call_checks/20201023/eno4.txt 2> ~/Projekte/Bau/Linux/scripts/Coccinelle/call_checks/20201023/eno4-errors.txt; YY=$(date) && echo "$XX | $YY" > … > real 2m41,472s > user 9m37,492s > sys 0m3,834s In the patch case, the user and system time are essentially identical. In the context case, the difference in user time is 2 seconds out of 9.5 minutes, 0.3%. In the patch case, the real time is a bit slower. But I believe that this is due to the time to read in the data from the file system. I also had a number like that, but the difference disappeared when I reran it afterwards, which meant running that case in the same conditions as the others. In the context case, the real time is slightly slower with your patch. So I see no compelling evidence for making the change. julia > So 25. Okt 21:03:56 CET 2020 | So 25. Okt 21:06:37 CET 2020 > > > > Intel(R) Core(TM) i5-6200U CPU @ 2.30GHz > > AMD Phenom(tm) II X4 850 Processor > > Will any other aspects become relevant? > > Regards, > Markus > [-- Attachment #2: Type: text/plain, Size: 136 bytes --] _______________________________________________ Cocci mailing list Cocci@systeme.lip6.fr https://systeme.lip6.fr/mailman/listinfo/cocci ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Cocci] Coccinelle: null: Optimise disjunctions in SmPL script “eno.cocci” 2020-10-25 20:27 ` Julia Lawall @ 2020-10-25 20:45 ` Markus Elfring 0 siblings, 0 replies; 7+ messages in thread From: Markus Elfring @ 2020-10-25 20:45 UTC (permalink / raw) To: Julia Lawall, Coccinelle Cc: kernel-janitors, Michal Marek, Nicolas Palix, linux-kernel, Gilles Muller > In the patch case, the user and system time are essentially identical. > In the context case, the difference in user time is 2 seconds out of 9.5 > minutes, 0.3%. This was just a single test run example. > In the patch case, the real time is a bit slower. I wonder about such an interpretation. > But I believe that this is due to the time to read in the data from the file system. I assume that I could reduce such an influence a bit if I would put (my) Linux repository into a RAM disk. > I also had a number like that, but the difference disappeared > when I reran it afterwards, which meant running that case in the same conditions > as the others. > > In the context case, the real time is slightly slower with your patch. I guess that the small variations from such a test approach can eventually become more interesting. > So I see no compelling evidence for making the change. This can be. Should any other differences become more significant? Regards, Markus _______________________________________________ Cocci mailing list Cocci@systeme.lip6.fr https://systeme.lip6.fr/mailman/listinfo/cocci ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2020-10-25 20:55 UTC | newest] Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2020-10-25 18:01 [Cocci] [PATCH] Coccinelle: null: Optimise disjunctions in SmPL script “eno.cocci” Markus Elfring 2020-10-25 18:28 ` Julia Lawall 2020-10-25 18:45 ` [Cocci] " Markus Elfring 2020-10-25 18:56 ` Julia Lawall 2020-10-25 20:10 ` Markus Elfring 2020-10-25 20:27 ` Julia Lawall 2020-10-25 20:45 ` Markus Elfring
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).