【问题标题】:Latency of accessing main memory is almost the same order of sending a packet访问主存的延迟几乎与发送数据包的顺序相同
【发布时间】:2020-04-17 17:18:21
【问题描述】:

看看 Jeff Dean 著名的延迟指南

Latency Comparison Numbers (~2012)
----------------------------------
L1 cache reference                           0.5 ns
Branch mispredict                            5   ns
L2 cache reference                           7   ns                      14x L1 cache
Mutex lock/unlock                           25   ns
Main memory reference                      100   ns                      20x L2 cache, 200x L1 cache
Compress 1K bytes with Zippy             3,000   ns        3 us
Send 1K bytes over 1 Gbps network       10,000   ns       10 us
Read 4K randomly from SSD*             150,000   ns      150 us          ~1GB/sec SSD
Read 1 MB sequentially from memory     250,000   ns      250 us
Round trip within same datacenter      500,000   ns      500 us
Read 1 MB sequentially from SSD*     1,000,000   ns    1,000 us    1 ms  ~1GB/sec SSD, 4X memory
Disk seek                           10,000,000   ns   10,000 us   10 ms  20x datacenter roundtrip
Read 1 MB sequentially from disk    20,000,000   ns   20,000 us   20 ms  80x memory, 20X SSD
Send packet CA->Netherlands->CA    150,000,000   ns  150,000 us  150 ms

在我看来有点不可思议的是,从磁盘顺序读取 1MB 的时间只比跨大西洋发送往返数据包快 10 倍。谁能给我更多的直觉,为什么这感觉是对的。

【问题讨论】:

  • “主内存”通常不是指磁盘或其他非易失性存储:它指的是 RAM。

标签: performance networking disk low-latency


【解决方案1】:

Q1MB SEQ-HDD-READ ~ 比 CA/NL 跨大西洋 RTT 快 10 倍 - 为什么感觉不错?


一些“旧”值(带有一些跨 QPI/NUMA 更新 from 2017):

           0.5 ns - CPU L1 dCACHE reference
           1   ns - speed-of-light (a photon) travel a 1 ft (30.5cm) distance
           5   ns - CPU L1 iCACHE Branch mispredict
           7   ns - CPU L2  CACHE reference
          71   ns - CPU cross-QPI/NUMA best  case on XEON E5-46*
         100   ns - MUTEX lock/unlock
         100   ns - CPU own DDR MEMORY reference
         135   ns - CPU cross-QPI/NUMA best  case on XEON E7-*
         202   ns - CPU cross-QPI/NUMA worst case on XEON E7-*
         325   ns - CPU cross-QPI/NUMA worst case on XEON E5-46*
      10,000   ns - Compress 1 KB with Zippy PROCESS (+GHz,+SIMD,+multicore tricks)
      20,000   ns - Send 2 KB over 1 Gbps NETWORK
     250,000   ns - Read 1 MB sequentially from MEMORY
     500,000   ns - Round trip within a same DataCenter
  10,000,000   ns - DISK seek
  10,000,000   ns - Read 1 MB sequentially from NETWORK
  30,000,000   ns - Read 1 MB sequentially from DISK
 150,000,000   ns - Send a NETWORK packet CA -> Netherlands
|   |   |   |
|   |   | ns|
|   | us|
| ms|

跨大西洋网络 RTT:

  • 全球光网络大致以光速运行 (300.000.000 m/s)
  • LA(CA)-AMS(NL) 数据包必须经过的不是大地测量“距离”,而是一组大陆和跨大西洋“潜艇”电缆,长度更长(参见map

这些因素不会 “改善” - 只有传输容量在增长,光放大器、重定时单元和其他 L1-PHY 中引入了附加延迟/ L2-/L3-网络技术受到控制,尽可能小。

所以 LA(CA)-AMS(NL) RTT 将保留,使用这项技术,the same ~ 150 ms

使用其他技术,LEO-Sat Cubes - 例如 - “距离”只会从大约 9000 公里 P2P 增加一对额外的 GND/LEO 段,加上一些额外的 LEO/LEO 跃点,这引入“更长”的距离,附加的 hop/hop 再处理延迟和容量不会接近当前可用的光传输,因此不会出现“回到未来”的神奇跳跃(我们仍然怀念 DeLorean )。


硬盘:

  • HDD-s 可以有非常快速和非常短的传输路径来移动数据,但是 READ-ops 必须等待媒体读取头的物理/机械操作(这需要大部分时间,而不是实际的数据传输到主机 RAM)
  • HDD-s 是旋转设备,磁盘必须“对齐”从哪里开始读取,首先要花费大约 10 [ms]
  • HDD-s 设备将数据存储到 磁头(2+,从磁板表面读取物理信号)的静态结构中:圆柱体(在该板,一个圆柱对齐的读头被磁盘头微控制器固定在其中):扇区(圆柱的角截面,每个都携带一个相同大小的数据块 ~ 4KB , 8KB, ...)

这些因素不会 “改善” - 所有商品生产的驱动器都保持在行业选定的大约 { 5k4 | 7k2 | 10k | 15k | 18k }-旋转/分钟 (RPM)。这意味着,如果在这样的磁盘上维护一个紧凑的数据布局,一个连续的磁头:柱面对齐读取整个柱面将需要:

>>> [ 1E3 / ( RPM / 60. ) for RPM in ( 5400, 7200, 10000, 15000, 18000 ) ]

11.1 ms per CYL @  5k4 RPM disk,
 8.3 ms per CYL @  7k2 RPM disk,
 6.0 ms per CYL @ 10k  RPM disk,
 4.0 ms per CYL @ 15k  RPM disk,
 3.3 ms per CYL @ 18k  RPM disk.

数据密度也受到磁性介质特性的限制。自旋电子学研发将带来一些更密集存储的数据,但过去 30 年一直处于可靠磁存储的极限范围内。

从多个磁头同时并行读取的技巧可以预期更多,但这与嵌入式微控制器的设计背道而驰,因此大部分读取都是按顺序从一个磁头接一个磁头进行的,进入 HDD 控制器板载缓冲区,最好不要发生圆柱到圆柱头的机械重新对齐(从技术上讲,这取决于先前的数据到磁盘布局,由操作系统维护和可能的磁盘维护- 优化器(最初称为磁盘磁盘-“压缩”,它只是试图重新对齐 FAT 描述的数据块的已知序列,以便遵循 head:cyl:sector 转换的最佳轨迹,这主要取决于实际设备的 head:head 和 cyl:cyl 延迟)。因此,即使是最乐观的数据布局也需要 ~ 13..21 [ms] 来查找和读取,但只有一个 head:cyl-path

物理定律决定

【讨论】:

    【解决方案2】:

    2020 年的一些数字。

    在 Intel Coffee Lake 和 Ryzen 上,L1 的负载为 4 个周期(在 5GHz CPU 上为 0.8nsec)。

    在 Intel Coffee Lake 上从内存加载大约 215 个周期(在 5GHz CPU 上为 43nsec)。在 Ryzen 上大约 280 个周期。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多