Remove hyperthreading multiplier to improve performance.
Tests on my local machine show that the Hyperthreading multiplier is significantly hurting our builds times.
RELNOTES: Set build jobs equivalent to number of logical processors by default. Should improve build times significantly.
PiperOrigin-RevId: 178795078
diff --git a/src/main/java/com/google/devtools/build/lib/actions/LocalHostResourceManagerLinux.java b/src/main/java/com/google/devtools/build/lib/actions/LocalHostResourceManagerLinux.java
index b889742..19d0208 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/LocalHostResourceManagerLinux.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/LocalHostResourceManagerLinux.java
@@ -20,8 +20,6 @@
import java.io.File;
import java.io.IOException;
import java.nio.charset.Charset;
-import java.util.HashSet;
-import java.util.Set;
/**
* This class estimates the local host's resource capacity for Linux.
@@ -38,11 +36,6 @@
return getLogicalCpuCountHelper(content);
}
- private static int getPhysicalCpuCount(int logicalCpuCount) throws IOException {
- String content = getCpuInfoContent();
- return getPhysicalCpuCountHelper(logicalCpuCount, content);
- }
-
private static double getMemoryInMb()
throws IOException, ProcMeminfoParser.KeywordNotFoundException {
return getMemoryInMbHelper(MEM_INFO_FILE);
@@ -51,14 +44,11 @@
public static ResourceSet getLocalHostResources() {
try {
int logicalCpuCount = getLogicalCpuCount();
- int physicalCpuCount = getPhysicalCpuCount(logicalCpuCount);
double ramMb = getMemoryInMb();
- boolean hyperthreading = (logicalCpuCount != physicalCpuCount);
- final double EFFECTIVE_CPUS_PER_HYPERTHREADED_CPU = 0.6;
return ResourceSet.create(
ramMb,
- logicalCpuCount * (hyperthreading ? EFFECTIVE_CPUS_PER_HYPERTHREADED_CPU : 1.0),
+ logicalCpuCount,
1.0,
Integer.MAX_VALUE);
} catch (IOException | ProcMeminfoParser.KeywordNotFoundException e) {
@@ -94,36 +84,6 @@
return count;
}
- public static int getPhysicalCpuCountHelper(int logicalCpuCount, String content)
- throws IOException {
- // CPU count
- Iterable<String> lines = NEWLINE_SPLITTER.split(content);
- Set<String> uniq = new HashSet<>();
- for (String line : lines) {
- if (line.startsWith("physical id")) {
- uniq.add(line);
- }
- }
- int cpuCount = uniq.size();
- if (cpuCount == 0) {
- cpuCount = logicalCpuCount;
- }
-
- // core per CPU
- uniq = new HashSet<>();
- for (String line : lines) {
- if (line.startsWith("core id")) {
- uniq.add(line);
- }
- }
- int coresPerCpu = uniq.size();
- if (coresPerCpu == 0) {
- coresPerCpu = 1;
- }
-
- return cpuCount * coresPerCpu;
- }
-
public static double getMemoryInMbHelper(String memInfoFileName)
throws IOException, ProcMeminfoParser.KeywordNotFoundException {
ProcMeminfoParser memInfo = new ProcMeminfoParser(memInfoFileName);
diff --git a/src/test/java/com/google/devtools/build/lib/actions/LocalHostResourceManagerLinuxTest.java b/src/test/java/com/google/devtools/build/lib/actions/LocalHostResourceManagerLinuxTest.java
index ba383dd..ef82dba 100644
--- a/src/test/java/com/google/devtools/build/lib/actions/LocalHostResourceManagerLinuxTest.java
+++ b/src/test/java/com/google/devtools/build/lib/actions/LocalHostResourceManagerLinuxTest.java
@@ -88,8 +88,6 @@
"Hugepagesize: 2048 kB");
String meminfoFile = scratch.file("test_meminfo_nonht", meminfoContent).getPathString();
assertThat(LocalHostResourceManagerLinux.getLogicalCpuCountHelper(cpuinfoContent)).isEqualTo(1);
- assertThat(LocalHostResourceManagerLinux.getPhysicalCpuCountHelper(1, cpuinfoContent))
- .isEqualTo(1);
// +/- 0.1MB
assertThat(LocalHostResourceManagerLinux.getMemoryInMbHelper(meminfoFile))
.isWithin(0.1)
@@ -184,8 +182,6 @@
"Hugepagesize: 2048 kB");
String meminfoFile = scratch.file("test_meminfo_ht", meminfoContent).getPathString();
assertThat(LocalHostResourceManagerLinux.getLogicalCpuCountHelper(cpuinfoContent)).isEqualTo(2);
- assertThat(LocalHostResourceManagerLinux.getPhysicalCpuCountHelper(2, cpuinfoContent))
- .isEqualTo(1);
// +/- 0.1MB
assertThat(LocalHostResourceManagerLinux.getMemoryInMbHelper(meminfoFile))
.isWithin(0.1)
@@ -338,8 +334,6 @@
"Hugepagesize: 2048 kB");
String meminfoFile = scratch.file("test_meminfo_amd", meminfoContent).getPathString();
assertThat(LocalHostResourceManagerLinux.getLogicalCpuCountHelper(cpuinfoContent)).isEqualTo(4);
- assertThat(LocalHostResourceManagerLinux.getPhysicalCpuCountHelper(4, cpuinfoContent))
- .isEqualTo(4);
// +/- 0.1MB
assertThat(LocalHostResourceManagerLinux.getMemoryInMbHelper(meminfoFile))
.isWithin(0.1)