软硬件协同优化能取得什么样的效果?
今年2月份我们对外宣布一个数据测试的结果。在10台服务器上可以把一个台序做到470秒,公开的X86服务器上,或者别的公司做的,发现我们10台机器达到别人20、30台机器达到的效果。硬件有水分很大的,大家看自己的笔记本电脑,十几年了,CPU的性能发生几千倍了,怎么还是那么慢?就是因为你的硬件数据没有被充分的挖掘出来。你大数据平台,必须充分挖掘你的硬件的潜力,才能更好的发挥出来。
硬件线上必须要有足够大的内存带宽支撑他,所以我们会设计高达128G内存通道的带宽来支持一个线程。我们可以80M的L3G缓存上去。刚才介绍了硬件的东西,后面做详细的介绍。
比如说,有四种不同的颜色的方块,每一个代表CPU流水线某一种处理器。读写指令,分支预测,只有两种线程跑的话,等着取数据,写数据,需要等待,需要判断,会造成流水线的闲置。只有两用线程可以跑出来,就会有很多CPU的资源是被空闲的。但是CPU也不是越高越好。对不同类型来讲,本身最优值有可能不一样的,直接默认最高设置就好了。确实有些应用设置更低一点。我们有些资源是被线程共享的,那些资源正好被你这几个线程征用了,可能确实把它降下来。硬件给你提供这样的性能,还需调一调,别放在那里不管了,可能没有挖掘出来充分的潜力。
第二个例子,怎么样把下一个要读的数据设起来。可以设置一次取十行,还是十二行,类似这样的概念。你读的时候,写操作是不是预先取?比如要写第二行,是不是也让他帮你提前取出来。如果对数据的访问不是连续的,写第四行,跳着写,能不能也开一个策略,能够有这样的测试?对大数据应用来讲,本身数据的存储比较线性,比较规律的。可以尝试写一个把所有的调的预取的策略全部的打开,可能会有很大的兴趣。
调优可能有点老生常谈,简单讲一讲我们的经验。你需要针对应用每一个场景做针对性的JVM调整,有一个28法则,可能花20%的时间能够得到80%的效果,这个规则是成立的。怎么达到这一点?我们两步走。第一步调JVM调到合适。第二步有些运行时优化的参数可以打开。