<div dir="ltr">Patch LGTM. Did this fix your problem on your machine?</div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Oct 2, 2015 at 10:26 AM, <a href="mailto:hfinkel@anl.gov">hfinkel@anl.gov</a> <span dir="ltr"><<a href="mailto:hfinkel@anl.gov" target="_blank">hfinkel@anl.gov</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">hfinkel created this revision.<br>
hfinkel added reviewers: ruiu, chandlerc, cmatthews.<br>
hfinkel added a subscriber: llvm-commits.<br>
hfinkel set the repository for this revision to rL LLVM.<br>
<br>
It is common to have a default soft process limit, at least on some families of Linux distributions, of 1024. This is normally more than enough, but if you have many cores, and you're running tests that create many threads, this can become a problem. My POWER7 development machine has 48 cores, and when running the lld regression tests, which often want to create up to 48 threads, I run into problems. lit, by default, will want to run 48 tests in parallel, and 48*48 < 1024, and so many tests fail like this:<br>
<br>
terminate called after throwing an instance of 'std::system_error'<br>
  what():  Resource temporarily unavailable<br>
<br>
or lit fails like this when launching a test:<br>
<br>
  OSError: [Errno 11] Resource temporarily unavailable<br>
<br>
lit can easily detect this situation and attempt to repair it before launching tests (by raising the soft process limit to something that will allow ncpus^2 threads to be created), and should do so to prevent spurious test failures.<br>
<br>
This is the follow-up to this thread: <a href="http://lists.llvm.org/pipermail/llvm-dev/2015-October/090942.html" rel="noreferrer" target="_blank">http://lists.llvm.org/pipermail/llvm-dev/2015-October/090942.html</a><br>
<br>
<br>
Repository:<br>
  rL LLVM<br>
<br>
<a href="http://reviews.llvm.org/D13389" rel="noreferrer" target="_blank">http://reviews.llvm.org/D13389</a><br>
<br>
Files:<br>
  utils/lit/lit/run.py<br>
<br>
Index: utils/lit/lit/run.py<br>
===================================================================<br>
--- utils/lit/lit/run.py<br>
+++ utils/lit/lit/run.py<br>
@@ -228,6 +228,28 @@<br>
             canceled_flag = LockedValue(0)<br>
             consumer = ThreadResultsConsumer(display)<br>
<br>
+       # Because some tests use threads internally, and at least on Linux each<br>
+       # of these threads counts toward the current process limit, try to<br>
+       # raise the (soft) process limit so that tests don't fail due to<br>
+       # resource exhaustion.<br>
+        try:<br>
+          cpus = lit.util.detectCPUs()<br>
+          desired_limit = jobs * cpus * 2 # the 2 is a safety factor<br>
+<br>
+         # Import the resource module here inside this try block because it<br>
+         # will likely fail on Windows.<br>
+          import resource<br>
+<br>
+          max_procs_soft, max_procs_hard = resource.getrlimit(resource.RLIMIT_NPROC)<br>
+          desired_limit = min(desired_limit, max_procs_hard)<br>
+<br>
+          if max_procs_soft < desired_limit:<br>
+            self.lit_config.note('raising the process limit from %d to %d' % \<br>
+                                 (max_procs_soft, desired_limit))<br>
+            resource.setrlimit(resource.RLIMIT_NPROC, (desired_limit, max_procs_hard))<br>
+        except:<br>
+          pass<br>
+<br>
         # Create the test provider.<br>
         provider = TestProvider(self.tests, jobs, queue_impl, canceled_flag)<br>
<br>
<br>
<br>
</blockquote></div><br></div>