mirror of
https://github.com/openwrt/openwrt.git
synced 2025-01-13 08:20:07 +00:00
93 lines
2.2 KiB
Diff
93 lines
2.2 KiB
Diff
|
From bc8e655a420d2f62bb0597947e96dce7b4d3fb36 Mon Sep 17 00:00:00 2001
|
||
|
From: Wessel Dankers <wsl@fruit.je>
|
||
|
Date: Sun, 30 Oct 2022 19:29:28 +0100
|
||
|
Subject: [PATCH] Only use available CPUs
|
||
|
|
||
|
Not all online CPUs may be available for the current process,
|
||
|
especially when CPU affinity is involved. In such cases too many
|
||
|
threads will be created, which will then compete unnecessarily
|
||
|
for CPU time.
|
||
|
|
||
|
Use sched_getaffinity() to determine the correct number of threads
|
||
|
to create.
|
||
|
---
|
||
|
squashfs-tools/mksquashfs.c | 16 ++++++++++++----
|
||
|
squashfs-tools/unsquashfs.c | 13 ++++++++++---
|
||
|
2 files changed, 22 insertions(+), 7 deletions(-)
|
||
|
|
||
|
--- a/squashfs-tools/mksquashfs.c
|
||
|
+++ b/squashfs-tools/mksquashfs.c
|
||
|
@@ -52,7 +52,9 @@
|
||
|
#include <ctype.h>
|
||
|
#include <sys/sysinfo.h>
|
||
|
|
||
|
-#ifndef linux
|
||
|
+#ifdef linux
|
||
|
+#include <sched.h>
|
||
|
+#else
|
||
|
#include <sys/sysctl.h>
|
||
|
#endif
|
||
|
|
||
|
@@ -5079,7 +5081,15 @@ static void initialise_threads(int readq
|
||
|
BAD_ERROR("Failed to set signal mask in intialise_threads\n");
|
||
|
|
||
|
if(processors == -1) {
|
||
|
-#ifndef linux
|
||
|
+#ifdef linux
|
||
|
+ cpu_set_t cpu_set;
|
||
|
+ CPU_ZERO(&cpu_set);
|
||
|
+
|
||
|
+ if(sched_getaffinity(0, sizeof cpu_set, &cpu_set) == -1)
|
||
|
+ processors = sysconf(_SC_NPROCESSORS_ONLN);
|
||
|
+ else
|
||
|
+ processors = CPU_COUNT(&cpu_set);
|
||
|
+#else
|
||
|
int mib[2];
|
||
|
size_t len = sizeof(processors);
|
||
|
|
||
|
@@ -5096,8 +5106,6 @@ static void initialise_threads(int readq
|
||
|
ERROR_EXIT(" Defaulting to 1\n");
|
||
|
processors = 1;
|
||
|
}
|
||
|
-#else
|
||
|
- processors = sysconf(_SC_NPROCESSORS_ONLN);
|
||
|
#endif
|
||
|
}
|
||
|
|
||
|
--- a/squashfs-tools/unsquashfs.c
|
||
|
+++ b/squashfs-tools/unsquashfs.c
|
||
|
@@ -33,6 +33,7 @@
|
||
|
#include "fnmatch_compat.h"
|
||
|
|
||
|
#ifdef __linux__
|
||
|
+#include <sched.h>
|
||
|
#include <sys/sysinfo.h>
|
||
|
#include <sys/sysmacros.h>
|
||
|
#elif defined __FreeBSD__
|
||
|
@@ -2719,7 +2720,15 @@ void initialise_threads(int fragment_buf
|
||
|
}
|
||
|
|
||
|
if(processors == -1) {
|
||
|
-#ifndef linux
|
||
|
+#ifdef linux
|
||
|
+ cpu_set_t cpu_set;
|
||
|
+ CPU_ZERO(&cpu_set);
|
||
|
+
|
||
|
+ if(sched_getaffinity(0, sizeof cpu_set, &cpu_set) == -1)
|
||
|
+ processors = sysconf(_SC_NPROCESSORS_ONLN);
|
||
|
+ else
|
||
|
+ processors = CPU_COUNT(&cpu_set);
|
||
|
+#else
|
||
|
int mib[2];
|
||
|
size_t len = sizeof(processors);
|
||
|
|
||
|
@@ -2735,8 +2744,6 @@ void initialise_threads(int fragment_buf
|
||
|
"Defaulting to 1\n");
|
||
|
processors = 1;
|
||
|
}
|
||
|
-#else
|
||
|
- processors = sysconf(_SC_NPROCESSORS_ONLN);
|
||
|
#endif
|
||
|
}
|
||
|
|