Bug #19461
closedTime.local performance tanks in forked process (on macOS only?)
Description
The following program demonstrates a performance regression in forked child processes when invoking Time.local
:
require 'benchmark'
require 'time'
def sir_local_alot
result = Benchmark.measure do
10_000.times do
tm = ::Time.local(2023)
end
end
$stderr.puts result
end
sir_local_alot
pid = fork do
sir_local_alot
end
Process.wait(pid)
On Linux the performance is similar, but on macOS, the performance is over 100x worse on my M1 laptop.
Files
Updated by ioquatix (Samuel Williams) almost 2 years ago
- Description updated (diff)
Updated by PvpDJgHP (William Thomas NELSON) almost 2 years ago
In Dec 2016, someone investigated a related question and posted here:
https://stackoverflow.com/questions/41353532/41371753#41371753
This person's findings may be helpful.
Updated by ioquatix (Samuel Williams) almost 2 years ago
Thanks, that's quite an epic Q/A.
Updated by nobu (Nobuyoshi Nakada) almost 2 years ago
- File localtime_test.c localtime_test.c added
Seems unrelated to Ruby.
$ sw_vers
ProductName: macOS
ProductVersion: 13.2.1
BuildVersion: 22D68
$ clang localtime_test.c && ./a.out && ./a.out r
Measuring localtime
In parent
monotonic = 0.002226000
cputime = 0.001949000
In child
monotonic = 0.581383000
cputime = 0.580938000
Measuring localtime_r
In parent
monotonic = 0.002409000
cputime = 0.001967000
In child
monotonic = 0.587200000
cputime = 0.586385000
Updated by nobu (Nobuyoshi Nakada) almost 2 years ago
- File localtime_test.c localtime_test.c added
Rewritten.
$ clang localtime_test.c && ./a.out
Measuring in parent
localtime_r = 0.002384000
localtime = 0.001939000
Measuring in child
localtime_r = 0.576143000
localtime = 0.591077000
Updated by ioquatix (Samuel Williams) almost 2 years ago
Wow, it's like 300x slower.
According to the stack overflow discussion, some how this does not affect Python, so maybe it's something about the function we are using in the C standard library. 100% agree it's Darwin's problem but indirectly became Ruby's problem.
Updated by ioquatix (Samuel Williams) almost 2 years ago
I've submitted a bug report to Apple:
Updated by ioquatix (Samuel Williams) almost 2 years ago
- Status changed from Open to Closed
I don't think we can do anything about this, so closing.
Updated by lars.vonk@gmail.com (Lars Vonk) 11 months ago
Hi, we are running into the same issue when developing so I was wondering if you got any response on the Apple bug report? Or found a workaround?