Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
The future of Ruby is faster
Search
Dirkjan Bussink
June 29, 2013
Technology
580
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
The future of Ruby is faster
Talk given at Euruko 2013
Dirkjan Bussink
June 29, 2013
More Decks by Dirkjan Bussink
See All by Dirkjan Bussink
Managing a widely distributed team
dbussink
1
210
Time
dbussink
0
160
The tricky truth about parallel execution and modern hardware
dbussink
0
400
Security for dummies
dbussink
1
210
The myth of dynamic language performance
dbussink
3
520
Rubinius - Tales from the trenches @ Railsclub.ru 2012
dbussink
2
240
Rubinius - Tales from the trenches @ Baruco 2012
dbussink
1
300
Rubinius Eurucamp 2012 Workshop
dbussink
2
160
Rubinius Euruko 2012 Lightning talk
dbussink
2
280
Other Decks in Technology
See All in Technology
AI Native Platform Engineering 〜PlatformとAgileで“作る速さ”を“価値”へ〜
uya116
0
440
.NET WebAssemblyで実現するクライアントサイドAI推論:NuGetからViteまで、2つのエコシステムを繋ぐビルド戦略
yamachu
1
1.1k
エージェントはローカル、検証はMicroVM — Lambda MicroVMsでつくるServerless CI
fujioka6789
4
870
なぜAI任せのゲームは面白くならないのか?
hirohasuyoutube
0
280
Lambda MicroVMsが分からなすぎたので使い所を1から考えてみた
tsukuboshi
1
220
AIエージェント時代のPlatform as a Product —— テックリードがPdMとして回す発見・導入・計測 / Platform as a Product in the AI Agent Era
toshi0607
1
500
C#未経験の僕がAIに読めるコードを書かせるまで
maguroalternative
0
340
AWS FinOps Agent 結局何が得意なの?
siromi
0
220
【Findyテック文化祭ワークショップ】新卒エンジニア&採用担当と作る、 なりたい姿と今やるべき一歩
dip_tech
PRO
0
150
特殊変数大全
dak2
0
170
雪かき部 #7 もう怖くない!SELECT文!
foursue
0
150
AI臭い文章とは何なのか
nasuvitz
36
72k
Featured
See All Featured
Designing Powerful Visuals for Engaging Learning
tmiket
1
580
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
700
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
550
Skip the Path - Find Your Career Trail
mkilby
1
240
Agile that works and the tools we love
rasmusluckow
331
22k
Faster Mobile Websites
deanohume
310
32k
How Software Deployment tools have changed in the past 20 years
geshan
2
34k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
380
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
2
2.9k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.7k
Transcript
The future of Ruby is faster Euruko 2013 Saturday, June
29, 13
Dirkjan Bussink @dbussink Saturday, June 29, 13
Rubinius Use Ruby Saturday, June 29, 13
Saturday, June 29, 13
Saturday, June 29, 13
“Everything you heard about Ruby being slow is not true.
It’s about twice as slow as that” Saturday, June 29, 13
Saturday, June 29, 13
The lure of the hash table Saturday, June 29, 13
class MethodTable def initialize @methods = {} end def store_method(name,
code) @methods[name] = code end def find_method(name) @methods[name] end end Saturday, June 29, 13
class Address def initialize @instance_variables[:street] = "Pantheon" @instance_variables[:number] = 1
@instance_variables[:city] = "Athens" end end Saturday, June 29, 13
Hash tables everywhere! Saturday, June 29, 13
Inline caching Saturday, June 29, 13
p = Person.new p.name Saturday, June 29, 13
p = Person.new p.name <receiver_class_id, code> Saturday, June 29, 13
“There are 2 hard problems in computer science: caching, naming,
and off-by-1 errors” Saturday, June 29, 13
Global serial number Saturday, June 29, 13
http://jamesgolick.com/2013/4/14/mris-method-caches.html https://charlie.bz/blog/things-that-clear-rubys-method-cache Saturday, June 29, 13
Per class serial number Saturday, June 29, 13
Probably in 2.1 Saturday, June 29, 13
Instance variable packing Saturday, June 29, 13
class Address def initialize @street = "Pantheon" @number = 1
@city = "Athens" end end Address.instance_variable_get("@seen_ivars") => [:@street, :@number, :@city] Saturday, June 29, 13
0001: push_ivar :@number self[1] Removes hash table lookup Saturday, June
29, 13
Just in time compilation Saturday, June 29, 13
def method1 1 + method2 end def method2 2 +
1 end 100000.times do method1 end Saturday, June 29, 13
def method1 1 + method2 end def method2 2 +
1 end 100000.times do method1 end ... 0x110ed90e7 mov $0x9, %eax 0x110ed90ec jmp 0x119 ; 0x110ed9129 ... 0x110ed9129 addq $0xa0, %rsp 0x110ed9130 pop %rbp 0x110ed9131 ret Saturday, June 29, 13
def method1 1 + method2 end def method2 2 +
1 end 100000.times do method1 end ... 0x110ed90e7 mov $0x9, %eax 0x110ed90ec jmp 0x119 ; 0x110ed9129 ... 0x110ed9129 addq $0xa0, %rsp 0x110ed9130 pop %rbp 0x110ed9131 ret b0100 (4) b1000 (8) b1001 (9) Saturday, June 29, 13
def method1 1 + method2 end def method2 2 +
1 end 100000.times do method1 end ... 0x110ed90e7 mov $0x9, %eax 0x110ed90ec jmp 0x119 ; 0x110ed9129 ... 0x110ed9129 addq $0xa0, %rsp 0x110ed9130 pop %rbp 0x110ed9131 ret b0100 (4) b1000 (8) b1001 (9) Saturday, June 29, 13
Saturday, June 29, 13
Creating less garbage Saturday, June 29, 13
a = Address.new a.street = "Pantheon" a.number = "1" a.city
= "Athens" Rubinius.memory_size(a) => 56 VS Rubinius.memory_size(a) => 160 Saturday, June 29, 13
Saturday, June 29, 13
2.1 Saturday, June 29, 13
Auto tuning Saturday, June 29, 13
Parallelism Saturday, June 29, 13
Higher throughput Saturday, June 29, 13
Concurrency Saturday, June 29, 13
Shorter stop the world Saturday, June 29, 13
thread 1 thread 2 thread 3 Saturday, June 29, 13
thread 1 thread 2 thread 3 GC thread Saturday, June
29, 13
thread 1 thread 2 thread 3 GC thread Long GC
pauses be gone! Saturday, June 29, 13
http://rubini.us/2013/06/22/concurrent-garbage-collection/ Saturday, June 29, 13
How much does it help? Saturday, June 29, 13
Before Saturday, June 29, 13
Lifting the server siege... done. Transactions: 501 hits Response time:
0.02 secs Transaction rate: 51.70 trans/sec Throughput: 1.46 MB/sec Concurrency: 1.00 Longest transaction: 0.15 Shortest transaction: 0.01 Saturday, June 29, 13
Lifting the server siege... done. Transactions: 501 hits Response time:
0.02 secs Transaction rate: 51.70 trans/sec Throughput: 1.46 MB/sec Concurrency: 1.00 Longest transaction: 0.15 Shortest transaction: 0.01 Sad long wait time :( Saturday, June 29, 13
Lifting the server siege... done. Transactions: 1032 hits Response time:
0.04 secs Transaction rate: 102.79 trans/sec Throughput: 2.91 MB/sec Concurrency: 4.00 Longest transaction: 0.28 Shortest transaction: 0.02 Saturday, June 29, 13
Lifting the server siege... done. Transactions: 1032 hits Response time:
0.04 secs Transaction rate: 102.79 trans/sec Throughput: 2.91 MB/sec Concurrency: 4.00 Longest transaction: 0.28 Shortest transaction: 0.02 Not so good concurrency Saturday, June 29, 13
After Saturday, June 29, 13
Lifting the server siege... done. Transactions: 599 hits Response time:
0.02 secs Transaction rate: 61.06 trans/sec Throughput: 1.73 MB/sec Concurrency: 1.00 Longest transaction: 0.03 Shortest transaction: 0.01 Saturday, June 29, 13
Lifting the server siege... done. Transactions: 599 hits Response time:
0.02 secs Transaction rate: 61.06 trans/sec Throughput: 1.73 MB/sec Concurrency: 1.00 Longest transaction: 0.03 Shortest transaction: 0.01 No more long pause! Saturday, June 29, 13
Lifting the server siege... done. Transactions: 1374 hits Response time:
0.02 secs Transaction rate: 176.38 trans/sec Throughput: 5.00 MB/sec Concurrency: 3.99 Longest transaction: 0.04 Shortest transaction: 0.01 Saturday, June 29, 13
Lifting the server siege... done. Transactions: 1374 hits Response time:
0.02 secs Transaction rate: 176.38 trans/sec Throughput: 5.00 MB/sec Concurrency: 3.99 Longest transaction: 0.04 Shortest transaction: 0.01 More req/s! Saturday, June 29, 13
1 client: 51 => 61 req/s 4 clients: 102 =>
176 req/s Saturday, June 29, 13
Concurrency & parallelism Saturday, June 29, 13
No GIL/GVL! Saturday, June 29, 13
Future is multi-core Saturday, June 29, 13
We need new API’s Saturday, June 29, 13
Parallel each Saturday, June 29, 13
Thread safe collections Saturday, June 29, 13
What about you as a developer? Saturday, June 29, 13
Be nice Saturday, June 29, 13
Write type stable code Saturday, June 29, 13
Small and simple methods Saturday, June 29, 13
Benchmark! Saturday, June 29, 13
? Saturday, June 29, 13