Leider können sogar unterschiedliche Teile desselben Builds mit widersprüchlichen j-Faktor-Werten optimal sein, je nachdem, was gerade erstellt wird, wie, welche der Systemressourcen zu diesem Zeitpunkt den Engpass darstellen, was sonst noch auf der Build-Maschine passiert und was gerade passiert das Netzwerk (bei Verwendung verteilter Build-Techniken), Status / Standort / Leistung der vielen an einem Build beteiligten Caching-Systeme usw.
Das Kompilieren von 100 winzigen C-Dateien ist möglicherweise schneller als das Kompilieren einer einzelnen großen Datei oder umgekehrt. Das Erstellen von kleinem, stark verschachteltem Code kann langsamer sein als das Erstellen großer Mengen von direktem / linearem Code.
Sogar der Kontext des Builds spielt eine Rolle - die Verwendung eines für Builds auf dedizierten Servern optimierten Aj-Faktors, der für exklusive, nicht überlappende Builds optimiert ist, kann zu sehr enttäuschenden Ergebnissen führen, wenn Entwickler parallel auf demselben gemeinsam genutzten Server bauen (für jeden solchen Build ist möglicherweise mehr erforderlich) Zeit als alle von ihnen kombiniert, wenn serialisiert) oder auf Servern mit unterschiedlichen Hardware-Konfigurationen oder virtualisiert.
Es gibt auch den Aspekt der Richtigkeit der Build-Spezifikation. Sehr komplexe Builds können Race-Zustände aufweisen, die zu intermittierenden Build-Fehlern führen. Die Auftrittsraten können je nach Zunahme oder Abnahme des j-Faktors stark variieren.
Ich kann weiter und weiter gehen. Der Punkt ist, dass Sie Ihren Build tatsächlich in Ihrem Kontext bewerten müssen , für den Sie den Faktor j optimieren möchten. Es gilt der Kommentar von @Jeff Schaller: iterieren Sie, bis Sie die beste Anpassung gefunden haben. Persönlich würde ich vom nproc-Wert ausgehen und erst nach oben und dann nach unten probieren, wenn die Versuche nach oben eine sofortige Verschlechterung anzeigen.
Es könnte eine gute Idee sein, zunächst mehrere identische Builds in vermeintlich identischen Kontexten zu messen, um sich einen Eindruck von der Variabilität Ihrer Messungen zu verschaffen. Wenn dies zu hoch ist, kann dies Ihren gesamten Optimierungsaufwand gefährden (eine Variabilität von 20% würde eine Verbesserung von 10% vollständig in den Schatten stellen). Verschlechterungswert in der j-Faktorsuche).
Schließlich ist es meiner Meinung nach besser, einen (adaptiven) Jobserver zu verwenden, sofern dieser unterstützt wird und verfügbar ist, als einen festen J-Faktor. Er bietet konsistent eine bessere Build-Leistung in einem breiteren Bereich von Kontexten.
ccache
für den späteren