Tracemonkey + JägerMonkey = ?


首先回應一下標題 Tracemonkey+JägerMonkey=SpiderMonkey
而SpiderMonkey則是Firefox的Javascriopt Engine (如下圖)


Tracemonkey 為Firefox 3.5開始採用的JIT (Just In Time compiler)
但有個缺點就是Trace 失敗時,會採用舊的方式執行Javascript (而這個方式很慢)

JägerMonkey 就是要改良這個問題的solution
它採用Method JIT + nitro assembler( this one is from WebKit)

###############以上只是單純的介紹#####################
而今天會寫這篇主要是想大約估計一下 Firefox 4.0 Javascript 會有多快
參考資料:

以下這些純粹只是大略估計,有一些假設的前提不一定符合現實狀況
1.假設TraceMonkey 跟 JägerMonkey 為不相依互相獨立
2.所有Javascript 在TraceMonkey成功時的速度 約為 W/O JIT的9倍快
3.所有Javascript 在JägerMonkey 約為 W/O JIT的3倍快(現在為2.66倍)

然後開始列國中的方程式吧! (以下代數單位皆為ms)

x=tracemonkey,y=JägerMonkey,z=target
o=original tracemonkey,w=W/O JIT

x+y=z
x+3y=o (x+2.66y=o)
9x+3y=w (9x+2.66y=w)

從最新資料代入數據(w=1850.3 ,o=694),解答z
x=144.54  , y=206.56  , z=351.1
可以從這邊注意到TraceMonkey 只比 JägerMonkey 稍微快一點
(從參考資料內得知JägerMonkey還有30個左右的bugs會拖累速度 未來會繼續改進)
351.1就是目前合體後的速度,  已經趕上apple Google的速度(但差別不大)
########################################################

假設最後JägerMonkey的速度進步到跟apple, google 的速度一樣快時
(JägerMonkey 就真的是W/O JIT的三倍快)
x=144.54 , y=183.15 , z=327.69
用這個來畫未來合體之後的效能參考線看看

最下面綠色線就是TraceMonkey + JägerMonkey最為理想的速度

結論:TraceMonkey 沒有想像中厲害,只比 apple, Google快 23%(還以為是好幾倍)
由於spidermonkey裡面JägerMonkey消耗的時間就佔據了一半以上
這樣會大幅度削弱了TraceMonkey的23%優勢,整個spidermonkey 只快了10%
未來如果要更強的話只有增加TraceMonkey trace的成功率
(或者將TraceMonkey 不容易trace成功的轉向JägerMonkey)

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s

%d 位部落客按了讚: