# D.6 贯穿各层的问题
<!-- source: p0907 -->

## 点到点链路和交换机取代总线

随着 Moore 定律不断降低组件成本，点到点链路与交换机越来越普及。处理器、磁盘、LAN 速度提高，I/O 带宽需求随之上升；总线成本优势又在缩小，因此桌面计算机和服务器中的总线已时日无多。这一趋势在本书上一版时始于高性能计算机，<!-- source: p0908 -->到 2011 年已遍及存储领域。图 D.18 列出旧的总线标准及替代方案。

新一代接口的位数与带宽按单方向计算，双向合计则翻倍。新设计使用的导线少得多，因此常通过提供多倍导线数与带宽的版本来扩展吞吐量。

| 标准 | 宽度（位） | 长度（m） | 时钟频率 | MB/s | 最大 I/O 设备数 |
|---|---:|---:|---|---:|---:|
| 并行 ATA | 8 | 0.5 | 133 MHz | 133 | 2 |
| Serial ATA | 2 | 2 | 3 GHz | 300 | ? |
| SCSI | 16 | 12 | 80 MHz | 320 | 15 |
| Serial Attach SCSI | 1 | 10 | （DDR） | 375 | 16,256 |
| PCI | 32/64 | 0.5 | 33/66 MHz | 533 | ? |
| PCI Express | 2 | 0.5 | 3 GHz | 250 | ? |
{#fig-D.18 .wide .expand num="D.18" caption="并行 I/O 总线及其点到点替代方案。带宽与导线数按单方向给出，双向发送时带宽翻倍。问号及 SAS 时钟栏的“DDR”按原表保留。"}

## 块服务器与 filer

到目前为止，我们基本没有讨论操作系统在存储中的作用。就像编译器决定如何使用指令集，操作系统决定硬件提供的哪些 I/O 技术真正得到利用。它通常在磁盘块之上提供文件抽象。**逻辑单元**、**逻辑卷**、**物理卷**，是 Microsoft 与 UNIX 系统中描述磁盘块子集合的相关术语。

逻辑单元是磁盘阵列向外提供的存储元素，通常由阵列的一部分磁盘构成；服务器将其看作一个虚拟“磁盘”。在 RAID 阵列中，逻辑单元被配置成某种 RAID 布局，例如 RAID 5。物理卷是文件系统访问逻辑单元时使用的设备文件。逻辑卷又提供一层虚拟化，让文件系统可以把物理卷拆成多个部分，或跨多个物理卷条带化。逻辑单元是阵列对操作系统呈现虚拟盘的抽象；物理卷、逻辑卷则是操作系统把这些虚拟盘划分成更小、独立文件系统的抽象。

介绍了块集合的术语之后，需要问：文件这一抽象应在哪里维持——服务器中，还是存储区域网络另一端？

<!-- source: p0909 -->

传统答案是服务器。服务器按块访问存储并维护元数据。多数文件系统使用文件缓存，因此服务器还必须保持文件访问的一致性。磁盘既可能直接连接，即位于服务器内部并接到 I/O 总线，也可能经存储区域网络连接；两者都是服务器向存储子系统传送数据块。

另一种答案是磁盘子系统自身维护文件抽象，服务器用文件系统协议与之通信。例如 UNIX 的网络文件系统（Network File System，NFS），以及 Windows 的通用 Internet 文件系统（Common Internet File System，CIFS）。这类设备称为**网络附加存储**（NAS），因为这样提供文件服务的存储，再直接附着于服务器就没有意义。不过名称有些不准确：FC-AL 一类存储区域网络，也可用于连接块服务器。只提供文件服务和文件存储的 NAS 设备，通常称为 **filer**。Network Appliance 是最早生产 filer 的公司之一。

把存储放上网络的驱动力，是让多台计算机更容易共享信息，让操作员更容易维护共享系统。

## 异步 I/O 与操作系统

磁盘花在机械延迟上的时间，通常远多于传输数据。因此，提高 I/O 性能的自然途径是并行化，让多个磁盘同时为一个程序访问数据。

直观的做法是请求数据，随即尝试使用它。操作系统切换到其他进程，数据到达后再切回请求者。这称为**同步 I/O**：进程等待数据从磁盘读出。

另一种方式是请求发出后进程继续运行，直到试图读取请求的数据时才阻塞。这样的**异步 I/O**允许进程不断发请求，使多个 I/O 同时进行。其思想与乱序 CPU 中的缓存相同：通过多个未完成事件提高带宽。
