在04年发表的论文《Latency Lags Bandwidth》作者David Patterson谈到他观察到的有趣现象,在很多计算机相关技术里面,包括处理器,内存,硬盘和网络,其Bandwidth或者Throughput要比Latency进步快很多。在衡量计算效能的正确姿势(1)我们已经聊过Throughput和Latency的概念,Throughput指的是单位时间完成的任务数,而Latency是完成任务所需要的时间。比如针对处理器,Throughput指的是单位时间完成的指令数量,可以用MIPS(Million Instructions Per Second)来代表,而Latency一般指执行一条指令所花费的时间。
作者统计了大概20年时间(~1980 - ~2000)相关技术重要节点时两个指标的变迁,平均到年度变化如下图。
近20年区间累积改善的倍数Latency相比Throughput:处理器为21x vs 2250x,内存为4x vs 120x,网络为16x vs 1000x,硬盘为8x vs 143x,可谓差距巨大。下图(log化后的结果)反应了这个相对变化快慢。
在作者新近的著作里,继续跟踪了最近十几年两个指标的变化,反映Throughput > Latency的趋势还在延续,底下表格是有关处理器,内存,硬盘和网络技术在最近30~40年重要节点的详细参数汇总。
两个指标为什么会呈现这种差别,从技术上可以做如下理解:
摩尔定律更有助于Throughput。晶体管数目增多,芯片面积增大会限制Latency指标。
改善Latency指标可以帮助Througput,但反过来不成立,改善Throughput甚至有可能不利Latency。
绝对的距离以及相应的传输时间限制Latency的改善空间。正如网络谚语有云:Bandwidth problems can be cured with money. Latency problems are harder because the speed of light is fixed—you can’t bribe God.
测量Latency时候系统软件的开销没法像Throughput一样摊销,典型的如网络软件栈之于网络延迟。
而且从市场营销的角度,Throughput可能是个更好的卖点。另外,我觉得这跟用户的体验心理相关,对很多程序而言,用户关心的任务往往是粗粒度的(coarse grained),这正反映了Throughput的特点,而Latency是细粒度(fine grained)指标,针对的是用户任务的子任务,甚至子子任务。比如对一个计算程序,用户关心计算整体需要花多少时间,他不关心具体分发的每个GPU硬件线程执行快慢,更无从计较每条指令的延时。所以Throughput实际上代表了计算系统与用户的接口,而Latency代表系统的内部实现细节。只要计算系统的软件硬件架构实现可以掩藏Latency,相比之下Latency就显得不那么重要了。
最后需要强调的是,对交互式程序,Latency还是非常有价值的指标,无论是桌面还是网络程序,响应时间太慢会极大影响用户体验。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
如果觉着内容有帮助,请帮忙关注,点赞,分享给更多的朋友。谢谢!