我正在尝试比较集群的不同节点互连的延迟。目标是最小化内存访问延迟。
我已经获得了一些关于具有许多 CPU 的 NUMA 架构的硬件实现之一的基准测试。这表明:
- 直接连接到 CPU 的 socket 的内存访问延迟约为 90ns。
- 通过UPI连接到CPU套接字的其他CPU套接字的内存访问延迟约为140ns(因此UPI的一“跳”增加了约50ns)。
- 通过所考虑的 NUMA 互连访问内存的延迟为 370ns(因此该互连的一“跳”增加了大约 280ns)。
NUMA 互连是非常专业的解决方案,无法与大多数硬件供应商一起使用。“标准”互连器是 InfiniBand、以太网和 FibreChannel。
我正在寻找这些互连器为内存访问提供的延迟。
例如,在 EDR Infiniband 交换机之一的规范中,它声明它提供“90ns端口到端口延迟”。如果我理解正确,端口到端口延迟是指交换机本身引入的延迟。对于这个延迟,我们应该加上大约 600ns 的 NIC 延迟(根据这个),所以这大约是 90+2x600=1290[ns] 的互连器相关延迟。(顺便说一句,与 90ns 相比,600ns 的值似乎高得可疑。为什么这么高?)
我们还应该预期电缆(无源铜缆或光纤)会引入一些延迟。我想这取决于它的长度,但我不确定它的顺序是什么。光在 3ns 左右传播 1 米,这是一个好的估计吗?
缺少的部分是网卡访问内存的时间。我想我们应该考虑使用 RDMA 和通过 CPU 的不同情况。我还缺少其他东西吗?我的上述推理是否正确?
我的主要问题是:使用 InfiniBand、以太网或 FibreChannel 等“标准”互连器访问集群不同节点内的内存的预期延迟是多少?
我问的原因是我试图将当前单一系统映像解决方案中描述的问题分解为较小的子问题。
您的 90 ns 本地与 370 ns 其他套接字的单节点数似乎是合理的。但是,我认为 600 ns 的 Infiniband 应该是端到端的,通过切换到不同的帧。
远程数据报的 600 ns 非常快。本地存储器访问通常在 100 ns 左右。并且同一节点不同的套接字可能多 200 ns。
单映像多节点计算机通过软件中的 RDMA 或通过 NUMA 系统中的硬件互连来访问内存。
InfiniBand 是 RDMA 的一种传输方式。大约 2014 年 Mellanox 声称Infiband EDR 的端到端为 500 ns。在这里猜测,但他们的营销可能是混合数字。NIC 上引用的典型端到端 600 ns,加上路径上每个额外交换机的 150 ns。
或者,是的,多节点系统的 NUMA 互连是一种专门的东西,但它们确实存在。对于 x86,有 SGI UV 系列。 NUMAlink 7 互连声称 500 ns 远程节点访问。在 POWER 平台上,IBM 可以使用 NVLink 连接节点,尽管我不知道它的延迟。
关于您选择以太网或 Infiniband 的商品传输,这可能会限制您使用 RDMA 感知应用程序。支持透明单图像系统的 NUMA 硬件往往是定制的。