Go的代码调优一例
2014-08-05
用tcpcopy导的线上流量,活动数据库也是真实的数据,这是我抓的一份pprof:
genius@geniuss-Macbook-air:~/project/src/dsp_masky $go tool pprof ls.prof Welcome to pprof! For help, type 'help'. (pprof) top Total: 14413 samples 1342 9.3% 9.3% 1342 9.3% strconv.ParseUint 1243 8.6% 17.9% 1243 8.6% runtime.duffcopy 1082 7.5% 25.4% 5067 35.2% dsp_masky/model/bid.(*BidServer).FilterByCampaign 1073 7.4% 32.9% 1824 12.7% runtime.mallocgc 638 4.4% 37.3% 638 4.4% runtime.MSpan_Sweep 555 3.9% 41.2% 555 3.9% settype 547 3.8% 45.0% 547 3.8% runtime.mapaccess2_fast64 513 3.6% 48.5% 1855 12.9% strconv.ParseInt 376 2.6% 51.1% 452 3.1% regexp.(*machine).add 337 2.3% 53.5% 2418 16.8% dsp_masky/model.regionQuery
消耗排前三的函数分别是ParseUint,duffcopy,FilterByCampaign。下面一条一条的分析。
优化duffcopy
我查了一下duffcopy这个函数,是一个类似memcopy的函数,将内存从一块复制到另一块。这个函数并没有由runtime中的任何库函数调用到,它是编译器生成的代码直接调用的。 为什么duffcopy如此之高?我在看mentor的编程习惯的时候找到了原因
Read full article from Go的代码调优一例
No comments:
Post a Comment