[PATCH 3/8] backports: use --use-coccigrep for Coccinelle

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This uses --use-coccigrep on our Cocccinelle library and removes
the CPU adjustments depending on whether we are testing or not.
The flag --use-coccigrep will tell Coccinelle to only kick off a
worker on a file until it has determined that a rule being
evaluated applies to a file. This does however mean that all files
on its bucket list will be evaluated first, but this yields better
CPU usage without having us to ramp up on the number of threads
depending on the situation. Without this patch we were kicking off
more threads to account for the fact that a Coccinelle thread will
stop working on a file if it had little or nothing to do on a file.

Possible work improvement: see how we can do away with tmp files
for Coccinelle output and just use memory to for the ouput, or
perhaps even disregard the stdout and only care for it if
--debug-cocci is provided.

mcgrof@drvbp1 ~/backports (git::master)$ time ./gentree.py --clean
/home/mcgrof/linux-next /home/mcgrof/build/next-20140411
Copy original source files ...
Apply patches ...
Modify Kconfig tree ...
Rewrite Makefiles and Kconfig files ...
Done!

real    1m14.880s
user    10m47.824s
sys     0m36.796s

Cc: Peter Senna <peter.senna@xxxxxxxxx>
Cc: Julia Lawall <julia.lawall@xxxxxxx>
Cc: Gilles Muller <Gilles.Muller@xxxxxxx>
Signed-off-by: Luis R. Rodriguez <mcgrof@xxxxxxxxxxxxxxxx>
---
 gentree.py          | 1 -
 lib/bpcoccinelle.py | 9 +++------
 2 files changed, 3 insertions(+), 7 deletions(-)

diff --git a/gentree.py b/gentree.py
index 7789e52..b890d28 100755
--- a/gentree.py
+++ b/gentree.py
@@ -721,7 +721,6 @@ def process(kerneldir, outdir, copy_list_file, git_revision=None,
 
         output = coccinelle.threaded_spatch(cocci_file, args.outdir,
                                             logwrite, print_name,
-                                            test_cocci,
                                             extra_args=extra_spatch_args)
         output = output.split('\n')
         if output[-1] == '':
diff --git a/lib/bpcoccinelle.py b/lib/bpcoccinelle.py
index a71f425..bd276c7 100644
--- a/lib/bpcoccinelle.py
+++ b/lib/bpcoccinelle.py
@@ -33,6 +33,7 @@ def spatch(cocci_file, outdir,
            max_threads, thread_id, temp_dir, ret_q, extra_args=[]):
     cmd = ['spatch', '--sp-file', cocci_file, '--in-place',
             '--recursive-includes',
+            '--use-coccigrep',
             '--backup-suffix', '.cocci_backup', '--dir', '.']
 
     if (max_threads > 1):
@@ -53,12 +54,8 @@ def spatch(cocci_file, outdir,
     outfile.close()
     ret_q.put((sprocess.returncode, fn))
 
-def threaded_spatch(cocci_file, outdir, logwrite, print_name,
-                    test_cocci, extra_args=[]):
-    num_cpus = cpu_count()
-    threads = num_cpus * 3
-    if test_cocci:
-        threads = num_cpus * 10
+def threaded_spatch(cocci_file, outdir, logwrite, print_name, extra_args=[]):
+    threads = cpu_count()
     jobs = list()
     output = ''
     ret_q = Queue()
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe backports" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux