[ruby-cvs:55113] normal:r47964 (trunk): cont.c: Optimize fiber_switch callees

normal at ruby-lang.org normal at ruby-lang.org
Thu Oct 16 07:35:09 JST 2014


normal	2014-10-16 07:35:08 +0900 (Thu, 16 Oct 2014)

  New Revision: 47964

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=47964

  Log:
    cont.c: Optimize fiber_switch callees
    
    Remove some unnecessary VALUE/struct conversions and aggressively inline
    functions used during fiber_switch. Either of these changes alone does
    not yield significant performance increase, but in combination they
    improve performance by ~6%.
    
    Arguably, removal of separate VALUE/rb_fiber_t* variables also makes the
    code more readable in a few places.
    
    * vm_core.h: declare rb_fiber_t typedef
      (rb_thread_t): fiber and root_fiber become rb_fiber_t * (from VALUE)
    * vm.c (rb_thread_mark): use rb_fiber_mark_self
    * cont.c (rb_fiber_t): prev becomes rb_fiber_t * (from VALUE)
      (cont_mark, cont_free): simplify conditions
      (rb_fiber_mark_self): new function
      (fiber_mark): use rb_fiber_mark_self
      (cont_save_thread, cont_restore_thread): inline
      (cont_restore_thread): simplify
      (fiber_setcontext): simplify conditions
      (rb_cont_call): remove dereference
      (fiber_t_alloc): update for rb_fiber_t->prev type change
      (rb_fiber_start): ditto
      (fiber_current): extract from rb_fiber_current
      (return_fiber): move, simplify type checks
      (rb_fiber_current): use fiber_current
      (fiber_store): simplify type checks
      (fiber_switch): ditto, simplify call to fiber_setcontext,
       use fiber_current
      (rb_fiber_transfer): update for type changes
      (rb_fiber_terminate): move, use fiber_switch
      (rb_fiber_resume): update for type changes
      (rb_fiber_reset_root_local_storage): ditto
      (rb_fiber_yield): use rb_fiber_switch instead of rb_fiber_transfer
      (rb_fiber_m_transfer): ditto
      [ruby-core:65518] [Feature #10341]

  Modified files:
    trunk/ChangeLog
    trunk/cont.c
    trunk/vm.c
    trunk/vm_core.h


More information about the ruby-cvs mailing list