一、非透明桥(NTB)概念解析
1.1 什么是非透明桥
非透明桥,英文叫 Non-Transparent Bridge,简称 NTB。说白了,它就是一种特殊的 PCIe 桥接设备。
普通 PCIe 桥,比如我们常见的 Switch 内部的透明桥,它做的事情很简单——把数据从上游端口转发到下游端口,或者反过来。CPU 能看到下游所有的设备,枚举的时候一清二楚。
但 NTB 不一样。它会在两个独立的 PCIe 域之间建立一条「秘密通道」。两个域的主机互相看不见对方的设备,就像隔了一堵墙。墙中间开了一扇门,数据可以通过门传递,但彼此的设备列表里没有对方。
我刚开始接触 NTB 时,也觉得这个概念有点绕。后来在项目中调试一个双主机通信的问题,才真正理解了它的设计意图。
核心定义:NTB 是一种特殊的 PCIe 桥接设备,它在两个独立的 PCIe 域之间提供受控的通信通道,同时保持域之间的地址空间隔离。
1.2 NTB 与透明桥的区别
透明桥和非透明桥,名字上就差一个字,但设计思路完全不同。我列个表,你一看就明白。
| 对比维度 | 透明桥 | 非透明桥(NTB) |
|---|---|---|
| 地址空间 | 统一地址空间,所有设备可见 | 隔离地址空间,设备不可见 |
| CPU 枚举 | CPU 能枚举到桥下所有设备 | CPU 看不到对端设备 |
| 数据传递 | 直接转发,无需软件干预 | 需要软件配置和地址映射 |
| 典型应用 | 普通 PCIe 扩展 | 双主机通信、故障隔离 |
| 安全性 | 低,任何设备都可访问 | 高,访问受控 |
你想想看,透明桥就像一扇敞开的门,谁都能进。NTB 则是一扇带锁的门,只有拿到钥匙的人才能通过。
我记得有一次调试一个多主机系统,客户要求两个 CPU 之间共享数据,但又不能互相干扰。透明桥的方案根本行不通,因为一旦连上,两个 CPU 的地址空间就混在一起了。最后就是用 NTB 解决的。
1.3 NTB 在 PCIe Switch 中的角色
PCIe Switch 内部通常包含多个桥。大部分是透明桥,用于连接下游设备。但 NTB 在 Switch 中扮演一个特殊的角色——它负责连接两个独立的 PCIe 域。
来看一张图,这是我画的一个典型 NTB 应用场景。
图中可以看到,PCIe Switch 内部既有透明桥,也有 NTB。透明桥负责连接域内的设备,NTB 则负责连接两个域。中间的虚线就是隔离墙,两个域的主机互相看不见对方的设备。
嗯,这里要注意:NTB 在 Switch 中不是必须的。很多 Switch 芯片只提供透明桥功能。只有当你需要做域间隔离或双主机通信时,才会用到 NTB。
1.4 NTB 的核心价值:隔离与桥接
NTB 的核心价值就两个词:隔离和桥接。听起来矛盾,但恰恰是它的精髓。
隔离
隔离是什么意思?就是两个 PCIe 域之间互不干扰。
- 地址空间隔离:主机 A 的地址映射不会影响主机 B。两个域可以独立管理自己的内存和 I/O 空间。
- 故障隔离:一个域的设备挂了,不会影响另一个域。我曾经遇到过,一个域里的 SSD 控制器崩溃,导致整个域的总线复位。但因为 NTB 的隔离,另一个域完全不受影响,业务照常运行。
- 安全隔离:未经授权的访问被挡在门外。只有通过 NTB 配置的映射窗口,数据才能跨域传递。
避坑指南:我曾经在配置 NTB 窗口时,忘记设置地址翻译范围,结果对端主机只能访问前 4KB 的数据。调试了两天才发现是窗口大小没配对。所以,配置 NTB 时一定要仔细检查地址映射的基地址和大小。
桥接
隔离不是目的,目的是在隔离的基础上实现受控的通信。这就是桥接的作用。
- 数据交换:通过 NTB 的地址映射窗口,两个域可以互相读写对方的内存。就像在墙上开了一扇窗,数据可以传递。
- 中断传递:NTB 支持门铃(Doorbell)机制,一个域可以发送中断给另一个域。我做过一个项目,用门铃机制实现了两个 CPU 之间的消息通知,延迟只有几微秒。
- 共享内存:通过 NTB 的映射,两个域可以共享一段物理内存。这比传统的网络通信快得多,因为走的是 PCIe 总线,延迟极低。
注意事项:NTB 的桥接功能不是自动的。你需要写驱动程序来配置 NTB 的地址映射窗口、门铃寄存器、消息寄存器等。很多工程师以为 NTB 插上就能用,结果发现数据传不过去。嗯,NTB 是需要软件配合的硬件功能。
1.5 实际项目中的体会
我参与过一个存储系统的设计,两个控制器之间需要高速数据同步。最初用的是以太网,延迟在几十微秒级别,性能不够。后来改用 NTB,延迟降到了微秒级,吞吐量也翻了几倍。
但 NTB 也不是万能的。它的配置比透明桥复杂得多。透明桥插上就能用,NTB 需要仔细设计地址映射、中断路由、数据一致性等。我记得第一次调 NTB 驱动时,光是地址翻译就折腾了一周。
不过话说回来,一旦你掌握了 NTB 的配置方法,它在隔离和通信方面的优势是其他技术无法替代的。尤其是在多主机系统、故障容错、安全隔离这些场景下,NTB 几乎是唯一的选择。
好了,这一节的内容就到这里。NTB 的概念其实不复杂,关键是要理解它「隔离中通信」的设计思想。下一节我们会深入 NTB 的硬件架构,看看它内部是怎么工作的。