luajit 开启FFI + jit之后彪悍的性能

Posted 彪哥分晓

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了luajit 开启FFI + jit之后彪悍的性能相关的知识,希望对你有一定的参考价值。


    之前我们有一个模块是需要与nginx worker 并行运行提供辅助功能,这个模块使用了C语言作为开发语言在代码运行效率上没有任何问题。最近为了优化服务部署结构需要优化这种类似“sidecar”的协助程序,所以将这个C模块的功能又重新使用lua实现了一遍。在这次改造实现的过程中使用了FFI + jit 技术,同时lua代码结构和C的代码结构、数据结构保持一致。年前最后一个周末我抽空做了lua和C的代码性能测试。测试效果非常令人惊叹!!!


第一行 PID 2516 jit.off

第二行 PID 2511 jit.on

第三行 PID 2517 是C写的对照程序 -O2优化


使用C语言和lua实现功能完全等价的模块(此模块是生产使用模块)。其中lua代码没有刻意为了能让luajit 发挥jit功效的方向做代码编写,完全遵循易读与业务逻辑清晰这两个基本原则实现。


总结

  1. luajit 在不开启jit的情况下代码执行性能约是C的 57%

  2. luajit 在开启jit以后性能约是C的 87% 

  3. 开启jit选项提升代码性能约 60%

  4. 开启jit后可比不开启jit节省 15%的内存


    

    在使用openresty这个基于 nginx + luajit 这俩性能非常强悍的平台之上的平台继续开发程序可以以脚本编写代码的开发速度和代价产生接近C性能的程序,非常值得我们广泛使用。


    作者本人已经在生产中广泛使用openresty做业务代码开发,不仅仅是做网关和流量转发还包括业务逻辑处理、数据库读写、与其他系统交互等。欢迎大家与我多交流探讨。




wrk 系列文章推荐



以上是关于luajit 开启FFI + jit之后彪悍的性能的主要内容,如果未能解决你的问题,请参考以下文章

luajit VS C,运行性能超过C?

解决luajit ffi cdata引用cdata的问题

为啥 LuaJIT 这么好?

luajit啥时候有的

LuaJIT ffi cdata 和 Torch Tensor 之间的最佳转换

如何用 Valgrind 检测使用 LuaJIT FFI 过程中的内存泄漏