From a1406a012e3a93a1c794da4cd4ca2381a3436a2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Sun, 18 Oct 2015 13:09:40 +0200 Subject: [PATCH] launch_daemon: Increased the number of worker threads. * Since we're disk bound, and not CPU bound, it doesn't make much sense to restrict the number of threads on the number of CPUs. * It's still not completely independent of the number of CPUs now, though: we'll have 3 * CPU count worker threads. --- src/servers/launch/Worker.cpp | 9 ++++++--- src/servers/launch/Worker.h | 2 +- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/servers/launch/Worker.cpp b/src/servers/launch/Worker.cpp index 5e337603b4..1d2fc86a91 100644 --- a/src/servers/launch/Worker.cpp +++ b/src/servers/launch/Worker.cpp @@ -10,6 +10,8 @@ static const bigtime_t kWorkerTimeout = 1000000; // One second until a worker thread quits without a job +static const int32 kWorkerCountPerCPU = 3; + static int32 sWorkerCount; @@ -91,12 +93,13 @@ Worker::_Process(void* _self) MainWorker::MainWorker(JobQueue& queue) : - Worker(queue) + Worker(queue), + fMaxWorkerCount(kWorkerCountPerCPU) { // TODO: keep track of workers, and quit them on destruction system_info info; if (get_system_info(&info) == B_OK) - fCPUCount = info.cpu_count; + fMaxWorkerCount = info.cpu_count * kWorkerCountPerCPU; } @@ -116,7 +119,7 @@ MainWorker::Run(BJob* job) if (jobCount > INT_MAX) jobCount = INT_MAX; - if ((int32)jobCount > count && count < fCPUCount) { + if ((int32)jobCount > count && count < fMaxWorkerCount) { Worker* worker = new Worker(fJobQueue); worker->Init(); } diff --git a/src/servers/launch/Worker.h b/src/servers/launch/Worker.h index beb333d1f3..636ad4bee9 100644 --- a/src/servers/launch/Worker.h +++ b/src/servers/launch/Worker.h @@ -44,7 +44,7 @@ protected: virtual status_t Run(BJob* job); private: - int32 fCPUCount; + int32 fMaxWorkerCount; };