在 2013 年 7 月的阿里技术嘉年华上,阿里巴巴核心系统研发部的王琤(长仁)分享了他们团队在计算密集型应用优化上的一些经验(观看视频, PPT 下载)。会后,InfoQ 中文站跟长仁进行了一次交流,了解他们在需求处理、团队组成与分工、与其他部门的合作方式等方面的一些情况。
嘉宾简介:王琤 / 长仁(微博: @王王争),阿里巴巴核心系统部专用计算组负责人。在阿里巴巴致力于专用计算的推广及实践,以追求最佳性能及性耗比为目的为特定应用针对特定硬件架构进行算法及实现优化。在图像搜索、机器学习等领域,针对特定 CPU 微架构,GPGPU 等不同体系结构进行关键算法及实现进行优化并获得了指数级的性能提升。同时负责淘宝 JVM 的开发工作,基于 OpenJDK VM 为淘宝定制、优化更加贴近应用需求的专用 JVM。
InfoQ:长仁你好,感谢接受我们的采访!您刚才的分享涉及到很多底层的优化,那现在,优化团队是怎么去和业务部门交互的?
长仁:现在流程不太一样。早期的时候,是我们去到处找需求。自己去找是很难的。
后来有一个突破,是因为我们核心系统有一个图像团队,他们意识到出了性能问题,主动要求我们来帮忙做一做优化。那么我们一做,就有了十倍的性能提升。
现在,需求方面有很大改观。一方面是由于我们有很多优化成果的积累,有了一定的口碑。另一方面,我们接触到越来越多计算密集型的应用,我们的工作就有了需求。由于我们有各种各样的成功案例,开始有越来越多的、阿里的其他的团队主动来找我们。
现在的流程是,兄弟团队找我们,和我们讲,应用是什么样子,现在有什么样的性能问题,然后我们就会跟着应用团队一起做 profiling,帮他们进行优化,上线测试。
未来的流程会不一样:我们现在正在做一个系统,System-wide profiling,也就是一个系统层面的直接,持续 profiling,我们会把这些 agent 点布到每一台机器上。Google 有一篇有关 google wide profiling 的论文。我们的方案也类似:自动感知哪些程序跑的慢,哪里跑得慢。我们现在正在做这个,已经有原型出来了,马上就要布到我们的 MPI 集群上。部署完了以后,将来就是谁也不用找谁了,系统一看就知道,这个程序这跑的比较慢,我们来去帮你优化。
InfoQ:这个系统方面的 profiling 是不是有点像应用层面的监控?
长仁:不是应用层面,不用应用改任何代码。我们在底层自动进行 profiling,应用跑在上面,性能数据我们就能大体知道了,比如说每一个时钟周期内平均执行多少条指令,跟理想值比跑得是不是慢了,程序里头具体哪个函数占的时间最长,我们都能知道。所以未来的流程就是,我们主动通过系统一看,哪里有问题,我们来帮你修哪里。
InfoQ:你们做的这些事情,是怎么让别人知道的呢?
长仁:做分享啊。为什么我每次分享的 PPT 的最后一页都是广告?分享对于我们来说就是去做广告。今天的分享也是做广告,招聘广告:没有广告的分享不是好广告。
InfoQ:你现在在阿里这边做性能优化,跟你以前在甲骨文做的事情有什么不一样?
长仁:甲骨文完全不一样。我在甲骨文是在 Application Product Group,应用产品的部门。我们在做的是一个自己的产品,叫 SDE,Solution Development Environment,它是一个 Solution 的开发平台。这个平台跟企业级应用靠的更近,跟互联网应用没关系,跟密集计算更没关系,所以跟现在完全不一样,但是有很多是相通的。相通的就是,你了解的越底层、越深,对于开阔你的思路,解决问题的方法是更有好处的。
InfoQ:你们团队的组成是怎样的?
长仁:我们团队很有特点:绝大部分都是应届生。真正有工作经验加入到团队的,目前为止,算上我,只有两个人,剩下的六个人全是应届生培养出来的。为什么?因为对于我们来说,社招生跟应届生区别不大。你想,我们优化 JVM,全国有多少人做 JVM 的?第一,很难找;第二,应届生培养也是培养,社招来了没准也需要培养,而我们的应届生同学都是非常优秀的,经过千挑万选来的,他们的学习能力很强,经过几年的培养,有的已经成为国内的首屈一指的。举个例子,你们都知道莫枢(注:莫枢在 QCon 上做过 JVM 定制改进的分享),JVM 在国内是顶尖的,那是我们团队的;还有洪熙,现在在 GC 这方面可能国内没有人比他更熟悉。
InfoQ:团队的分工大概是怎样的状态?
长仁:我们组就两大部分,专用计算跟 JVM。JVM 部分四位同学,剩下的都做负责计算方面的优化工作。分工还是很明确的,因为这两个领域差别比较大。我们是一个小团队,人不多,关键是干练。
InfoQ:所以,当一个需求过来的时候,你们跟应用开发团队是如何配合的?
长仁:流程刚才介绍过。客户来了,可能是各种各样的应用,如果是 Java Application,就是 JVM 组去处理;如果是计算密集型的应用需要优化,就由计算组去支持。
InfoQ:万一各种各样的应用都来找你们,你们不是得搞懂所有的应用?
长仁:是的,需要有很强的学习能力,同时,如果我们的客户多到那个程度就太好了。
InfoQ:你们团队的工作效果是如何评估的?性能提升了多少倍这样?
长仁:这个问题特别好。为什么?一般的人会觉得,你们的评估标准是不是提升了十倍,几十倍这些,但恰恰不是这样。对于我来说,我们提升几倍十几倍几十倍都是家常便饭,但是这些从来都不是我们的 KPI。
真正的成绩是什么?成绩就是用户真正的用上,在线上使上,产生了好的结果。为什么要这样?因为在一个互联网企业,做一个工作必须要有结果;而且互联网企业节奏是非常快的,没有时间让你做纯研究性的东西,你做的东西必须有人用上,带来好的效果,这是最重要的。
所以我们的要求是很严格的:第一,技术有难度;你二,还必须要有好的结果。其实回顾一下我们的时间都用在哪儿,对于我来说就是,1/3 的时间做优化,1/3 时间推广上线,还有一个 1/3 是培养新人。对于我们组的员工来说就是基本上一半一半,一半的时间在写代码做调优,一半的时间在找应用来推广,或者出去做广告。所以,很多外面的同学会觉得,你们做得东西真好,有那么好的效果;但是你真正来了以后就知道,优化本身不是最难的东西,最难的是让用户真正的使上,产生效果。有时候由于各种原因,你做的东西可能最后用不上。
InfoQ:万一有的同学,他就是不擅长推广,但是他特别擅长做这个东西,这样也不行么?
长仁:有这样的同学。但我们标准就是这样,看结果。学会推广是必要的技能,必须要做,所以我们的同学其实确实挺苦。有的同学性能虽然提升很多,因为推不上去,没有用上,没有结果,最终年底 Review 就会很低。
InfoQ:底层这块是相对枯燥的领域,你们每年要如何吸引新鲜血液的加入?
长仁:这个领域确实是比较小众的,每年的应届生里边就几个对口专业的有一些人才,这里面还不是所有的人都想来。
这个领域不像其他领域,比如出了一种新语言,或者 Web 编程一种新的设计模式,或者新的架构,大家都在聊。这些东西确实太底层,真正对它有兴趣的人很少,有机会来做这个的人也很少,两者叠加确实人很难找。
所以我们现在就是应届生培养,来了以后先“洗脑”,告诉他这个东西很重要——越没有先前观念的,他越能接受;另外一部分人,确实奇葩中的奇葩,天生就爱这个,那就最好。我们组三年,现在算上我才有八个人,每年转换的应届生就一到两个人。
吸引点有几个,阿里巴巴公司品牌是一个,同时,我们做的工作对于对这个领域有兴趣的同学会很有吸引力,因为在企业里专门从事这个领域的机会的确不多。
InfoQ:您自己是属于对这方面有特别爱的?
长仁:我目前看搞这块,就三类同学:第一,自发的有兴趣,就是喜欢。这个就属于天生爱,你让我改行,我也不适应。
第二类同学是被逼的。这类同学,实验室导师也好,或者工作领导,就是让他干这个,为了生计他也就干了。他可能不喜欢,但是他干了以后也有成长。
第三类是被启发的。他可能以前没意识到,然后当自己技术发展到一个瓶颈的时候,比如说一个程序员发展到架构师了,以后不知道哪些方面是发展的方向,比较迷茫,技术上也得不到突破。很多人会遇到这样一个技术的瓶颈期。然后他可能偶然的,比如偶然接触到一些硬件的知识,软件究竟在硬件上是怎么跑的,我们怎么能提升那么多倍性能,可能他就觉得这像打开了一扇大门,进入了一个新的领域,他觉得很好奇,开始在这个领域里探索摸索,这是被启发的。
像今天我的分享,我相信里面很多人可能听不懂,但是会给他一个启发,会让他觉得其实这个领域应该关注关注。
评论