织梦CMS - 轻松建站从此开始!

罗索实验室

当前位置: 主页 > 啰嗦IT > 架构与思路 >

设计性能良好系统的指导思想

落鹤生 发布于 2013-10-19 13:57 点击:次 
每一个到来的分组都会引发一个中断。在现代的流水线方式的处理器上,每个中断都会打断CPU流水线、干扰缓存的工作、要求改变内存管理环境,并且强迫保存相当数量的CPU寄存器。因此,在发送数据时将TPDU的数量减少n倍,则中断数和分组开销也相应减少n倍。
TAG:

规则1:CPU速度比网络速度更加重要

简而言之,如果将你的CPU的速度加快一倍,那么你通常可以获得接近两倍的吞吐量。仅仅将网络的容量加倍通常没有效果,因为瓶颈一般在主机上。

规则2:减少分组的数量可以减少软件的开销

每一个到来的分组都会引发一个中断。在现代的流水线方式的处理器上,每个中断都会打断CPU流水线、干扰缓存的工作、要求改变内存管理环境,并且强迫保存相当数量的CPU寄存器。因此,在发送数据时将TPDU的数量减少n倍,则中断数和分组开销也相应减少n倍。

规则3:是环境的切换次数最少

环境切换(比如从内核模式切换到用户模式)对于性能有严重的影响。如同中断一样,他们 也具有一样的坏特性,最糟糕的是导致原谅大量的缓存无法命中。通过以下的方法可以减少环境切换:让发送数据的库过程在内部建立一套缓冲机制,直到有了相当 的数量的数据之后才真正调用发送过程。类似地,在接收端,进来的小TPDU应该被收集起来,然后再成批地而不是单独地传递给用户,这样可以使环境的切换次 数尽可能减少到最少。最好的情况是,一个进来的分组会导致从用户模式切换到内核模式,然后再切换到接收进程,并将心到达的数据交给它。

规则4:使复制操作的次数减少到最少

比多次切换更糟糕的是多次的复制操作。对于一个新到达的分组,在提取它的TPDU之前 对该分组执行了3次或者4次的复制操作。当网络的接口卡将一个分组接收到专门的卡上硬件缓冲区之后,该分组通常需要被复制到内核缓存区中,在内核中,它又 被复制到网络缓冲区中,然后复制到传输层缓冲区中,最后被复制到接收应用进程中。一个精巧的操作系统每次会复制一个字,但是在常见的做法中,每个字大约要 求5条指令(加载、保存、索引寄存器递增、测试数据末尾和一个条件分支)。

规则5:你可以购买更多的带宽,但无法要求更低的延迟

接下来的三条规则涉及到通信,而不再是协议处理。第一条规则是:如果你想要更多的带 宽,那么你直接购买带宽即可,但这样做并不能降低延迟。如果想要缩短延迟,则必须改进协议软件、操作系统或者网络接口。即使所有这些都做到的话,如果瓶颈 是传输时间的话,则延迟还是无法降下来的。

规则6:应该想办法避免拥塞,而不是从拥塞中恢复

“一分预防胜过十二分的治疗”。当一个网络拥塞的时候,分组会丢失,带宽会被浪费,传输过程中引入无用的延迟,等等。从拥塞中恢复过来并不容易,需要时间和耐心。最好的作法就是避免拥塞,这就像是打疫苗一样。

规则7:避免超时

定时器在网络中是必要的,但是它们应该尽量少用,而且应该尽量少发生。当一个定时器到期的时候,通常需要重复执行某一个动作。如果确实需要重复执行这个动作,则执行这个动作;否则,不必要的重复就是一种浪费了。


(temotemo)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www1.rosoo.net/a/201310/16777.html]
本文出处:CSDN博客 作者:temotemo 原文
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
相关文章
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容