博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计性能良好系统的指导思想
阅读量:4199 次
发布时间:2019-05-26

本文共 1122 字,大约阅读时间需要 3 分钟。

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

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

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

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

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

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

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

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

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

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

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

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

规则7:避免超时

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

转载地址:http://trwli.baihongyu.com/

你可能感兴趣的文章
Template模式
查看>>
Observer模式
查看>>
高性能服务器设计
查看>>
图文介绍openLDAP在windows上的安装配置
查看>>
Pentaho BI开源报表系统
查看>>
Pentaho 开发: 在eclipse中构建Pentaho BI Server工程
查看>>
android中使用TextView来显示某个网址的内容,使用<ScrollView>来生成下拉列表框
查看>>
andorid里关于wifi的分析
查看>>
Spring MVC 教程,快速入门,深入分析
查看>>
Ubuntu Navicat for MySQL安装以及破解方案
查看>>
在C++中如何实现模板函数的外部调用
查看>>
HTML5学习之——HTML 5 应用程序缓存
查看>>
HTML5学习之——HTML 5 服务器发送事件
查看>>
hbase shell出现ERROR: org.apache.hadoop.hbase.ipc.ServerNotRunningYetException
查看>>
解决Rhythmbox乱码
查看>>
豆瓣爱问共享资料插件发布啦
查看>>
kermit的安装和配置
查看>>
linux中cat命令使用详解
查看>>
java中的异常机制
查看>>
商务智能-基本方法-数据钻取
查看>>