From 9bf9d0ef42eb3fb87c4da72a06c17c9b725ef3b7 Mon Sep 17 00:00:00 2001 From: nobu Date: Fri, 16 Jun 2017 23:59:33 +0000 Subject: default.mspec: limit cores * spec/default.mspec (MSpecScript::JobServer#cores): limit max number of processors, not to acquire tokens more than necessary. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59103 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- spec/default.mspec | 9 +++++---- spec/mspec/lib/mspec/commands/mspec.rb | 2 +- spec/mspec/lib/mspec/utils/script.rb | 4 ++-- 3 files changed, 8 insertions(+), 7 deletions(-) (limited to 'spec') diff --git a/spec/default.mspec b/spec/default.mspec index cdc9fe558e..0805f467a4 100644 --- a/spec/default.mspec +++ b/spec/default.mspec @@ -24,15 +24,16 @@ class MSpecScript end module MSpecScript::JobServer - def cores - if /(?:\A|\s)--jobserver-(?:auth|fds)=(\d+),(\d+)/ =~ ENV["MAKEFLAGS"] - cores = 0 + def cores(max = 1) + if max > 1 and /(?:\A|\s)--jobserver-(?:auth|fds)=(\d+),(\d+)/ =~ ENV["MAKEFLAGS"] + cores = 1 begin r = IO.for_fd($1.to_i(10), "rb", autoclose: false) w = IO.for_fd($2.to_i(10), "wb", autoclose: false) - jobtokens = r.read_nonblock(1024) + jobtokens = r.read_nonblock(max - 1) cores = jobtokens.size if cores > 0 + cores += 1 jobserver = w w = nil at_exit { diff --git a/spec/mspec/lib/mspec/commands/mspec.rb b/spec/mspec/lib/mspec/commands/mspec.rb index f18d836252..bd34d5f0da 100755 --- a/spec/mspec/lib/mspec/commands/mspec.rb +++ b/spec/mspec/lib/mspec/commands/mspec.rb @@ -98,7 +98,7 @@ class MSpecMain < MSpecScript end output_files = [] - processes = [cores, @files.size].min + processes = cores(@files.size) children = processes.times.map { |i| name = tmp "mspec-multi-#{i}" output_files << name diff --git a/spec/mspec/lib/mspec/utils/script.rb b/spec/mspec/lib/mspec/utils/script.rb index 3e507d2b4a..910dcd22a7 100644 --- a/spec/mspec/lib/mspec/utils/script.rb +++ b/spec/mspec/lib/mspec/utils/script.rb @@ -234,9 +234,9 @@ class MSpecScript files patterns end - def cores + def cores(max = 1) require 'etc' - Etc.nprocessors + [Etc.nprocessors, max].min end def setup_env -- cgit v1.2.3