[#61424] [REJECT?] xmalloc/xfree: reduce atomic ops w/ thread-locals — Eric Wong <normalperson@...>

I'm unsure about this. I _hate_ the extra branches this adds;

13 messages 2014/03/12

[ruby-core:61608] Re: [REJECT?] xmalloc/xfree: reduce atomic ops w/ thread-locals

From: SASADA Koichi <ko1@...>
Date: 2014-03-20 08:12:23 UTC
List: ruby-core #61608
(2014/03/16 5:41), Eric Wong wrote:
> Should we care to support xmalloc/xfree in non-Ruby native threads?
> I think it's too much work.

How about this strategy using ?

# pseudo_code:

  size_t malloc_increase;
  atomic_size_t atomic_malloc_increase;

  def ruby_xmalloc(size)
    if is_native_thread? && has_gvl?
      malloc_increase += size
      if (malloc_increase + atomic_malloc_increase) > malloc_limit
        GC()
      end
    else
      atomic_update{atomic_malloc_increase += size}
    end
  end


Problem is the performance of `is_native_thread? && has_gvl?'.  Every time.


Or separate ruby_xmalloc() to rb_xmalloc(), it is for limited version
called only from  `is_native_thread? && has_gvl?'

# pseudo_code

  def rb_xmalloc(size)
    ... # code protected by GVL
  end

  def ruby_xmalloc(size)
    if is_native_thread? && has_gvl?
      rb_xmalloc(size)
    else
      atomic_update{atomic_malloc_increase += size}
    end
  end

-- 
// SASADA Koichi at atdot dot net

In This Thread