Linux 系统可以连接多少硬盘?
随着网络带宽的最新进展,资源和设施再次趋于集中化。部门计算机和服务的趋势正在消退,取而代之的是更大、更集中的服务。关于这种集中化,大多数 IT 经理都会问的一个问题是“真正需要多大尺寸的服务器?” 在本文中,我们分析了文件服务需要多大的服务器,以及典型的 Linux 系统可以支持多少硬盘。我们假设我们正在处理典型的 Intel 架构解决方案,并且有一个或多个高速网络连接可用于处理来自客户端系统的负载和请求。如果我们假设有两个或多个千兆网络适配器,这应该为大多数应用程序和数据中心提供足够的带宽。
当尝试了解一个系统可以容纳多少硬盘时,我们必须分析问题的两个部分。首先是操作系统本身。Linux 有一些限制,使其无法托管数百万个硬盘驱动器。其中一些限制可以解决,但另一些是硬性限制。我们面临的第二个问题是硬件。计算机的背板、电源要求和物理结构在物理上限制了可以连接到系统的硬盘数量。
我们首先查看当今市面上三种商用计算机的硬件限制。我们选择了低端、中端和高端系统:分别是 HP Presario 4400US、Dell PowerEdge 和 IBM zSeries。
低端计算机:HP Presario 的标价为 549 美元,有一个额外的 IDE 驱动器插槽用于扩展,以及两个额外的 PCI 插槽用于磁盘控制器扩展。由于额外的硬盘无法从系统电源获得足够的电力,因此硬盘需要连接到单独的机箱和电源。如果我们继续使用 HP 的 HP Surestore Disk System 2300 选项,我们可以为每个磁盘控制器获得 14 个硬盘。这将为我们提供总共 30 个硬盘,大约 2TB 的存储空间(假设每个硬盘 73GB)。这些硬盘中的每一个都将在 160MB/秒的通信通道上产生约 11MB/秒的速度。我们可以选择更强大的光纤通道存储解决方案,即 HP Surestore Disk Array XP1024。它允许每个控制器连接 1,024 个硬盘或约 74TB 的存储空间。不幸的是,我们的 Presario 4400 上的系统总线仅达到 100MHz,而 Surestore XP1024 的运行速度为 2GB/秒。我们选择的系统将无法处理如此高端的磁盘系统,因此将我们限制为 Ultra160 技术和 30 个硬盘。
中端计算机:如果我们决定提高期望并查看 Dell PowerEdge 2650,其标价为 2,199 美元,我们可以连接明显更多的存储空间。内部控制器支持五个 SCSI 硬盘,并可选配三个扩展插槽,一个为 133Hz,两个为 100MHz。主板背板以 400MHz 的速度运行,因此嵌入式 SCSI 控制器的运行速度远快于扩展控制器。通过使用 PowerVault 220S/221S SCSI 磁盘存储单元,我们可以连接 47 个硬盘,即三个 14 单元的 PowerVault 和五个内部硬盘,总存储容量为 3.4TB。我们还可以将此系统的内存扩展到 6GB RAM,这将比 Presario 4400 的 512MB 限制更好地处理磁盘操作。在此系统上,我们也可以选择更强大的光纤通道存储解决方案,即 Dell/EMC FC4700-2。该系统允许每个光纤通道 120 个驱动器,或单个系统上 360 个硬盘,产生 63TB 的存储空间。由于该系统以 360MB/秒的速度传输数据,因此以 133MHz 运行的背板可以轻松处理这些操作,但我们正在接近 100MHz 背板的极限。
高端计算机:在非常高端的领域,我们可以使用 IBM zSeries 900,它支持高达 64GB 的内存和多个光纤通道连接器。通过这种光纤通道配置,可以支持的硬盘数量实际上没有限制,但连接到单个磁盘子系统的数量限制为单个实例上的 224 个驱动器(每个子系统 16TB)。不支持直接 SCSI,但可以使用光纤到 SCSI 的互换。
总而言之,在低端方面,硬件限制始于对多个控制器的背板支持,将系统限制为 30 个硬盘。中端系统最多可达 360 个硬盘,而高端机器则没有实际的上限。所有这些系统都可以利用存储区域网络或网络附加存储来增加其限制,但最初我们想分析架构对直接连接存储施加的硬件限制。
为了分析单个 Linux 系统可以容纳多少硬盘,以及操作系统对我们的设计施加了哪些限制,我们必须首先将分析分解为子组件。大多数计算机难以处理的三种资源是 CPU、内存和物理 I/O。
让我们以在 533MHz 背板上运行的 Pentium 4 2GHz 处理器为例。该背板通过使用地址和数据的源同步传输来实现每总线时钟四次数据传输,从而产生 4.3GB/秒的数据传输速率。如果我们首先假设平均而言,每个时钟周期执行大约两条指令,则这转换为大约每秒 4x109 条指令。如果我们然后假设每个 I/O 操作的中断需要 30x103 条指令,则这与大约每秒 133x103 次 I/O 操作相关。从表面上看,这看起来像单个系统上非常大量的 I/O。延迟在操作之间为 11ms 的单个硬盘可以产生大约每秒 90 次 I/O 操作。这直接与每个 CPU 可以支持的最大传输速率的约 1,500 个硬盘相关。显然,单个处理器可以处理大量的硬盘。如果没有其他因素限制我们的设计,我们可以在我们的系统上为每个处理器支持 1,500 个硬盘。
不幸的是,其他因素确实限制了操作。最明显的因素是背板。使用 533MHz 背板,我们获得 4.3GB/秒的数据传输速率。如果我们使用每秒 133x103 次 I/O 操作,则转换为 4.3GB/秒,这也是我们的处理器限制。如果我们降级到以 1.4GHz 运行且时钟速度为 133MHz 的 Pentium III,我们不会获得源同步传输优势,并且每个时钟获得一次数据传输。这会将我们的背板性能显着降低到 1.1GB/秒或每个处理器约 400 个硬盘。这个数字仍然很大,但不是最终的性能限制因素。
内存通常不是 Linux 的问题,因为它使用 Berkeley 风格的内存分配方法,类似于 FreeBSD,其中内存按需分配,并在达到临界限制时释放。如果我们查看 inode 分配(管理磁盘上数据块的控制块),它是按需完成的。也就是说,当操作系统耗尽内存时,inode 会被释放。理论上,如果系统除了管理文件系统和硬盘驱动器之外什么都不做,它可以使用所有可用的内存来管理这些资源。
inode 相对较小。如果我们查看 ext3 文件系统,典型的 inode 会消耗 112 字节的数据来描述其质量和特征。每个 inode 描述磁盘上的 512 字节数据。如果我们有一个 20GB 的硬盘,我们将需要大约 40,000 个 inode 来描述该硬盘。这将消耗大约 4MB 的内存。使用我们最初分析的系统的限制,我们发现如果所有 inode 都处于活动状态,则低端机器将需要 128MB 的内存。由于大多数 Intel 系统将内存限制在 4GB 左右,因此描述存储的内存对于低端来说是足够的。不幸的是,我们可以在中端系统上放置 360 个硬盘,在高端系统上每个光纤通道放置 224 个硬盘。中端系统将消耗可用内存的约 30% 仅用于描述 inode,为 inode 表之上所需的文件系统留下的空间不多。高端限制在两个光纤通道处达到,因此将我们可以连接的硬盘数量限制在约 500 个硬盘。
需要进行额外的研究来确定寻址问题是否会发挥作用。当我们谈论控制器上的数百个硬盘时,寻址应该不是问题。事实上,获得 128 个硬盘应该相对简单。但是,当我们开始谈论数千个硬盘时,主设备号和次设备号就成为问题。例如,在 Linux sd.c 中,每个主设备号的硬盘数量有 16 个的硬性限制,并且 SCSI 控制器有八个主设备号。这限制了操作系统可以描述的硬盘数量为每个 SCSI 控制器 128 个硬盘。对于网络附加 SCSI 设备或光纤通道设备,此限制不适用,因为它们具有不同的设备驱动程序。对于不同的控制器,此数字也会发生变化。如果 SCSI 控制器上存在其他硬件来寻址和注意其他硬盘,则可以替换通用的 sd.c 以扩展此限制。
网络存储是正在兴起的新技术之一。光纤通道硬盘和互联网 SCSI 设备正在将硬盘从连接的通道中移除,并将它们放置在私有的高速网络上。当我们将连接问题从设备转移到高速网络时,我们看到了一些额外的改进,但不多。如果我们查看 IEEE 803.2 中指定的以太网协议,我们会注意到每个互联网数据包需要 576 到 12,208 位才能在网络上传输数据。如果我们在规范之上分层 IP、UDP 和 TCP 等协议,我们需要接近 5,000 位才能完成简单的 512 字节数据传输。在这些传输之上分层 iSCSI 协议会将需求提高到 6,000 位。
如果我们在 10baseT 网络上实施我们的存储网络,并且不希望性能优于网络文件系统协议,我们必须将延迟限制在 100 毫秒以内。这为我们提供了来自一个客户端或服务器的大约 165 个可支持的硬盘。如果我们使用 100baseT 网络,这个数字会增长到 1,650 个设备。大多数存储区域网络解决方案 (SANS) 都利用 2GB 光纤通道,这将使我们能够在专用网络上寻址多达 33,000 个硬盘。
如果我们集中管理我们的硬盘并通过网络文件系统共享它们,我们可以通过将其连接到单个资源来更好地控制我们的数据,但我们也会创建一个单点故障和性能瓶颈。大多数网络文件系统都带有大量与身份验证和授权相关的开销。例如,如果我们查看 NFS 协议,它需要大约 1,000 字节来读取目录属性,1,000 字节来查找目录信息,1,000 字节来读取文件属性,以及 1,250 字节来读取 512 字节的数据块。这种开销将可以连接到集中式存储系统的客户端数量限制为使用 10baseT 网络的 24 个客户端、使用 100baseT 网络的 238 个客户端和使用千兆以太网网络的 2,400 个客户端。
在查看可以连接到单个系统的硬盘数量的限制时,我们注意到这些限制与 Linux 操作系统无关。相反,这些限制是带宽、延迟和可寻址性——连接所选硬件的功能。硬盘连接的主要瓶颈是寻址硬盘驱动器上每个磁道和扇区所需的内存量。inode 结构消耗大量内存。低端计算机和高端计算机之间的差异通常会因背板可扩展性和速度而限制解决方案。如果存储放置在网络上,则中端计算机和高端计算机之间的差异相对较小。如果存储连接到系统并使用网络文件系统共享,则需要具有额外处理器的高端系统来处理磁盘和网络事务,以及处理磁盘和网络文件系统请求所需的额外内存。
为了总结结果,对于非常低端的系统,我们可以使用 SCSI 控制器连接 30 个硬盘,并在专用 10baseT 网络上额外连接 219 个硬盘。这些硬盘至少需要 4GB 的内存才能接近寻址一部分硬盘。由于大多数低端系统都限制为 2GB,因此我们可以根据需要将任意数量的硬盘连接到系统,但我们必须将分配给少量 inode 的活动 inode 数量限制为几千个。我们可以通过升级到更快的网卡来扩展网络硬盘的数量,从而使用专用千兆以太网网络将此数字增加到 16,000 个硬盘。如此多的硬盘可能会超过单个处理器和背板,因此连接如此多的硬盘是不可取的。升级到中端和高端系统,硬盘数量达到数千个,因为我们可以在系统中放置多个网络适配器,并将限制推向背板和内存系统。我们可以在高端系统中放置越来越多的处理器和更多内存,并通过更多资源消除性能瓶颈。真正的瓶颈在于背板以及可以从网络控制器向内存泵送多少数据。对于中端和高端系统,可能连接的硬盘数量限制为几百个。如果我们愿意接受 100 毫秒的硬盘延迟,则网络硬盘的数量限制为几万个;否则,如果我们想要类似于连接硬盘特性的速度,则限制为几千个硬盘。
电子邮件:shuff@tamu.edu