我在 amd x4、4gb ram、2x seagate sata 1 tb 磁盘上有一个 ubuntu(服务器内核),用于测试虚拟机,写入性能非常慢。这两个磁盘在一个软件raid1阵列中,一个小的引导ext3分区,10gb系统分区,其余是xfs分区(约980)gb用于数据(虚拟机)。
如果我使用 rsync 或 scp 将文件从虚拟机复制到主机,则复制经常会停止或以大约 1mb/s 的速度运行。怎么了?
我试过禁用 xfs 上的障碍,增加 logbufs,allocsize,但似乎没有任何帮助。
奇怪的是,sda 的 await(例如在复制期间)通常低于 100,而 sdb 大约为 400。
关于什么可能是错误的任何想法/我可以做些什么来改进这个设置?
将文件从主机文件系统上的一个位置同步到同一阵列上的另一个位置时,您是否会遇到类似的性能问题?如果是这样,那么我怀疑您只是在从驱动器的一个部分读取并写入同一驱动器的另一部分(或在这种情况下为驱动器,因为任何写入都需要在 RAID1大批)。RAID1 的写入性能与阵列中最慢的单个驱动器的写入性能基本相同。尽管使用现代驱动器,我不希望它像 ~1Mbyte/s 一样慢,除非您要复制大量小文件(在这种情况下,每个文件都会增加很多延迟,因为目录条目是创建/更新的,所以这样的低速可能不足为奇)。
您在主机和虚拟机中选择的文件系统和相关选项也会产生影响。如果您在 VM 中打开了日志,这将增加开销,特别是如果它是完整的日志,而不仅仅是元数据日志。我不确定 XFS,但 ext3 默认使用元数据日志(日志选项通常为无、元和完整)。如果您在 VM 中的文件系统上具有完整的日志记录,并且在文件系统上 VM 的 vdisk 文件存储在主机上,则 VM 中的每个写入操作将至少成为四个物理写入操作(“写入日志”和“写入VM 中的 main store”,这两个操作在主机操作系统的文件系统中都变成了“write to journal”和“write to main store area”)。
如果这是一台测试机器,并且您不关心虚拟机因磁盘故障而死亡,因为您可以轻松地重新创建它们(或将它们完全备份到其他地方),那么您会发现 RAID0 的性能更好,尽管显然通常的 RAID0 风险适用(如果您丢失一个驱动器,则整个阵列都已失效)。您也可以将两个驱动器作为单独的卷 - 智能地将虚拟机(和主机操作系统中的任务)分布在不同的主轴上可以提供良好的性能提升,因为虚拟机(和主机任务)在 I/O 操作方面的竞争将更少带宽。您还可以使用四个驱动器并使用 RAID10(这基本上让您同时获得 RAID0 和 RAID1 的好处,以换取一些额外的复杂性和更多驱动器)。不过,在考虑重新排列磁盘子系统之前,确保您当前看到的性能问题不是由于其他原因,例如当前驱动器之一出现问题。您是否检查过驱动器上的 SMART 日志是否有任何警告标志?