当前位置: 华文问答 > 数码

为什么国内 IT 公司 leader 以上就不怎么写代码,而据说 Google 的 Jeff Dean 还写代码?到底哪种情况好呢?

2015-01-08数码

因为Jeff Dean自己不写这些核心代码,那么世界上也许就没有第二个人能写出更好的答案了。

刚好自己最近就在写谷歌Sanjay Ghemawat的 tcmalloc的对标代码,做自研C/C++内存分配库,对标的是Google Tcmalloc库(Google著名的大牛Sanjay Ghemawat开发,Jeff Dean的搭档,The Google File System的第1作者,也是著名的MapReduce论文的第2作者),写得非常艰难。主要难在性能优化,谷歌这两位大神的代码虽然是十多年前的作品,细读下来,各种corner case的细节上,包括各种技巧的把握上,每一处细节都不浪费开销,一个内存分配库硬是几万行代码没有什么地方有硬伤,这就是顶级程序员最厉害的地方,这部分代码比那个时代同期的几个内存分配库性能高出几倍,挺传奇的。顶级程序员的功力,一般程序员给他再多时间再多人力,怕也是很难实现如此高性能的内存分配库。

近十多年,IT行业的软硬技术进步也是非常巨大的,所以考虑尽量用全部最新的软硬件技术,也许能快一些。目前正在写的自研内存分配库,已经完成的代码已经比tcmalloc库快了,重点是新增自动支持NUMA按cpu node分组分配内存(尽量分配近端内存,近端内存比远端大约硬件上延迟时间低三倍),自动支持hugepage2M/1G(自动将hugepage切成小片分配,访问速度更高),支持C++11中默认16byte对齐,SSE指令更加完美的支持。其它目标是更稳定平滑的内存申请释放时间开销,更小的内存碎片,更小的内存浪费。

从今年三四月份开始做,中间有其它一些小产品开发,所有代码均从头开始写,主要思路是尽量多使用CPU硬件新特性,一点一点覆盖掉tcmalloc库的功能,最核心的代码已经写完,还剩几处corner case,小规模测试中,在启用hugepage 2M的场景下大规模小字节块有接近一倍的性能提升,其中大部分来自于hugepage 2M的带来性能提升,所以计算机硬件本身的提升是根本,算法艰难的改来改去只带来了小部分的提升,测试16字节1000万条内存申请后再依次释放,平均每次申请13ns,每次释放7ns,每次申请+释放总体在20ns, 对比tcmalloc大约35ns。后续正式版弄完后,会放出一个二进制库的评估测试版,以及写一篇小文章简单介绍一下主要优化。一句话总结就是软件更好的支持硬件新特性,带来了性能提升。