Mono虚拟机的当前性能如何?

时间:2009-07-19 14:22:53

标签: .net performance mono

Web上充满了不同语言,编译器和虚拟机的各种性能测试。然而,几乎没有任何一个使用一些真实场景来测试性能。此外,在Google上搜索这类基准测试通常只会产生几年前的基准测试,因为他们有最多的时间收集链接。

您是否真的了解不同虚拟机的当前性能?此外,我特别想知道Mono的性能与微软的.Net和Sun的Java相比如何,以及不同虚拟机的性能最近如何发展。

5 个答案:

答案 0 :(得分:12)

衡量绩效是一件复杂的事情。过去,当语言针对同一操作系统进行测试时,运行相同的硬件和非常有限的库集,可以创建可以提供测量系统的线性度量的基准。它会让人们从0到10评估事物,同化结果并快速进入下一个主题。

现代系统的情况变得更加复杂,因为需要考虑多个变量。

至少在Mono的情况下,有很多变量可以发挥作用:

  • 代码:

    • 生成的本机代码的质量。
    • 生成本机代码的速度。
    • 生成代码和优化代码所需的内存
    • 代码生成器是多线程的
    • 生成的代码是否是线程安全的
    • 在编译时或JIT时间是否利用CPU特定功能。
    • 是否可以使用SIMD说明。
    • 语言是否巧妙地映射到多核平台
    • 语言是否为优化程序提供了足够的参数来自动调整代码(与Fortran一样)。
  • 内存管理:

    • 使用垃圾收集算法
    • GC是否可以使用多个CPU进行扩展?
    • GC是增量还是实时?
    • 它是否支持线程本地存储以提高性能?
    • 它是精确的,紧凑的,世代的,保守的以及各自的混合物。
  • API设计:

    • 是否针对延迟或带宽设计了API
    • API支持自动扩展到多个CPU。
    • 你可以将重型工作卸载到GPU上吗?
    • 您的API是否支持流媒体接口

所有这些事情都非常复杂,并且很难给出简单的0到10答案。

如果您要在课程中对语言进行分区,并且您认为有能力且具有绩效意识的程序员,我会在这些课程中划分世界:

  • 第1层:由专业人员手动调整汇编语言
  • 第2层:静态编译的强类型语言:C / C ++ / Fortran /
  • 第3层:托管/ JIT语言:Java / C#/。NET / Mono / Boo / F#
  • 第4层:动态类型/ JITed语言:Google V8,IronPython,IronRuby
  • 第5层:纯解释语言:Python,Perl
  • 第6层:纯粹的解释型语言,为自己的利益提供了太多功能。

但是这些语言并没有描绘出整个画面,您将使用的API,托管操作系统和其他设施将对您的结果产生重大影响。

例如,最近在Mono中,我们增加了对使用更高级,高度优化的引擎(LLVM引擎)替换Mono代码引擎的支持。事实证明,找到一个使用LLVM的开销值得额外内存使用的测试非常困难:桌面和Web应用程序没有表现出太大差异。这可能是因为这些主要是受I / O限制的应用程序。

使用LLVM对于科学和计算密集型应用程序非常有用,但在现实生活中它与Mono的默认优化设置没有多大区别。

至于Mono的细节:尽管Mono确实使用了Boehm的GC,但大多数人都没有意识到Boehm可以通过各种方式进行配置。默认的外行配置确实不是很强大,但它适用于想要快速GC的每个人。 Mono在这种模式下不使用Boehm,Mono广泛配置Boehm以在精确模式下工作,同时利用线程本地存储,多核GC和释放内存到操作系统模式。

答案 1 :(得分:2)

要比较Java和Mono,您可以查看The Computer Language Benchmarks Game

答案 2 :(得分:1)

虽然我没有使用过Mono,但我想这取决于你用它做什么。我无法给出关于事物的确切数字,但这是关于Mono浮点性能的一个有趣的消息:

http://forums.xna.com/forums/p/24249/24249.aspx

由于Mono允许使用你的CPU的SIMD指令(我相信SSE2和SSE4)可以大大加速浮点计算,它可以在这种情况下吹掉.NET(速度提高10倍),正如图表所示(并希望微软很快会实现类似的东西,请使用.NET 4.5)。但是,该图表还显示,在不使用Mono.Simd时,.NET仍然比Mono快得多。并且你可以实现信仰的巨大飞跃,并将浮点性能的20%差异推断到其他领域,比如字符串性能。

然而,这就是Mono 2.2,因为现在Mono的移动非常快,所以事情可能会发生巨大的变化,或者我听说。

答案 3 :(得分:1)

今年早些时候使用benchmarkedSciMark2 Mono 2.0和2.2,发现Mono的性能略有提升,但仍远低于大多数其他VM。

答案 4 :(得分:0)

我知道这已经过时了,但我刚刚发现它并且当前的答案(甚至是米格尔)都没有解决你问题中的一个根本缺陷:虚拟机。

你似乎在这一点上被误导了。 .Net不使用VM,也不使用单声道。确实.Net使用运行时库,并且代码确实编译为IL以进行类似于Java的字节码的部署。但是,运行时不是虚拟机。不同之处在于,在部署之后,IL本身在执行之前完全编译为本机机器代码。无需虚拟机。