吞吐量和延时

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jeanter/article/details/56480007
某单机计算秘钥的服务(cpu bound).  4核,接受网络req,最大吞吐10万/s ,(4核cpu均达到99%以上),  当吞吐达到10万/s时 , 对于单个req延时是多少?
          假设服务有个队列(网络也会有排队,被调度的进程也会被排队,当需要处理的任务大于能够执行处理的单元时,都需要排队,应用层不排队,内核也会排队),长度为10万,我们时间统计周期降低到1ms,前任意时刻,假设每1ms有100个req进来,4核cpu都能好的处理完,队列长度不超过100,也就是每req的排队时间不超过100,最后一个进队列的req最多等待1ms,每个req被从队列移除到执行指令被操作系统调度执行完不超过1ms,,那么单个req的服务处理延时为1ms
         假设某一时刻,当前机器的其他任务短暂的消耗了大量cpu,比喻网卡接收了大量其他垃圾包,使得系统某一秒钟(假设第t秒)的吞吐降低到100/s, (那一秒cpu被用来干其他的了),那么第t秒内,将会有(10万-100)个请求在队列里积压,这时候队列长度接近10万,那么最后一个进队列的req,需要等待前面10万个req被处理,及 接近1s,这时候每个req的延时就变成了1s ,但是系统的吞吐没变。仍然是10万/s.但是系统没有富裕的计算能力去把队列的多的请求处理干净,即队列一直保持在10万。那么第t秒后 ,系统的每个req的延时都成了1s.

         系统的最大吞吐其实是系统的资源最大消耗情况下的处理能力,服务处理的速度是匀速的,但是请求的速度并不是匀速,在一秒周期内,每1ms来的请求数是不一样的,但是可以保持在一个大的时间周期内保持一致。系统每1ms的请求如果大于其1ms的吞吐速度,那么就会积压至队列,引起req的排队时间,造成多的延时。但是吞吐在一个大的周期内却是一致的。
      那么怎样降低延时呢。就是降低队列数,并提供富裕的计算能力,让计算资源尽量的有空闲。延迟和资源使用率是矛盾的.比喻第一个例子中的最大吞吐10万/s.当我控制请求在1万/s时,控制队列在1万,那么最恶劣情况下 延时最大会在100ms,而且有富裕的计算资源可以马上将队列处理完,使得后面的req不至于产生同样的排队时间。即平均可扔可控制在1ms.

猜你喜欢

转载自blog.csdn.net/jeanter/article/details/56480007