Wednesday, November 29, 2006

作普罗米修斯还是西西弗斯?

假如你去饭馆儿吃饭,剩了不少,也许你觉得舍不得,于是打包回家。可事实上第二天你打开冰箱门时却发现你对这把冰箱弄得一股怪味儿的残羹剩饭毫无兴趣,直接奔垃圾箱去了。于是你既没有省钱,还发现冰箱中的其他食物因此而很腻歪。

就像这样,在波士顿我犯下了我一生中迄今为止最大的错误。把我所拥有的技术水准比作打包的剩饭,以备后用;而同时又想在商业上有所展足,但又不愿意放弃我的技术背景,想面面俱到,这个比作冰箱,结果呢?除了把自己弄得一身怪味儿外,毫无所获。就这样,摇摆不定,双双涉足。

不会抛弃,不会忘记,把自己多年来的技术经验奉为圣明,但实际上对纯粹的商业来说非但没有任何帮助,反而成为了沉重的负担,事实上以前的优势成了如今的劣势,一句话,没有坚定自己的思路。直到今天,我还在为此而付出沉重的代价。

关于这个问题,一会儿再谈。

看到坛子里许多人喜欢谈技术,那么好吧,就分2个部分写这一章,第一部分写技术,第二部分写非技术的东西。

公司总部和深圳完全不同。要知道那是在90年代,TCP/IP都不是广泛的被人了解,他们就已经开始研究Internet的安全市场了。我被分配到了研发部,所谓研发部,就是不赚钱的一个部门,纯粹的做一些前瞻性的研究,以准备将来的市场。应当说,我们当时做的研究其思想是相当简单而直接的:用硬件来进行Internet安全理念的设计,而不是软件。

简单地说,好比你家电闸上的保险,你得随手预备几个保险丝,一旦电闸上的保险丝烧掉了,那么你很快就可以换一个新的以保持供电系统的正常。

我们当时设计了数个Blade组成的阵列(7-8Blade),用来防范Brute-ForceDDoS。一个Blade中发现问题和异常,立马切换到另一个,重新配置,这样,不论黑客如何攻击,总有一个正常的转换开关,就好比保险丝一样。而且,每一个Blade都布置了强力的操作系统和软件,可以实现许多复杂的算法。虽然说理论上讲这并不能保证绝对的安全,但是这种伸缩性的设计确实可以在规定的操作规程基础上满足安全的需要,而且简单易行:需要的时候不过是关掉一个Blade,启动另一个而已。

这是典型的美国文化、美国设计:简单、实用而且维护方便,费用低廉。

这个研究部加上我,一共有15个人。他们几乎都是一色儿的MITPHD,而且硬件工程师居多,但他们只做到Firmware这一层,剩下的Linux嵌入式部分以及上层,由我和另2个新人来做。而我个人则主要负责Layer3以下的核心部分以及Interface,这也是总部为什么把我从深圳调来的原因。

虽然我从来没有做过嵌入式,但操作系统一向是我的强项,于是进展比较顺利。但有一个麻烦,就是SMP(对称多处理机系统)。那些PHD牲口们把Blade作的很复杂,而且每个板子上有2CPU。现如今的Linux,大约是从2.2吧?我记不得了,已经对SMP有了很好的支持,但当时的Linux核心却没有。当然UNIX早就有了SMP支持,但无法取得源代码。

于是自己设计SMP就成了我在波士顿立足的第一个利器。做得好,肯定立足,否则就只好灰溜溜的滚回深圳了。

我的思路很简单,比如一个公司的普通部门,一般都有2个领导:一个经理,一个技术负责人;在公司的日常运作中,此2人有一个分工,来处理所有的业务流,当 然大多数情况下是并行的。当然他们还要有合作,那么也就有了串行化的需要。SMP有一点点不同,因为现实中的经理和技术负责人是不同的,而SMP则是全面对称的。这样实际上简化了现实的情景。

那么在软件的角度来看,一个虚拟的域(Domination)组概念可以来模拟2个领导,很显然,还需要一个全局的Schedule来协调2个域。对于我的工作而言,我只要关心从MAC以及其它设备上传来的数据在SKT_B的基础之上加上一个Schedule对象、Domination对象,当然,也需要Spin-Lock这样的空旋锁定机制,我还需要把它改造成逐渐升级的空旋,从HIGH LEVEL上,肯定可以满足我的需要。

于是我把的Proposal提交了领导,Douglas,一位日后对我非常有影响的法国基督徒,MIT的教授。Doug很满意,说,你干吧。当然,在high level上,这个问题很直接,但实际上许多细节完全不适应于SMP,因为当时的核心架构在设计上压根儿就没有这样的意识。

我花了整整2个半月,终于完成了雏形。在测试的那一天,部门所有的人都坐在我旁边,加电、启动,在MAC上送来源源不断的数据,在Interface上,数据哗哗的,流畅、顺利,2CPU同时工作!!!哈哈。。成了!

Doug仔细看了看Log,点头说,good Job

当然,这仅仅是一个雏形,距离现实的应用还差距甚远。虽然如此,但我的Idea可以工作了,这是一件大大的喜事。

随后的几个月里,我加载了STACK,以一种弹性的一致的方式处理不同的业务需要,并最终通过了UNIX级别的BenchMark测试。换句话说,我做成了。以后我再没有接触过2.2以上版本儿的Linux核心,我不清楚他们是怎样处理SMP的,但我估计也不会比我的思路差多少。有知道的人我们可以切磋切磋。

顺理成章的,人事部门和我签了正式合同。

这一天,我高兴得在心里说,波士顿,我终于真正的来了!

顺便说一句,在中国,有一个很不好的概念,很多人总觉得一个程序员,一个搞所谓科技的人员就应该呆头呆脑,高高在上,把自己的工作和现实生活脱离开来,高处不胜寒,这是非常错误的。

软件不是科学,是工程,既然是工程,那么就和人们的生活没有多大的差别,不要成天把自己关在屋子里,2耳不闻窗外事,这不会成为一个好工程师。当你读一些看似不相干的闲书,看一些垃圾电视剧,甚至去酒吧喝酒泡妞儿,无形中都会让你理解人们的生活,对你的所谓技术会有极大的帮助!!

这是真的!如果你还意识不到这一点,那么就赶快醒悟把!

作普罗米修斯还是西西弗斯?下一篇,我开始写非技术的东西,写一些生活的事情,讲述讲述我的普罗米修斯经历和西西弗斯的悲惨。

大家耐心等一等吧。