高性能接入 sever 开发优化

      

高性能接入 sever 开发优化

作者: kingsleer (1 篇文章) 日期: 九月 28, 2011 在 10:36 上午

原帖地址:http://software.intel.com/zh-cn/blogs/2011/09/28/sever/?cid=sw:prccsdn2024


从事高性能后台服务的开发2年,做大的支持是17w/s的访问100%cpu。这个数据是前几天在一个Server终极测试中得出的。其实后台服务器的反映快慢取决于其服务的类型。几个数据是这样的。

内存访问:300w/s.即us级别。访问一次300ns。

sock访问us级别。

磁盘访问ms级别。包括数据库。

如果只靠访问内存,你的Server应该处理30W/s的访问才能算达到要求。这个后续主要受限于fd的通知机制和高并发能力的epoll框架。当在网络层做到内核级优化,并且尽可能去掉内核中的锁,应该提高到40w/s甚至50w/s的访问。

高性能接入的关键是网络接入的性能和高效的通知机制。高性能对的网络处理必须的借个原则:

1.绝不能在网络处理部分加锁。

2.采用单进程的比共享的所效率提升3倍,加锁使网络吞吐能力大幅下降。

3.使用内存暂存数据,内存的管理必需预先分配好,寻找任一块的内存做到O(0).内存管理算法,这里大家去研究。我所处理的是分布式系统的高并发接入机,其中还涉及到后端的cache服务器的路由等。这个业务是server的逻辑,这个一块路由的设计也是有讲究的。要想最短的路由时间,必须设计可靠的内存访问和O(0)的路由查找算法。这一方面相信大家也应该懂了。

4.共享内存的访问跟内存访问一样。不过实际生产环境中往往需要对共享内存加锁。加锁使用信号量来实现。现在知道posix那一套多么牛X了。进程之间的通信,优选posix。经过测试表明,system V的接口比posix接口慢50%以上。显然现代的更先进。

5.去掉代码中的STL的链表,vector等操作,采用代替方案。对性能有非常大的提升,对减轻CPU消耗贡献巨大。良好的程序架构是减少bug的最好途径。代码需要反复检查。在分布式系统的访问都是多状态的。状态机的各部分处理是核心。需要对每一次请求做出最少的代价,需要很多脑筋可动的;包括代码的减少和函数的调用。很多系统调用代码,自己采用简单的方法实现。

6.减少时间函数的待用。缓存系统时间是一个非常好的优化,将时间用于整个处理的流程中几倍可以将cpu降低10个百分点。减少了系统空间和用户空间的调用。有兴趣可以看看内核代码。linux取的时间是不准确的,取时间需要加锁。进入内核空间,去读取cmos的时钟数据。每次更新系统时间都是原子性的操作。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值