[#86787] [Ruby trunk Feature#14723] [WIP] sleepy GC — ko1@...
Issue #14723 has been updated by ko1 (Koichi Sasada).
13 messages
2018/05/01
[#86790] Re: [Ruby trunk Feature#14723] [WIP] sleepy GC
— Eric Wong <normalperson@...>
2018/05/01
ko1@atdot.net wrote:
[#86791] Re: [Ruby trunk Feature#14723] [WIP] sleepy GC
— Koichi Sasada <ko1@...>
2018/05/01
On 2018/05/01 12:18, Eric Wong wrote:
[#86792] Re: [Ruby trunk Feature#14723] [WIP] sleepy GC
— Eric Wong <normalperson@...>
2018/05/01
Koichi Sasada <ko1@atdot.net> wrote:
[#86793] Re: [Ruby trunk Feature#14723] [WIP] sleepy GC
— Koichi Sasada <ko1@...>
2018/05/01
On 2018/05/01 12:47, Eric Wong wrote:
[#86794] Re: [Ruby trunk Feature#14723] [WIP] sleepy GC
— Eric Wong <normalperson@...>
2018/05/01
Koichi Sasada <ko1@atdot.net> wrote:
[#86814] Re: [Ruby trunk Feature#14723] [WIP] sleepy GC
— Koichi Sasada <ko1@...>
2018/05/02
[#86815] Re: [Ruby trunk Feature#14723] [WIP] sleepy GC
— Eric Wong <normalperson@...>
2018/05/02
Koichi Sasada <ko1@atdot.net> wrote:
[#86816] Re: [Ruby trunk Feature#14723] [WIP] sleepy GC
— Koichi Sasada <ko1@...>
2018/05/02
On 2018/05/02 11:49, Eric Wong wrote:
[#86847] [Ruby trunk Bug#14732] CGI.unescape returns different instance between Ruby 2.3 and 2.4 — me@...
Issue #14732 has been reported by jnchito (Junichi Ito).
3 messages
2018/05/02
[#86860] [Ruby trunk Feature#14723] [WIP] sleepy GC — sam.saffron@...
Issue #14723 has been updated by sam.saffron (Sam Saffron).
6 messages
2018/05/03
[#86862] Re: [Ruby trunk Feature#14723] [WIP] sleepy GC
— Eric Wong <normalperson@...>
2018/05/03
sam.saffron@gmail.com wrote:
[#86935] [Ruby trunk Bug#14742] Deadlock when autoloading different constants in the same file from multiple threads — elkenny@...
Issue #14742 has been reported by eugeneius (Eugene Kenny).
5 messages
2018/05/08
[#87030] [Ruby trunk Feature#14757] [PATCH] thread_pthread.c: enable thread caceh by default — normalperson@...
Issue #14757 has been reported by normalperson (Eric Wong).
4 messages
2018/05/15
[#87093] [Ruby trunk Feature#14767] [PATCH] gc.c: use monotonic counters for objspace_malloc_increase — ko1@...
Issue #14767 has been updated by ko1 (Koichi Sasada).
3 messages
2018/05/17
[#87095] [Ruby trunk Feature#14767] [PATCH] gc.c: use monotonic counters for objspace_malloc_increase — ko1@...
Issue #14767 has been updated by ko1 (Koichi Sasada).
9 messages
2018/05/17
[#87096] Re: [Ruby trunk Feature#14767] [PATCH] gc.c: use monotonic counters for objspace_malloc_increase
— Eric Wong <normalperson@...>
2018/05/17
ko1@atdot.net wrote:
[#87166] Re: [Ruby trunk Feature#14767] [PATCH] gc.c: use monotonic counters for objspace_malloc_increase
— Eric Wong <normalperson@...>
2018/05/18
Eric Wong <normalperson@yhbt.net> wrote:
[#87486] Re: [Ruby trunk Feature#14767] [PATCH] gc.c: use monotonic counters for objspace_malloc_increase
— Eric Wong <normalperson@...>
2018/06/13
I wrote:
[ruby-core:86817] Re: [Ruby trunk Feature#14723] [WIP] sleepy GC
From:
Eric Wong <normalperson@...>
Date:
2018-05-02 04:08:26 UTC
List:
ruby-core #86817
Koichi Sasada <ko1@atdot.net> wrote:
> OK. I assumed that this "step" API is used with "rb_gc_inprogress()". But it
> is not correct.
Right, inprogress is only a hint. I will add a comment to that effect.
As with ppoll + read, there is always a chance of work being "stolen"
by other threads :)
> ```
> + if (mutex->th == th) {
> + mutex_locked(th, self);
> + }
> + if (do_gc) {
> + /*
> + * Likely no point in checking for GVL contention here
> + * this Mutex is already contended and we just yielded
> + * above.
> + */
> + do_gc = rb_gc_step(th->ec);
> + }
> ```
>
> it should be `else if (do_gc)`, isn't?
Yes, I will fix.
> >One problem I have now is threads in THREAD_STOPPED_FOREVER
> >state cannot continuously perform GC if some other thread
> >is constantly making garbage and never sleeping.
>
> > nr = 100_000
> > th = Thread.new do
> > File.open('/dev/urandom') do |rd|
> > nr.times { rd.read(16384) }
> > end
> > end
> >
> > # no improvement, since it enters sleep and stays there
> > th.join
> >
> > # instead, this works (but wastes battery if there's no garbage)
> > true until th.join(0.01)
>
> I'm not sure why it is a problem. Created thread do `read` and it can GC
> incrementally, or if `read` return immediately, there are no need to step
> more GC (usual GC should be enough), especially for throughput.
I suppose.... Note: read on urandom won't hit rb_wait_for_single_fd
to trigger GC(*), but it will only trigger GC via string allocation.
(*) /dev/urandom can't return with EAGAIN, only /dev/random can
> >So maybe we add heuristics for entering sleep for methods in
> >thread.c and thread_sync.c and possibly continuing to schedule
> >threads in THREAD_STOPPED_FOREVER state to enable them to
> >perform cleanup. I don't think this is urgent, and we can
> >ignore this case for now.
>
> "cleanup"? do GC steps? I agree on them (requirements and immediacy).
Sure. Should I commit after adding "else" to mutex_lock?
Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>