我无法从我的设置中获得最大吞吐量。硬件如下:
- 双四核 AMD Opteron(tm) 处理器 2376
- 16 GB DDR2 ECC RAM
- 双 Adaptec 52245 RAID 控制器
- 48 个 1 TB SATA 驱动器设置为 2 个 RAID-6 阵列 (256KB 条带) + 备用驱动器。
软件 :
- 普通的 2.6.32.25 内核,针对 AMD-64 编译,针对 NUMA 进行优化;Debian Lenny 用户空间。
- 基准测试运行:disktest、bonnie++、dd 等。全部给出相同的结果。这里没有差异。
- 使用的 io 调度程序:noop。是的,这里没有什么花招。
到目前为止,我基本上认为对多个物理设备进行条带化(RAID 0)应该可以大致线性地提高性能。然而,这里的情况并非如此:
- 每个 RAID 阵列实现约 780 MB/s 的持续写入速度和 1 GB/s 的持续读取速度。
- 使用两个不同的进程同时向两个 RAID 阵列写入数据可获得 750 + 750 MB/s,而从两个 RAID 阵列读取数据可获得 1 + 1 GB/s。
- 然而当我使用 mdadm 或 lvm 将两个阵列条带化在一起时,性能约为 850 MB/s 写入和 1.4 GB/s 读取。比预期至少低 30%!
- 对条带阵列运行两个并行的写入器或读取器进程并不能提高数据,事实上它甚至会进一步降低性能。
那么这里发生了什么?基本上我排除了总线或内存争用,因为当我同时在两个驱动器上运行 dd 时,总写入速度实际上达到 1.5 GB/s,读取速度最高达到 2 GB/s。
所以这不是 PCIe 总线的问题。我想这不是 RAM 的问题。这不是文件系统的问题,因为我使用原始设备或 XFS 进行基准测试时得到的数字完全相同。而且,使用 LVM 条带化和 md 条带化时,我也得到完全相同的性能。
出了什么问题?是什么阻止了进程达到最大可能的吞吐量?Linux 条带化有缺陷吗?我还可以运行哪些其他测试?
答案1
您是否尝试过在进行基准测试时运行latencytop?可能会有助于了解哪个Linux系统调用是罪魁祸首(如果有)。
答案2
据我所知,那是一张 x8 PICe Gen 1 卡 - 假设零开销,它所能支持的绝对最大数据速率是 2GBytes/秒。Adaptec 自己只声称这些卡最多可以维持 1.2Gbytes/sec,而你已经超出了这个速度。
它们配备业界领先的双核片上 RAID (RoC)、x8 PCI Express 连接和 512MB DDR 缓存,可提供每秒超过 250,000 次 IO 和 1.2GB/s。
我的猜测是,由于你能够通过两个独立运作的 RAID 0 组显著超出其声称的性能,所以条带化所增加的额外负载(可能很小)会给 RAID CPU 或可能是控制器上的 RAM 子系统带来过大的压力,负载为 GByte/sec。