你应该知道的计算机延迟数字

了解常见的计算机延迟,有助于架构设计和问题排查。比如互斥锁延迟,硬盘存取延迟,网络延迟等等。通过了解不同设备或环境的延迟的数量级,就很容易理解redis为什么比mysql快很多,异地多活架构有多难。

本文从微观的CPU时钟延迟开始,到宏观的异地双机房网络延迟,描述各种延迟的数量级。

延迟的定义

如下是维基百科对延迟的定义:

Latency from a general point of view is a time delay between the cause and the effect of some physical change in the system being observed. Lag, as it is known in gaming circles, refers to the latency between the input to a simulation and the visual or auditory response, often occurring because of network delay in online

换成大白话,从事件发生到结果所用的时间就叫延迟,比如我要传一个文件到服务器,这个传输的时间,比如30s,就是延迟。之所以叫延迟,是因为我们希望在一瞬间完成某件事,但现实不允许,从开始到完成的时间差就是延迟。我们最熟悉的RPC调用,从请求发起到响应结果返回,这个耗时就是请求延迟。

我们总是希望延迟越小越好。编码时使用多线程,控制并发时使用轻量级锁或无锁编程,买性能更好的服务器网卡/交换机,机房之间使用高带宽光纤等等,都是为了降低延迟。一般情况下,延迟和速度成反比,速度越快,延迟越小。

为了精细优化系统间请求延迟,甚至会考虑将上下游的两个微服务混部在同一个物理机,或者在请求路由时优先考虑部署在同物理机/同机架的服务提供者。

常见延迟

为了便于对比,最后一列将时间扩大10亿倍

操作平均延迟扩大10亿倍
3Ghz CPU时钟周期0.3 ns0.4秒
寄存器访问0.5 ns0.5秒
执行指令1 ns1秒
L1缓存访问1 ns1秒
L2缓存访问3 ns3秒
分支预测错误5 ns5秒
L3缓存访问12 - 40 ns40秒
获取/释放互斥锁17 ns17秒
getPid系统调用40 ns40秒
fread/fwrite系统调用60 - 100 ns1.3分钟
主(内)存访问70 - 100 ns1.5分钟
PCIe400-900 ns8分钟
网卡1 us16分钟
上下文切换1-3 us33分钟
SSD随机读16 us4小时
单机房内网络0.5 - 2 ms23天
同城双机房光纤50KM2 - 5 ms29天
机械磁盘2 - 10 ms57天
阿里云异地机房(北京-广东)50 - 100 ms2.4年
4G60 ms2年
3G120 ms3.8年
卫星800 ms25年
重启电脑90 s2853年

从上述列表中,可以看出,普通磁盘是有多慢,跟SSD差了一个数量级,这个数字可以告诉你,提升数据库服务器硬件配置,就能使性能上一个台阶。

目前最快的SSD是Intel Optane(英特尔傲腾),延迟低到小于10微妙,目前已有项目基于SSD实现海量数据的缓存服务,比如360开源的项目Pika。

从数据中可以知道,如果要做双机房多活架构,就要容忍2-5毫秒的数据延迟。异地多活延会更大,对系统架构的设计也是不小的挑战。

参考

Compute Performance – Distance of Data as a Measure of Latency

What is the overhead of a context-switch?

Latency (engineering)

Latency-driven performance in data centres

Measurements of system call performance and overhead

每个程序员都应该知道的延迟数字

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值