lkml.org 
[lkml]   [2020]   [Oct]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
Subject[PATCH] scripts: check_docs_external_symbols: speed up its execution
Date
This script is slow. Speed it up by using one thread per CPU.

On my desktop with 4 cores (8 threads) and SSD disks, before
this change, it takes:

$ time scripts/check_docs_external_symbols drivers/media/v4l2-core/
...
real 0m11,044s
user 0m13,860s
sys 0m2,048s

After it:

$ time scripts/check_docs_external_symbols drivers/media/v4l2-core/
...
real 0m3,153s
user 0m19,322s
sys 0m2,738s

So, it is now almost 4 times faster.

Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
---
scripts/check_docs_external_symbols | 46 +++++++++++++++++++++++++----
1 file changed, 41 insertions(+), 5 deletions(-)

diff --git a/scripts/check_docs_external_symbols b/scripts/check_docs_external_symbols
index e04af5f03a1d..d312e1973530 100755
--- a/scripts/check_docs_external_symbols
+++ b/scripts/check_docs_external_symbols
@@ -23,6 +23,8 @@ use warnings;
use strict;
use File::Find;
use Cwd 'abs_path';
+use threads;
+use Thread::Queue;

sub check_kerneldoc_symbols($$$$) {
my $file = shift;
@@ -131,14 +133,15 @@ sub check_kerneldoc_symbols($$$$) {
return %hash;
}

-sub check_file($) {
+sub do_check_file($) {
my $file = shift;
my (@files, @exports, @doc, @doc_refs, %file_exports);
my $content = "\n";

- $file =~ s/\s+$//;
-
- return 0 if (!($file =~ /\.[ch]$/));
+ local $SIG{'KILL'} = sub {
+ print "$$ aborted.\n";
+ exit(1);
+ };

my $dir = $file;
$dir =~ s,[^\/]+$,,;
@@ -262,6 +265,20 @@ sub check_file($) {
return 1;
}

+my $queue;
+
+sub check_file($) {
+ my $file = shift;
+
+ $file =~ s/\s+$//;
+
+ return if (!($file =~ /\.[ch]$/));
+
+#printf "queuing $file\n";
+
+ $queue->enqueue($file);
+}
+
sub parse_dir {
check_file $File::Find::name;
}
@@ -270,6 +287,20 @@ sub parse_dir {
# main
#

+my $cpus = qx(nproc);
+
+$queue = Thread::Queue->new();
+
+for (my $i = 0; $i < $cpus; $i++) {
+ threads->create(
+ sub {
+ while (defined(my $file = $queue->dequeue())) {
+ do_check_file($file);
+ }
+ }
+ );
+};
+
if (@ARGV) {
while (@ARGV) {
my $file = shift;
@@ -280,10 +311,15 @@ if (@ARGV) {
check_file $file;
}
}
- exit;
} else {
my @files = qx(git grep -l EXPORT_SYMBOL);
foreach my $file (@files) {
check_file $file;
}
}
+
+$queue->end();
+
+foreach my $thr(threads->list()) {
+ $thr->join();
+}
--
2.26.2
\
 
 \ /
  Last update: 2020-10-08 12:32    [W:0.145 / U:0.848 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site