$30 off During Our Annual Pro Sale. View Details »

Ruby Lugdunum 2012: Message in a Bottle

Ruby Lugdunum 2012: Message in a Bottle

Konstantin Haase

June 23, 2012
Tweet

More Decks by Konstantin Haase

Other Decks in Technology

Transcript

  1. MESSAGE IN
    A BOTTLE
    Konstantin Haase
    Ruby Lugdunum
    June 23, 2012

    View Slide

  2. @konstantinhaase
    (I’m sorry about that)
    rkh on github

    View Slide

  3. Sinatra
    Rack, Tilt, Rubinius, ...

    View Slide

  4. View Slide

  5. View Slide

  6. View Slide

  7. View Slide

  8. View Slide

  9. View Slide

  10. Ruby 1.8 is slow because it's
    interpreted.

    View Slide

  11. Surprise!
    Ruby 1.9 is interpreted, too.

    View Slide

  12. THANKS

    View Slide

  13. Ruby

    View Slide

  14. Internals

    View Slide

  15. Performance

    View Slide

  16. View Slide

  17. RubyMotion

    View Slide

  18. WHAT WE’LL
    LOOK INTO
    MRI: method dispatch and execution
    Rubinius: inline caches and JIT
    JRuby: invokedynamic

    View Slide

  19. View Slide

  20. THEY JUST LOVE
    BYTECODE

    View Slide

  21. View Slide

  22. MRI

    View Slide

  23. Rubinius

    View Slide

  24. JRuby (JVM 1.6)

    View Slide

  25. View Slide

  26. Source Code
    Parser
    Parse Tree
    Interpreter Bytecode Compiler
    Bytecode
    Interpreter JIT
    Machine Code
    CPU
    VM

    View Slide

  27. THE PLAN
    Find Method
    Execute Method

    View Slide

  28. Performance

    View Slide

  29. HOW TO
    SPEED UP?
    Find Method Faster
    Execute Method Faster

    View Slide

  30. FIND
    FASTER
    Inline Cache (aka Call/
    Send Site Cache)
    Lookup Cache
    Inlining

    View Slide

  31. EXECUTE
    FASTER
    Reduce operations
    Just-in-time compilation
    Speed up search

    View Slide

  32. View Slide

  33. rb_method_entry
    rb_method_entry_without_cache
    search_method

    View Slide

  34. View Slide

  35. View Slide

  36. View Slide

  37. View Slide

  38. View Slide

  39. View Slide

  40. View Slide

  41. View Slide

  42. View Slide

  43. View Slide

  44. View Slide

  45. View Slide

  46. View Slide

  47. SPECIALIZED
    METHODS
    cached bytecode
    code with breakpoints
    specialized for arguments
    JITed code

    View Slide

  48. View Slide

  49. View Slide

  50. View Slide

  51. View Slide

  52. View Slide

  53. View Slide

  54. View Slide

  55. Process
    invokedynamic
    JVM method
    bootstrap guard fallback

    View Slide

  56. View Slide

  57. THANKS

    View Slide