[#27380] [Bug #2553] Fix pthreads slowness by eliminating unnecessary sigprocmask calls — Dan Peterson <redmine@...>

Bug #2553: Fix pthreads slowness by eliminating unnecessary sigprocmask calls

21 messages 2010/01/03

[#27437] [Feature #2561] 1.8.7 Patch reduces time cost of Rational operations by 50%. — Kurt Stephens <redmine@...>

Feature #2561: 1.8.7 Patch reduces time cost of Rational operations by 50%.

9 messages 2010/01/06

[#27447] [Bug #2564] [patch] re-initialize timer_thread_{lock,cond} after fork — Aliaksey Kandratsenka <redmine@...>

Bug #2564: [patch] re-initialize timer_thread_{lock,cond} after fork

18 messages 2010/01/06

[#27635] [Bug #2619] Proposed method: Process.fork_supported? — Hongli Lai <redmine@...>

Bug #2619: Proposed method: Process.fork_supported?

45 messages 2010/01/20
[#27643] [Feature #2619] Proposed method: Process.fork_supported? — Luis Lavena <redmine@...> 2010/01/21

Issue #2619 has been updated by Luis Lavena.

[#27678] Re: [Feature #2619] Proposed method: Process.fork_supported? — Yukihiro Matsumoto <matz@...> 2010/01/22

Hi,

[#27684] Re: [Feature #2619] Proposed method: Process.fork_supported? — Charles Oliver Nutter <headius@...> 2010/01/22

On Thu, Jan 21, 2010 at 11:27 PM, Yukihiro Matsumoto <matz@ruby-lang.org> w=

[#27708] Re: [Feature #2619] Proposed method: Process.fork_supported? — Yukihiro Matsumoto <matz@...> 2010/01/22

Hi,

[#27646] Re: [Bug #2619] Proposed method: Process.fork_supported? — Tanaka Akira <akr@...> 2010/01/21

2010/1/21 Hongli Lai <redmine@ruby-lang.org>:

[#27652] Re: [Bug #2619] Proposed method: Process.fork_supported? — Hongli Lai <hongli@...99.net> 2010/01/21

On 1/21/10 5:20 AM, Tanaka Akira wrote:

[#27653] Re: [Bug #2619] Proposed method: Process.fork_supported? — Tanaka Akira <akr@...> 2010/01/21

2010/1/21 Hongli Lai <hongli@plan99.net>:

[#27662] Re: [Bug #2619] Proposed method: Process.fork_supported? — Vladimir Sizikov <vsizikov@...> 2010/01/21

On Thu, Jan 21, 2010 at 10:53 AM, Tanaka Akira <akr@fsij.org> wrote:

[#27698] [Bug #2629] ConditionVariable#wait(mutex, timeout) should return whether the condition was signalled, not the waited time — Hongli Lai <redmine@...>

Bug #2629: ConditionVariable#wait(mutex, timeout) should return whether the condition was signalled, not the waited time

8 messages 2010/01/22

[#27722] [Feature #2635] Unbundle rdoc — Yui NARUSE <redmine@...>

Feature #2635: Unbundle rdoc

14 messages 2010/01/23

[#27757] [Bug #2638] ruby-1.9.1-p37[68] build on aix5.3 with gcc-4.2 failed to run for me because it ignores where libgcc is located. — Joel Soete <redmine@...>

Bug #2638: ruby-1.9.1-p37[68] build on aix5.3 with gcc-4.2 failed to run for me because it ignores where libgcc is located.

10 messages 2010/01/24

[#27778] [Bug #2641] Seg fault running miniruby during ruby build on Haiku — Alexander von Gluck <redmine@...>

Bug #2641: Seg fault running miniruby during ruby build on Haiku

10 messages 2010/01/25

[#27791] [Bug #2644] memory over-allocation with regexp — Greg Hazel <redmine@...>

Bug #2644: memory over-allocation with regexp

12 messages 2010/01/25

[#27794] [Bug #2647] Lack of testing for String#split — Hugh Sasse <redmine@...>

Bug #2647: Lack of testing for String#split

14 messages 2010/01/25

[#27912] [Bug #2669] mkmf find_executable doesn't find .bat files — Roger Pack <redmine@...>

Bug #2669: mkmf find_executable doesn't find .bat files

11 messages 2010/01/27

[#27930] [Bug:trunk] some behavior changes of lib/csv.rb between 1.8 and 1.9 — Yusuke ENDOH <mame@...>

Hi jeg2, or anyone who knows the implementation of FasterCSV,

15 messages 2010/01/28
[#27931] Re: [Bug:trunk] some behavior changes of lib/csv.rb between 1.8 and 1.9 — James Edward Gray II <james@...> 2010/01/28

On Jan 28, 2010, at 10:51 AM, Yusuke ENDOH wrote:

[ruby-core:27550] Re: better GC?

From: Charles Oliver Nutter <headius@...>
Date: 2010-01-11 22:30:48 UTC
List: ruby-core #27550
On Mon, Jan 11, 2010 at 8:27 AM, Paul Brannan <pbrannan@atdesk.com> wrote:
> For one application where we deployed both JRuby and Ruby 1.8, JRuby was
> able to significantly outperform Ruby 1.8 in terms of total cpu
> utilization and latency. =C2=A0However, JRuby with the default GC setting=
s
> still periodically became unresponsive for about 1-2 seconds throughout
> the running time of of the application. =C2=A0Switching to an incremental=
 GC
> made these gaps disappear, but by that point it was just an experiment
> for my own curiosity; the amount of effort to setup JRuby and tune the
> GC exceeded the time allocated to the project. =C2=A0In the end I went on=
 a
> 2-month vacation, and when I came back, the entire application had been
> rewritten in C++.

Some clarification of the pluggable GC stuff in the JVM (at least what
I know from Hotspot/OpenJDK...the other two major JVMs have their own
unique collectors).

* None of the major JVMs ever give heap space back to the system; if
they grow to 200MB, they'll never use less than 200MB. The
justification is that if you've run a process up to a certain size,
you're likely to need that size. It is possible to limit the growth
using a few simple flags that set minimum and maximum heap size.
* The GCs are not *live* swappable; you pick them at startup and
that's what you use for the lifetime of the process.
* There are many tunable settings, but most of those are also not
live; you set them at startup.
* Many of the settings can be left at defaults since Hotspot will try
to pick an appropriate GC and GC settings for your hardware (and will
adjust some GC behavior at runtime depending on how your application
behaves).

There are obviously way more tunables than most people ever need to
set, so generally running with the default "GC ergonomics" will allow
Hotspot to pick the best settings. It's not always perfect, of course,
so having the tunables is nice.

I thought it would be interesting to get some timings and GC output
for the three main JVM GCs, given the OP's benchmark:

The serial GC is the basic single-threaded collector.

~/projects/jruby =E2=9E=94 time jruby -J-XX:+UseSerialGC -e "(1..7).each{|n=
| a
=3D ['a']*(10**n); a.inspect;}"
real	0m4.538s
user	0m4.359s
sys	0m0.324s

The Parallel GC uses multiple threads to reduce pauses. My system has
2 cores, so I believe it defaults to 2 GC threads...both this and the
Concurrent Mark/Sweep collector would be more interesting on a system
with more cores.

~/projects/jruby =E2=9E=94 time jruby -J-XX:+UseParallelGC -e "(1..7).each{=
|n|
a =3D ['a']*(10**n); a.inspect;}"

real	0m5.489s
user	0m5.383s
sys	0m0.485s

~/projects/jruby =E2=9E=94 time jruby -J-XX:+UseParallelGC
-J-XX:ParallelGCThreads=3D1 -e "(1..7).each{|n| a =3D ['a']*(10**n);
a.inspect;}"

real	0m8.984s
user	0m5.793s
sys	0m0.605s

~/projects/jruby =E2=9E=94 time jruby -J-XX:+UseParallelGC
-J-XX:ParallelGCThreads=3D2 -e "(1..7).each{|n| a =3D ['a']*(10**n);
a.inspect;}"

real	0m5.251s
user	0m5.132s
sys	0m0.510s

~/projects/jruby =E2=9E=94 time jruby -J-XX:+UseParallelGC
-J-XX:ParallelGCThreads=3D3 -e "(1..7).each{|n| a =3D ['a']*(10**n);
a.inspect;}"

real	0m5.685s
user	0m5.146s
sys	0m0.658s

The Concurrent Mark-Sweep collector does the mark and sweep phases of
GC concurrent with program execution, but still stops the world for
compacting:

~/projects/jruby =E2=9E=94 time jruby -J-XX:+UseConcMarkSweepGC -e
"(1..7).each{|n| a =3D ['a']*(10**n); a.inspect;}"

real	0m4.860s
user	0m5.077s
sys	0m0.349s

The G1 "Garbage First" collector is a semispace collector that does
not have generations. It is intended to eventually replace the CMS GC
and provide more predictable pauses (CMS can occasionally cause really
long full GC pauses under high load):

~/projects/jruby =E2=9E=94 time jruby -J-XX:+UnlockExperimentalVMOptions
-J-XX:+UseG1GC -e "(1..7).each{|n| a =3D ['a']*(10**n); a.inspect;}"

real	0m9.098s
user	0m9.709s
sys	0m1.076s

Here's a nice article on tuning GC for Java 5 (which is EOL, but the
article applies well to Java 6+):

http://java.sun.com/docs/hotspot/gc5.0/gc_tuning_5.html

It might help guide potential solutions for MRI's GC.

- Charlie

In This Thread