有人对构建服务器的虚拟机性能进行基准测试吗?
Posted
技术标签:
【中文标题】有人对构建服务器的虚拟机性能进行基准测试吗?【英文标题】:Anyone benchmarked virtual machine performance for build servers? 【发布时间】:2010-02-11 21:15:24 【问题描述】:我们一直在尝试使用虚拟机来构建服务器。我们的构建服务器都运行 WinXP32,我们将它们托管在运行 Ubuntu 9.10 的 VMWare Server 2.0 上。我们混合构建 C、C++、python 包和其他各种部署任务(安装程序、7z 文件、档案等)。使用 VMWare 托管构建服务器的管理非常棒。我们可以移动它们,在一个大的 8 核机器上共享系统资源,通过 Web 界面远程访问系统,并且基本上可以更好地管理事情。
但问题在于,与使用物理机器相比,性能似乎从糟糕到可怕,具体取决于它是哪一天。事实证明,这非常令人沮丧。有时主机的系统负载会超过 20,有时会低于 1。这似乎不是基于系统上实际完成的工作量。我怀疑系统中存在瓶颈,但我似乎无法弄清楚它是什么。 (最近的嫌疑人是 I/O,但我们有一个专用的 1TB 7200RPM SATA 2 驱动器和 32MB 缓存,除了虚拟机之外什么都不做。对于 1-2 台机器来说似乎足够了。所有其他规格似乎也足够了。8GB RAM ,每个虚拟机 2GB,8 个内核,每个虚拟机 1 个)。
所以在用尽我能想到的一切之后,我想求助于 Stack Overflow 社区。p>
是否有人在 VM 中运行或看到其他人运行软件构建性能基准测试。 相对于物理系统,我们应该期待什么? 我们放弃了多少性能? 人们使用什么硬件/虚拟机服务器配置?任何帮助将不胜感激。
【问题讨论】:
我猜你的单个驱动器是个大问题 - 特别是如果你正在运行多个构建...... 您是否尝试过运行一些性能监控来查看通常的嫌疑人? 我在主机和客户端上尝试了性能监控工具。在客户端上,看起来磁盘 I/O 是问题所在,但是当使用 dstat 查看磁盘的主机使用情况时,它看起来并没有给系统带来压力。看起来 vmware 本身就是瓶颈,但我无法确定。这是最令人沮丧的部分。我似乎无法找到导致问题的确切点。 【参考方案1】:磁盘 IO 在这里绝对是一个问题,当您使用单个主轴备份它时,您无法执行任何大量的磁盘 IO 活动。单个 SATA 驱动器上的 32MB 缓存将被您的主机和几个客户操作系统的滴答作响而饱和。如果您查看 Ubuntu 主机操作系统中的磁盘队列长度计数器,您应该会看到它很高(在此系统上任何时间超过 1 且有 2 个驱动器的任何时间都意味着有东西在等待该磁盘)。
当我为 VM 确定基础架构的规模时,我通常将每个 VM 平均 30-50 IOPS 作为一个大致目标,这适用于不经常使用磁盘子系统的系统。对于不需要大量 IO 活动的系统,您可以降低一点,但构建系统的 IO 模式将严重偏向于大量非常随机的相当小的读取。为了使问题更加复杂,您需要同时构建大量虚拟机,这将推动磁盘争用。整体磁盘带宽可能不是一个大问题(当 IO 模式完全顺序时,SATA 驱动器可能会推动 70-100Meg/sec)但是当文件很小且分散时,您的 IO 会受到主轴限制的限制,这将是在 7.2k SATA 上每秒大约 70-100 IO。一个运行 Type 2 Hypervisor(如 VMware Server)的主机操作系统可能会在轻负载下达到这一点。
我的建议是使用更小且速度更快的驱动器构建 RAID 10 阵列。 10k SAS 驱动器每个将为您提供 100-150 IOPS,因此一包 4 块可以处理 600 读取 IOPS 和 300 写入 IOPS,然后才能达到顶峰。如果要将 VM 文件放在 RAID 阵列上,还要确保 align all of the data partitions 用于托管 VMDK 和来宾操作系统的驱动器。对于像这样的工作负载,这将使您的磁盘性能提高 20-30%。避免使用 RAID 5,因为空间很便宜,而且 RAID 5 的写入损失意味着您需要 RAID 5 包中的 4 个驱动器才能达到单个驱动器的写入性能。
我要补充的另一点是,VMware Server 在性能方面并不是一个出色的 Hypervisor,如果有可能迁移到 Type 1 Hypervisor(如 ESXi v4,它也是免费的)。设置并非易事,并且您完全失去了主机操作系统,因此这可能是一个问题,但您会看到全面的 IO 性能要好得多,尤其是在磁盘和网络流量方面。
已编辑以回复您的评论。1) 看看您现有的 Ubuntu 主机是否确实存在问题。
我看到你已经尝试过 dstat,我认为它没有给你足够的细节来理解正在发生的事情,但我不熟悉使用它,所以我可能是错的。 iostat 将让您清楚地了解正在发生的事情 - 这篇关于使用 iostat 的文章将帮助您更好地了解实际 IO 模式撞击磁盘 - http://bhavin.directi.com/iostat-and-disk-utilization-monitoring-nirvana/。 avgrq-sz 和 avgwq-sz 是排队请求数量的原始指标。高数字通常不好,但实际不好的数字因磁盘类型和 RAID 几何结构而异。您最终感兴趣的是查看您的磁盘 IO 是否在队列中花费了更多\增加的时间而不是实际得到服务。 (await-svctim)/await*100
的计算确实告诉你你的磁盘是否在努力跟上,超过 50% 并且你的 IO 的排队时间与磁盘服务的时间一样长,如果它接近 100%,那么磁盘就会完全被撞到。如果您确实发现主机实际上并没有受到压力,而 VMware Server 实际上很糟糕(很可能是这样,我从未在 Linux 平台上使用过它),那么您可能想在您之前尝试使用 VirtualBox 之类的替代方案之一跳转到 ESXi。
2) 弄清楚你需要什么。 在具有良好\可接受性能的系统上确定典型构建的 IO 要求 - 在 Windows 上查看 IOPS 计数器 - 磁盘读取/秒和磁盘写入/秒计数器,并确保平均队列长度小于 1。您需要在系统加载时知道两者的峰值,如果所有内容都来自磁盘缓存,则瞬时峰值可能非常高,因此请注意一分钟左右的持续峰值。一旦你有了这些数字,你就可以确定一个磁盘子系统来提供你需要的东西。您需要查看 IO 编号的原因是它们反映了驱动器磁头完成读取和写入所必须经历的实际切换(每秒 IO,IOPS),除非您正在执行大文件流式传输或全盘备份它们将最准确地反映您的磁盘在负载下将达到的限制。 现代磁盘可以支持大约以下内容:
7.2k SATA 驱动器 - 70-100 IOPS 10k SAS 驱动器 - 120-150 IOPS 15k SAS 驱动器 - 150-200 IOPS请注意,这些是典型驱动器的近似数字,代表驱动器在最大负载和不利 IO 模式下的饱和能力。这是为最坏的情况设计的,除非您真的知道自己在做什么,否则您应该这样做。
RAID 包允许您并行化您的 IO 工作负载,并且使用合适的 RAID 控制器,N 驱动器 RAID 包将为您提供 N*(1 个磁盘的基本 IOPS)用于读取 IO。对于写入 IO,RAID 策略会导致惩罚 - RAID 0 没有惩罚,写入与读取一样快。 RAID 5 每个 IO 需要 2 次读取和 2 次写入(读取奇偶校验、读取现有块、写入新奇偶校验、写入新块),因此惩罚为 4。RAID 10 的惩罚为 2(每个 IO 写入 2 次)。 RAID 6 的惩罚为 5。要确定您需要从 RAID 阵列获得多少 IOPS,您需要获取操作系统所需的基本读取 IOPS 数,并将操作系统所需的写入 IOPS 数与相关惩罚因子相加。
3) 现在计算出满足您性能需求的 RAID 阵列结构 如果您对物理基线系统的分析告诉您只需要 4\5 IOPS,那么您的单个驱动器可能就可以了。如果确实如此,我会感到惊讶,但不要相信我的话 - 获取您的数据并做出明智的决定。
无论如何,假设您在基线练习期间测量了 30 个读取 IOPS 和 20 个写入 IOPS,并且您希望能够支持这些构建系统的 8 个实例作为 VM。为了实现这一点,您的磁盘子系统需要能够支持操作系统的 240 读取 IOPS 和 160 写入 IOPS。调整您自己的计算以适应您真正需要的系统数量。
如果您选择 RAID 10(我强烈建议您这样做,RAID 10 会牺牲容量来换取性能,但是当您设计足够的性能时,您可以调整磁盘大小以获得所需的容量,结果通常会比 RAID5 便宜,除非您的IO 模式只涉及很少的写入)您的磁盘需要能够提供总共 560 IOPS(读取 240,写入 320,以便考虑 RAID 10 写入惩罚因子 2)。 这将需要: - 4 个 15k SAS 驱动器 - 6 个 10k SAS 驱动器(向上取整,RAID 10 需要偶数驱动器) - 8 个 7.2k SATA 驱动器
如果您选择 RAID 5,则必须针对增加的写入损失进行调整,因此需要 880 IOPS 才能提供您想要的性能。 那将需要: - 6 个 15k SAS 驱动器 - 8 个 10k SAS 驱动器 - 14 个 7.2k SATA 驱动器
这样您将拥有更多空间,但成本几乎是其两倍,因为您需要更多驱动器,并且需要一个相当大的盒子来装这些驱动器。这就是为什么我强烈推荐 RAID 10,如果性能是任何问题的话。
另一种选择是找到具有足够存储空间以满足您的需求的优质 SSD(例如 Intel X-25E,而不是 X-25M 或任何更便宜的产品)。购买两个并将它们设置为 RAID 1,SSD 非常好,但它们的故障率(即使对于像 X-25E 这样的驱动器)目前比旋转磁盘更糟糕,所以除非你准备好处理你想要 RAID 1 的死系统最低限度。结合像 X-25E 这样的优质高端控制器,在现实世界中可以轻松维持 6k IOPS,相当于 30 个 15k SAS 驱动器。 SSD 的每 GB 容量相当昂贵,但如果使用得当,它们可以为 IO 密集型任务提供更具成本效益的解决方案。
【讨论】:
Helvick:听起来你已经做了很多了。 :) 几个问题: 1) 我如何查看 Ubuntu 上的磁盘队列长度? 2)我没用过ESXi,但是很感兴趣。对于我的使用模式,您会推荐哪种类型的配置(存储等)? 我又添加了一些。变成了一篇可能更适合 SU\SF 的文章,但希望它能为你澄清更多。 这完全正确。看起来托管 VM 的驱动器花费了 99% 的 IO 时间等待。等待:679.15 和 svctm:3.54。不好。 那将是你的问题,不幸的是。这是使用廉价 SSD 运行 ESXi 的测试链接 - 请注意 4K 随机读取的 3.5K IOPS 数字。 techhead.co.uk/… 。该驱动器对于您的需求来说太小了,我认为我不会开始相信将工作的虚拟机放在上面,但是如果空间不足,英特尔 X-25M G2 可能是替代虚拟机底层存储的有效快速替代品太挑剔了。我仍然建议将 X-25E 用于 SSD,但它们仍然非常小(我认为最大 64GB)。以上是关于有人对构建服务器的虚拟机性能进行基准测试吗?的主要内容,如果未能解决你的问题,请参考以下文章