Xinfeng Liu

http://developers.sun.com.cn/blog/lxf/date/20090723 星期四 七月 23, 2009

SUN的CMT芯片性能揭密

也搞它一回标题党。

最近SUN新发布了主频为1.6GHz的CMT芯片,再创了几项世界纪录。CMT芯片已经问世几年了,不少人对它并不陌生,但是很多人对它仍然十分困惑。如果跑得好,这种装了CMT芯片的Sun T系列小服务器在性能上可以打败很多高端Unix服务器;如果跑得不好,它比你的笔记本都慢好多倍。更多的人喜欢拿CPU主频来判断性能应该是慢几倍还是快几倍,这是完全错误的。有这种想法的人最好学习一下processor architecture, 了解一下什么是cache, out of order execution, pipeline, superscalar, hardware prefetch, memory control unit等等,再来谈CPU的性能问题。

当用户购买一个系统时,他们更关心的是跑实际应用的性能如何,而不是CPU的那些性能参数的理论值。这正是CMT芯片的价值所在。不少人写一个简单的单线程小程序来测试CMT芯片的性能,这种单线程的小程序甚至几乎不需要访问内存,最后的结果你会发现它比你的笔记本慢10倍。但是这种小的测试程序可能完全不能反映实际应用的性能情况,因为workload characteristics 完全不具备相似性。为什么CMT在某些实际应用中会表现那么出色呢,这里有详细的解释:

Why does 1.6 beat 4.7?

当然,由于CMT芯片的特殊性,用户和销售人员最好事先评估一下应用的特点也就是workload characteristics。选对了应用,用CMT芯片物超所值。选不对,结果也会让你大吃一惊。

Solaris上的编译器兼容性问题

源自最近的一些内部讨论。对于一些大型应用,可能会遇到要混用一些在不同操作系统版本以及不同编译器版本编译出来的binaries。应用开发者常常会对此感到担心。

对Solaris和Sun的编译器来讲,要注意以下几点:

  • 在老版本Solaris上编译出来的binaries(可执行程序executable, 共享库.so, .o文件,.a文件)可以在新版本的Solaris上使用,但反过来则不保证可以。此处的“使用”是指运行(run),运行时链接(runtime link)或编译链接(link editor)。
  • 不要用老版本的编译器对在新版本的编译器编译出来的.o或.a进行编译链接。因为不保证其正确性。


其原因是:在新版本的Solaris或新版本的编译器编译出来的binaries可能会隐含使用新版本增加的一些interface,这些interface在老版本的Solaris或编译器中不存在。


举例:一个程序和它用到的一部分.so在Solaris 8上用旧版本的编译器编译出来,另一部分.so在Solaris 10上用新的编译器编译出来。然后把所有这些放到Solaris 10上运行是O.K的。

以上论点有个前提:应用程序只使用Solaris和编译器的public interface。否则的话没有任何兼容性保证可言。用户可以使用Sun提供的appcert工具(http://www.sun.com/software/solaris/programs/abi/appcert.xml)做一些验证。

大的原则:软件通常只保证后向兼容;应只使用操作系统和编译器的公开接口。

/Xinfeng