我如何确定VT-d与裸金属的性能损失?

我正在寻找configuration我的服务器在一个奇怪的方式创build一个私有云设置。

我必须把我的存储磁盘绑定的HBA传递给一个虚拟机(可能是xen),以便创build一个vSANtypes的设置。 我想这样做,所以我可以在单个服务器中实施SANtypes设置。

当我问到人们在告诉我时,IOPS不会像裸机一样好。 我把这个考虑到了我的设置中,但是让我想知道这会伤害系统多less?

也有人提到,在裸机上运行的虚拟机,但有一个存储控制器通过创build一个奇怪的依赖性循环,因为虚拟机仍然依赖主机的内存。 除了排除故障之外,是否真的会导致性能显着下降?

噢,顺便说一下,这里主要讨论的文件系统是ZFS。 可能运行在FreeBSD上(包括FreeNAS和NexantaStor)或OpenIndiana。

谢谢!

一个真实的答案,但。

是的,在VT-d直通中运行存储可能会导致延迟或性能下降。

但是想想实际的方面。 你的系统首先不会被IOPS绑定。 在这个存储中有几个抽象层次,事实上你使用的是虚拟机,这说明你和裸机相比可以做得更好。

您应该真正关心的是解决scheme是否可以工作! VT-d可能是脾气暴躁的,并不适用于每个适配器。

因此,请testing您的工作量!

我不推荐这种types的传递设置了。 在大多数情况下,这是一个双赢,特别是在可靠性和性能方面。

这当然可以完成,但最安全的解决scheme(尤其是像ESXi这样的pipe理程序)只是使用受支持的RAID控制器和本地存储。 如果您需要ZFS存储,请构build独立的ZFS存储系统。

免责声明:我没有Xen的经验,所以我写了关于ESXi,但概念是相似的。


至于你最初的问题: “如何testing裸机和虚拟机之间的性能差异?

你的设置如下:

  • 支持VT-d的Intel Xeon CPU的服务器级主板(有其他select,但我会保持简单)
  • 大约20到30 GB的单个SATA SSD,取决于您的操作系统(也可以是硬盘,但会慢一点)
  • 您的HBA支持您的磁盘的LSI芯片
  • 两个英特尔网卡可以在板载或PCIe或两者上,但它们应该是相同的型号。 大多数电路板已经有了,但只有一些有10Gbit的。 如果你使用1Gbit,通常你的性能会达到最高,连续读写的时候大概有4个磁盘或者一个SSD,所以我推荐10Gbit(内部networking在大多数情况下是10GBit,所以这会更有趣)。
  • pipe理程序的USB棒

首先,将您的虚拟机pipe理程序安装到USB存储棒上进行configuration。 将您的SSD分区为2片。 重新启动并安装您的裸机操作系统,就像您通常在第一片上执行操作一样。 将HBA与其他磁盘配合使用,并为性能testingconfiguration一个或多个池。 做这些testing并写下结果。 您至less应该使用所需的协议(iSCSI,NFS,SMB)从命令行和networking性能testing本地性能。 如果可能的话,也testingSSD(不是绝对必要的)。 如果完成,导出您的池。

然后,重新启动(我假设你有远程控制台,所以你可以远程做到这一点),从你的USB棒,而不是本地SSD启动。 现在使用SSD的第二片来创build跨越整个切片的虚拟文件系统2.在这个VFS上,使用与以前相同的ISO来安装您的系统,但现在是虚拟机。 在虚拟机pipe理程序中设置passthrough,并将一个物理网卡和HBA分配给这个新虚拟机。 还要为此虚拟机分配至less一个虚拟网卡(如果要testing不同的types,则分配至less一个虚拟网卡)。 将尽可能多的RAM分配给虚拟机以使条件类似。

然后启动VM,configuration并从VM(通过VNC或SSH)再次导入您的池。 您现在可以对物理适配器和虚拟适配器执行与以前(本地和远程)相同的testing,并记下任何差异。 另外,您可以创build第二个VM,但现在位于从池中提供的共享NFS或iSCSI卷上。 在这个虚拟机上的testing告诉你很多关于你以后的用例作为VM主机。


除了性能指标外的一些想法 我有点像这样的设置有几个原因:

  1. 这与本机设置非常相似:如果服务器死机,您可以删除所有磁盘并将其插入任何其他主机 – 如果主机有虚拟机pipe理程序,则可以在引导小型存储虚拟机后继续使用它们; 即使不是这样,您已经准备好了所有的数据和networking共享,因为所有的数据都在池中。 使用传统的设置,您将不得不担心相同types的RAID控制器,文件系统支持,并需要虚拟机pipe理程序(或从虚拟磁盘复制数据)。
  2. 如果这些组件能够很好地协同工作,那么它将会非常稳定:如果您购买了优质的硬件,那么您将会遇到更less的问题。 即使出现问题,您的数据也将被保存(至less如果您不禁用同步写入,您绝对不应该使用虚拟机!)。 即使你因为某种原因丢失了数据,你也会比其他文件系统更快地知道它。
  3. 它更便宜/更高效:基本上虚拟化了完整的SAN,但不需要两种情况,两个机架空间,两个冗余电源,两个CPU等等。 另一方面,同样的预算可以让你更进一步 – 而不是两个普通的服务器,你可以得到一个很好的function(冗余电源,HBA多path),你的资源(内存,电源等)可以根据需要使用。
  4. 它是灵活的:您可以为每个任务使用最好的操作系统。 例如,使用Oracle Solaris光盘发行版(如OpenSolaris,OmniOS或Nexenta)作为您的存储虚拟机,以获得所有最新function和多年来提供的稳定性。 然后添加用于Active Directory,FreeBSD或OpenBSD的Windows Server,用于内部或外部路由和networking任务,各种Linux应用程序软件或数据库发行版等(如果您不想要这些开销,但想要灵活性,则可以试试SmartOS裸机,尽pipe你的pipe理程序的select仅限于KVM)。

当然,这有缺点。 ewwhite提到了一个,硬件需要匹配。 另外:

  1. 性能很可能永远不会像传统的设置一样好。 在这个问题上你可以投入大量的资金(更多的内存,SSD或NVMe上的ZIL,更多的磁盘,SSD磁盘),但是如果你首先关注性能,虚拟机不是最好的select,ZFS不是最好的select,两者在一起也不是最好的select。 这是你无法逃避的权衡,你有安全和灵活性,但不是最大的性能。
  2. 你需要为启动,关机和断电做一些小的准备。 经验法则:您的存储虚拟机必须是第一个完全启动,最后才能完全启动。 testing并计时你的靴子,知道在启动其他机器之前必须等待多长时间。 关机并不重要,过早关机大致等于单个虚拟机的功耗(这是安全的,只要您的应用程序软件和操作系统以及虚拟机pipe理程序和存储层同意只使用同步写入任何重要的东西)。
  3. 更新可能会更加耗时。 请记住,如果更改存储虚拟机,则必须closures所有其他虚拟机(或强制closures)。 因此,计划一些更多的停机时间(这当然是相同的物理设置,您的SAN将停机更新)。 你也应该彻底地testing核心function(虚拟机pipe理程序,networking驱动程序,虚拟networking驱动程序,存储驱动程序,存储虚拟机)的任何更新,因为你不需要一个在随机时间导致片状NFS行为的错误。
  4. 你还在做备份,对吧? ;)