我在 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 的 await 约为 400。
关于什么地方可能存在问题,我该如何改进这个设置,您有什么想法吗?
答案1
在将文件从主机文件系统的一个位置同步到同一阵列的另一个位置时,您是否遇到了类似的性能问题?如果是这样,那么我怀疑您只是看到了从驱动器的一部分读取并写入同一驱动器的另一部分(或在这种情况下是驱动器,因为任何写入都需要同时写入 RAID1 阵列中的两个驱动器)时驱动器磁头移动的延迟。RAID1 的写入性能与阵列中最慢的单个驱动器的性能基本相同。不过,我不会指望现代驱动器的速度会慢到 ~1Mbyte/s,除非您正在复制大量小文件(在这种情况下,由于创建/更新目录条目,每个文件的延迟都会增加,因此速度如此之慢可能并不奇怪)。
主机和虚拟机中文件系统和相关选项的选择也会有所不同。如果您在虚拟机中启用了日志功能,则会增加开销,尤其是当日志功能是完整日志功能而不是元数据日志功能时。我不确定 XFS 是否如此,但 ext3 默认为元数据日志功能(日志选项通常为 none、meta 和 full)。如果您在虚拟机中的文件系统上启用了完整日志功能和在文件系统上,VM 的 vdisk 文件存储在主机上,那么 VM 中的每个写入操作将成为至少四个物理写入操作(VM 中的“写入日志”和“写入主存储”,这两个操作将成为主机操作系统的文件系统中的“写入日志”和“写入主存储区域”)。
如果这是一台测试机器,并且您不关心虚拟机因磁盘故障而死机,因为您可以轻松地重新创建它们(或者在其他地方完全备份它们),那么您会发现 RAID0 的性能更好,尽管显然 RAID0 存在通常的风险(如果您丢失一个驱动器,整个阵列就会死机)。您也可以将两个驱动器作为单独的卷 - 将虚拟机(和主机操作系统中的任务)智能地分布在不同的主轴上可以提高性能,因为虚拟机(和主机任务)彼此之间对 I/O 操作带宽的竞争会减少。您还可以使用四个驱动器并采用 RAID10(这实际上可以让您同时获得 RAID0 和 RAID1 的好处,但会稍微复杂一些,需要更多的驱动器)。不过,在考虑重新安排磁盘子系统之前,请确保您当前看到的性能问题不是由于其他原因(例如当前驱动器之一出现问题)引起的。您是否检查过驱动器上的 SMART 日志是否有任何警告信号?