Archive

Posts Tagged ‘JIT’

大事不好, IE/Edge的JS引擎Chakra也要开源了!

December 5th, 2015 No comments

https://blogs.windows.com/msedgedev/2015/12/05/open-source-chakra-core/

下个月开源, 源代码会放在github上.

作为一名搞JS/JIT, 同时业余安全的从业而言, 面对这个新闻, 怎么说呢, 感觉就是突然间邻村一个开金矿的大佬, 突然将金矿改成免费公园了…心情复杂得很.

Firefox/SpiderMonkey的龙芯MIPS64后端

November 1st, 2015 1 comment

不久之前写过一篇博客[1]为龙芯CPU”辩护”, 解释为什么龙芯CPU的JavaScript性能会很低.

就我个人的经验而言,龙芯的 SunSpider 性能差异更多的应该是在软件层面。现代的浏览器都通过(多个层级的)JIT来对JavaScript进行加速,开启和关闭JIT的SunSpider、Kraken、Octane 跑分差异可能会相差20~30倍。使用 iPhone 的同学可以在 Safari 和微信自带的浏览器中测试对比下速度差异(iOS 中只有 Safari 可以开 JIT)。三大开源浏览器JIT引擎对于龙芯采用的MIPS后端的支持都还很初级,甚至还不能正常使用。龙芯官方[6]和开源爱好者[5]的数据也印证了龙芯CPU跑 JavaScript 的尴尬。软件层面的缺失,或者往大了说,生态环境的问题,也是龙芯(MIPS架构)需要面对的一个大问题。

但是现在情况可能就要大不同了. 中科梦兰(龙芯系)的 heiher[2] 同学在今年开始频繁地向 Mozilla 提交MIPS64后端代码[3], 相信启用了JavaScript JIT的 Firefox 在龙芯CPU会有很大的性能提升. 到时候(瞎猜)快个20倍也说不定哦 😉

[1]: 龙芯CPU的JavaScript性能

[2]: http://hev.cc

[3]: Bugzilla User Activity

[JS-internals] Jit DevTools 0.0.1

June 18th, 2015 No comments

转发,我一直期待(但是自己没有做)的工具之一:

Nicolas B. Pierron via lists.mozilla.org

Hello everybody,

I am please to do an early announce a new tool named Jit DevTools.

This new tool is an addon which mostly target Jit developers.  It uses the recently added Debugger.onIonCompilation hook to display the latest MIR [1] and LIR graphs within the dev tools.

To use this tool, go to a web page, and open the Jit DevTools panel, then wait until a function got compiled.

Once a function is compiled, you can select a compiled script, which will display the MIR graph of the compilation.  If you need to, you can also have a look at the LIR graph.  The output is similar to the one rendered with iongraph [5].

By selecting any inlined script, the background of the block titles will change color, if the block correspond to the inlined instance.  This feature is quite useful to identify how a function plays in a compiled script.

You might find this tool quite handy to use for the following use cases:
– Investigating DOM optimization.
– Investigating jsperf issues.
– Comparing function implementations, and impacts on the generated code.

This addon works on optimized builds, and even with parallel compilation enabled.

You can download [2] this early version from http://people.mozilla.org/~npierron/jit-dev-tools/ , or build it your-self by using the sources [3] with jpm tool [4].

Have fun, and enjoy.

[1] http://people.mozilla.org/~npierron/jit-dev-tools/jit-dev-tools-0.0.1.png
[2] http://people.mozilla.org/~npierron/jit-dev-tools/jit-dev-tools-0.0.1.xpi
[3] https://github.com/nbp/jit-dev-tools/
[4] https://developer.mozilla.org/en-US/Add-ons/SDK/Tools/jpm
[5] https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey/Hacking_Tips#Using_IonMonkey_spew_%28JS_shell%29

龙芯CPU的JavaScript性能

June 14th, 2015 No comments

这是4月份的新闻的评论,一直没有时间来写,拖了两个月了。

四月份的时候,类似“龙芯性能不到iPhone6 A8性能的1/10?”的新闻[1][2][3]又一次把龙芯拉出来被人吐槽。其中出现 1/10 对比的一项是 SunSpider 测试,SPEC CINT2000 的测试差异没有那么大。另外没有贴出来 SPEC CFP2000 的分数对比。

作为一度天天跑SPEC和SunSpider等Benchmark的人来说,新闻中的测试报告是没有可信度的。性能测评需要有一套完整的流程,才能够确认自己获得的测评分数是正确的。不同的环境设定、软硬件组合、是否联网[7]等都会影响到SPEC的测评分数。

[4]中有人提供了反面的数据,表达另一种可能性。

就我个人的经验而言,龙芯的 SunSpider 性能差异更多的应该是在软件层面。现代的浏览器都通过(多个层级的)JIT来对JavaScript进行加速,开启和关闭JIT的SunSpider、Kraken、Octane 跑分差异可能会相差20~30倍。使用 iPhone 的同学可以在 Safari 和微信自带的浏览器中测试对比下速度差异(iOS 中只有 Safari 可以开 JIT)。三大开源浏览器JIT引擎对于龙芯采用的MIPS后端的支持都还很初级,甚至还不能正常使用。龙芯官方[6]和开源爱好者[5]的数据也印证了龙芯CPU跑 JavaScript 的尴尬。软件层面的缺失,或者往大了说,生态环境的问题,也是龙芯(MIPS架构)需要面对的一个大问题。

[1] http://www.leiphone.com/news/201504/aCIGktK8BJgon9BV.html

[2] http://tech.163.com/15/0406/14/AMHCJ04K000915BD.html

[3] http://tech.sina.com.cn/zl/post/detail/it/2015-04-09/pid_8476155.htm

[4] http://tieba.baidu.com/p/3684400301

[5] http://www.lingcc.com/2010/06/28/10983/

[6] http://www.loongson.cn/dev/ftp/doc/07FAQ/%E9%BE%99%E8%8A%AFFAQ_V0.8.pdf

[7] 我有一次跑SPEC的时候没有拔掉网线,结果内网MDNS广播风暴导致性能掉了非常多,内核处理TCP/IP需要跟Benchmark抢占资源。

从头写一个JIT?从这篇文章开始吧 :-)

June 15th, 2013 No comments

http://blog.reverberate.org/2012/12/hello-jit-world-joy-of-simple-jits.html

JIT非常的复杂——我学了好多年都没有学会 🙂 ——但是如果你想象一下最简单的JIT是什么样子, 那么它其实就是一个printf语句而已. 根据一些输入, 打印一些二进制的字符串到内存, 恰好这个内存是可执行的, 事就这样成了. 作为Demo, 作者在这篇文章中为 Brainf_ck 这种异类的语言实现了一个简单的JIT.