<html>
    <head>
      <base href="https://bugs.llvm.org/">
    </head>
    <body><table border="1" cellspacing="0" cellpadding="8">
        <tr>
          <th>Bug ID</th>
          <td><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - nproc threads spawn by default regardless of input"
   href="https://bugs.llvm.org/show_bug.cgi?id=48193">48193</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>nproc threads spawn by default regardless of input
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>lld
          </td>
        </tr>

        <tr>
          <th>Version</th>
          <td>unspecified
          </td>
        </tr>

        <tr>
          <th>Hardware</th>
          <td>All
          </td>
        </tr>

        <tr>
          <th>OS</th>
          <td>All
          </td>
        </tr>

        <tr>
          <th>Status</th>
          <td>NEW
          </td>
        </tr>

        <tr>
          <th>Severity</th>
          <td>enhancement
          </td>
        </tr>

        <tr>
          <th>Priority</th>
          <td>P
          </td>
        </tr>

        <tr>
          <th>Component</th>
          <td>All Bugs
          </td>
        </tr>

        <tr>
          <th>Assignee</th>
          <td>unassignedbugs@nondot.org
          </td>
        </tr>

        <tr>
          <th>Reporter</th>
          <td>mjguzik@gmail.com
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>llvm-bugs@lists.llvm.org, smithp352@googlemail.com
          </td>
        </tr></table>
      <p>
        <div>
        <pre>I happen to be running this on FreeBSD with:
FreeBSD clang version 11.0.0 (<a href="mailto:git@github.com">git@github.com</a>:llvm/llvm-project.git
llvmorg-11.0.0-0-g176249bd673)

But the same problem exists on Linux.

My test box has 104 hardware threads and lld spawns this many threads even when
linking helloworld. This becomes a problem when there are many binaries built
in parallel (for example when building the entire system or worse yet, building
all 3rd party packages). It cannot possibly benefit from this many threads for
such a small binary.

There is Linux-specific code to limit the thread count based on the result of
sched_getaffinity (as found in computeHostNumHardwareThreads), but using custom
affinity is not a solution at least for 2 reasons:
1. it restricts not only how many hw threads can be used, but which ones, which
requires hand-scheduling. in contrast, say if the machine has 16 threads, one
lld spawns 4 and another spawns 8, the system can schedule them as it sees fit.
2. it requires guessing for the compiler how many threads can be effectively
used for given binary

Neither thing is feasible to do with thousands of binaries to build (which is
the case for the 3rd party package build mentioned above).

I don't know anything about the internals so I don't have a solution. However,
the least which can be done is have a heuristic which estimates how many
threads are useful to spawn in the first place and it is fine if it
overestimates to some extent.</pre>
        </div>
      </p>


      <hr>
      <span>You are receiving this mail because:</span>

      <ul>
          <li>You are on the CC list for the bug.</li>
      </ul>
    </body>
</html>