summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Fuzzer
diff options
context:
space:
mode:
authorKostya Serebryany <kcc@google.com>2015-05-12 18:51:57 +0000
committerKostya Serebryany <kcc@google.com>2015-05-12 18:51:57 +0000
commit9690fcf12eee2c91b106991b3aad7b0e65c0c1b3 (patch)
treed391f453af9fab0a907542830c43d0a2ca952400 /llvm/lib/Fuzzer
parent4744ec6da984f155450683c4aa223678278050a7 (diff)
downloadbcm5719-llvm-9690fcf12eee2c91b106991b3aad7b0e65c0c1b3.tar.gz
bcm5719-llvm-9690fcf12eee2c91b106991b3aad7b0e65c0c1b3.zip
[lib/Fuzzer] guess the right number of workers if -jobs=N is given but -workers=M is not. Update the docs.
llvm-svn: 237163
Diffstat (limited to 'llvm/lib/Fuzzer')
-rw-r--r--llvm/lib/Fuzzer/FuzzerDriver.cpp6
-rw-r--r--llvm/lib/Fuzzer/FuzzerFlags.def3
-rw-r--r--llvm/lib/Fuzzer/FuzzerInternal.h2
-rw-r--r--llvm/lib/Fuzzer/FuzzerUtil.cpp8
4 files changed, 18 insertions, 1 deletions
diff --git a/llvm/lib/Fuzzer/FuzzerDriver.cpp b/llvm/lib/Fuzzer/FuzzerDriver.cpp
index 8e960c4f570..d1f6953a748 100644
--- a/llvm/lib/Fuzzer/FuzzerDriver.cpp
+++ b/llvm/lib/Fuzzer/FuzzerDriver.cpp
@@ -203,6 +203,12 @@ int FuzzerDriver(int argc, char **argv, UserCallback Callback) {
return 0;
}
+ if (Flags.jobs > 0 && Flags.workers == 0) {
+ Flags.workers = std::min(NumberOfCpuCores() / 2, Flags.jobs);
+ if (Flags.workers > 1)
+ std::cerr << "Running " << Flags.workers << " workers\n";
+ }
+
if (Flags.workers > 0 && Flags.jobs > 0)
return RunInMultipleProcesses(argc, argv, Flags.workers, Flags.jobs);
diff --git a/llvm/lib/Fuzzer/FuzzerFlags.def b/llvm/lib/Fuzzer/FuzzerFlags.def
index 25dffe452b8..4507fdadee7 100644
--- a/llvm/lib/Fuzzer/FuzzerFlags.def
+++ b/llvm/lib/Fuzzer/FuzzerFlags.def
@@ -44,7 +44,8 @@ FUZZER_FLAG_INT(jobs, 0, "Number of jobs to run. If jobs >= 1 we spawn"
" this number of jobs in separate worker processes"
" with stdout/stderr redirected to fuzz-JOB.log.")
FUZZER_FLAG_INT(workers, 0,
- "Number of simultaneous worker processes to run the jobs.")
+ "Number of simultaneous worker processes to run the jobs."
+ " If zero, \"min(jobs,NumberOfCpuCores()/2)\" is used.")
FUZZER_FLAG_INT(reload, 1,
"Reload the main corpus periodically to get new units"
"discovered by other processes.")
diff --git a/llvm/lib/Fuzzer/FuzzerInternal.h b/llvm/lib/Fuzzer/FuzzerInternal.h
index 868668885b3..496b6db1650 100644
--- a/llvm/lib/Fuzzer/FuzzerInternal.h
+++ b/llvm/lib/Fuzzer/FuzzerInternal.h
@@ -44,6 +44,8 @@ std::string Hash(const Unit &U);
void SetTimer(int Seconds);
void PrintFileAsBase64(const std::string &Path);
+int NumberOfCpuCores();
+
class Fuzzer {
public:
struct FuzzingOptions {
diff --git a/llvm/lib/Fuzzer/FuzzerUtil.cpp b/llvm/lib/Fuzzer/FuzzerUtil.cpp
index 3635f39a10d..dc7154ca385 100644
--- a/llvm/lib/Fuzzer/FuzzerUtil.cpp
+++ b/llvm/lib/Fuzzer/FuzzerUtil.cpp
@@ -61,4 +61,12 @@ void SetTimer(int Seconds) {
assert(Res == 0);
}
+int NumberOfCpuCores() {
+ FILE *F = popen("nproc", "r");
+ int N = 0;
+ fscanf(F, "%d", &N);
+ fclose(F);
+ return N;
+}
+
} // namespace fuzzer
OpenPOWER on IntegriCloud