有人为构建服务器建立了基准虚拟机性能吗?

All*_*len 3 c++ python vmware automation build

我们一直在尝试将虚拟机用于构建服务器.我们的构建服务器都在运行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 ,每个VM 2GB,8个内核,每个vm 1个).

因此,在耗尽了我能想到的一切之后,我想转向Stack Overflow社区.

  • 有没有人在VM中运行或看到其他任何人运行软件构建性能的基准测试.
  • 我们应该对物理系统有什么期望?
  • 我们放弃了多少表现?
  • 人们使用什么硬件/虚拟机服务器配置?

任何帮助将不胜感激.

Hel*_*ick 7

磁盘IO绝对是一个问题,当您使用单个主轴备份时,您无法执行任何大量的磁盘IO活动.单个SATA驱动器上的32MB缓存只会被您的主机和几个Guest OS淹没.如果你看一下你的Ubuntu主机操作系统中的磁盘队列长度计数器,你应该看到它很高(这个系统上任何大于1的任何时候都有2个驱动器,这意味着有些东西在等待那个磁盘).

当我为VM的基础设施调整大小时,我通常会将每个VM的30-50 IOPS作为平均值,这对于那些没有非常运行磁盘子系统的系统来说.对于不需要大量IO活动的系统,您可以稍微降低一点,但构建系统的IO模式将严重偏向大量非常随机的相当小的读取.为了解决这个问题,您需要同时构建大量VM,这将推动磁盘争用.整体磁盘带宽可能不是一个大问题(当IO模式完全顺序时,SATA驱动器可能会推动70-100Meg /秒)但是当文件很小且分散时,您将受到主轴限制的IO限制.在7.2k SATA上大约每秒70-100 IO.运行类型2管理程序的主机操作系统(如VMware Server和单个客户机)可能会在轻负载下运行.

我的建议是构建一个RAID 10阵列,其中包含更小,更理想的驱动器.10k SAS驱动器每个可提供100-150个IOP,因此一包4个可在处理之前处理600个读取IOPS和300个写入IOP.如果要将VM文件放在RAID阵列上,还要确保对齐托管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-利用监测 - 必杀技/ .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包将为读取IO提供N*(1个磁盘的基本IOPS).对于写入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到OS.调整您自己的计算以适应您真正需要的系统数量.

如果您选择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(比如英特尔X-25E,而不是X-25M或更便宜的东西),它有足够的存储空间来满足您的需求.购买两个并为RAID 1设置它们,SSD非常好,但它们的故障率(即使对于像X-25E这样的驱动器)目前比旋转磁盘更糟糕,所以除非你准备好处理你想要RAID 1的死系统至少.结合良好的高端控制器,X-25E在现实世界中可轻松承受6k IOPS,相当于30个15k SAS驱动器.SSD的每GB容量相当昂贵,但如果使用得当,它们可以为IO密集型任务提供更具成本效益的解决方案.