作者:Jon Anderson、Pradhap Devarajan、Darrin Johnson、Narayana Janga、Raghuram Kothakota、Justin Hatch、Ravi Nallan 和 Jeff Savit
2014 年 8 月发布
本文介绍一组可用于提高 Oracle VM Server for SPARC 上虚拟网络性能的最佳实践。
|
请注意,除非在虚拟网络性能的特定上下文中,逻辑域 (LDOM) 的配置和安装不在本文讨论范围内。本文所含信息并不能取代 Oracle VM Server for SPARC 官方文档和硬件特定文档,只是一个补充。
Oracle VM Server for SPARC(以前称为 Sun Logical Domains)为 Oracle SPARC T 系列服务器和受支持的 Oracle M 系列服务器提供了高效的企业级虚拟化功能。
Oracle VM Server for SPARC 允许您在一个系统上创建多个虚拟服务器,利用受支持的 SPARC 服务器和 Oracle Solaris 操作系统 (OS) 提供的大规模线程。本文介绍的所有虚拟化功能均为 Oracle Solaris 的标准组成部分,无需额外费用。
CPU 和内存性能在控制和逻辑(来宾)域中受到的影响最小。但是,I/O 和网络性能很可能受 I/O 域开销的影响。我们鼓励您根据负载要求,评估 Oracle VM I/O 和网络性能。
注:此处提供的所有信息均与 Oracle SPARC T4 和 SPARC T5 平台和 10 GbE IXGBE 接口有关。
此外,Oracle 还建议平衡多个来宾域、硬件 I/O 和计算资源之间的网络负载。
根据经验,对于 Oracle VM Server for SPARC 3.1 或更高版本,建议每个 10 Gb/秒以太网设备至少 使用一个完整内核(SPARC T4 和 SPARC T5 平台)。但为了实现最高性能,建议采用两个完整内核。此数目在内部经验测试中确定。理想情况下,应为域分配自己的 CPU 内核,以免产生域内 CPU 资源竞争。
Oracle VM 提供了灵活的域 I/O 资源分配,特别是在网络领域。凭借这种灵活性,产生了多种性能可能。本文致力于就最适合特定负载的配置提供指导。
Oracle VM 支持的网络特性允许执行以下操作:
ldm
(1M) set-io iov=on
。有关详细信息,请参见“通过分配 PCIe 端点设备创建 I/O 域”。Oracle VM 网络提供了以下好处:
配置了这些特性的域可以在运行时迁移,无需中断活动。
注:SR-IOV 虚拟功能 (VF) 使用时的实时迁移仅适用于 Oracle VM Server for SPARC 3.1 中引入的动态 SR-IOV 特性。Oracle VM Server for SPARC 的早期版本支持混合 I/O 特性。这允许每个 NIU(nxge 驱动程序)最多三个虚拟网络设备拥有直接分配的直接内存访问 (DMA) 资源。在最新的 Oracle VM 软件中,此特性被 SR-IOV 取代,仅支持基于 UltraSPARC T2 CPU 的平台。
一般来说,建议您运行 Oracle VM Server for SPARC 的最新可用版本,并保持更新系统软件和 固件。Oracle 强烈建议控制域和 I/O 域运行最新版本的 Oracle Solaris 11.1 (SRU9+),而非 Oracle Solaris 10,实现最佳功能和性能。
虽然 Oracle Solaris 10 和 Oracle Solaris 11 均可用作来宾操作系统,但为了获得最佳性能和使用其他特性,建议您部署 Oracle Solaris 11.1(SRU9 或更高版本)。
Oracle VM 中的虚拟网络涉及两个基本组件:
虚拟网络的性能取决于所涉及的两个域:I/O 或服务域和来宾域。数据包传输涉及数据复制,必然需要 CPU 周期。如果没有数据移动,就不会占用 CPU 周期。制定 CPU 资源预算时,应考虑给定域上希望支持的最高带宽。应定期监视资源消耗,确保最佳性能。
Oracle 提供以下建议:
dladm show-linkprop <linkname>
命令列出与 vnet 数据链路关联的 CPU 扇出资源,检查有效扇出。# dladm show-linkprop net1 ... net1 cpus-effective r- 0-15 net1 rxfanout-effective r- 8 net1 rxrings-effective r- 8 net1 txrings-effective r- 8 ...
注意,默认 rxfanout-effective
值为 8
,可在 10 GbE 链路上实现最佳性能。
ldm
(1M) add-core
、set-core
、add-domain
和 set-domain
子命令和整体内核约束。整体内核约束支持的 LDOM 数依赖于底层平台。如果需要更细粒度的资源分配,Oracle 建议在最佳配置的 LDOM 中使用 Oracle Solaris 区域。Oracle VM Server for SPARC 中的域内通信通过名为逻辑域通道 (LDC) 的点对点接口执行。每个虚拟资源连接使用一个 LDC。通过虚拟网络,每个 vnet 由 LDC 链接到 vsw,默认情况下,还直接链接到附连到 vsw 的其他每个 vnet。所需 LDC 数随附连的每个 vnet 设备呈指数增长。虽然可用 LDC 数有限,但这通常不是问题,除非 LDOM 配置极其复杂。在这种情况下,可以通过禁用交换机上的 inter-vnet-link
属性减少 vnet/vsw LDC 消耗。请参见 ldm
(1M) 手册页,了解更多详细信息。
禁用交换机上的 inter-vnet-link
属性导致来自一个域的通信被路由到服务域(托管 vsw),这对域内通信性能有明显影响。因此,为实现最佳整体性能,强烈建议启用 inter-vnet-link
属性(这是默认设置)。
您可以使用 ldm list-bindings -e
命令从控制域查看系统上的 LDC 使用情况。还可以使用 kstat -p|grep ldc
命令大致了解。
为实现最佳虚拟网络性能,Oracle 建议使用最新的 Oracle VM Server for SPARC 软件(目前版本为 3.1)。请参考版本说明,确定最低硬件和软件要求。如前所述,为实现最佳功能和性能,Oracle 强烈建议在所有非来宾(控制、IO/服务)域上运行 Oracle Solaris 11.1 SRU9+。要从 vnet 和 vsw 性能上最近的显著改进中受益,请在 I/O 或服务域和来宾域中至少运行 Oracle Solaris 11.1 SRU9。对于 Oracle Solaris 10,请在来宾域上安装 150031-07 或更新补丁。
除了运行推荐软件,还有必要确保在托管虚拟交换机的来宾域和 I/O 或服务域中将 extended-mapin-space
设置为 on
。默认情况下,Oracle VM Server for SPARC 软件 3.1 版或更高版本及关联固件将此属性设置为 on
。要检查该设置,请运行以下命令:
# ldm ls -l <domain-name> |grep extended-mapin
如果 extended-mapin-space
不是 on
(例如,在 Oracle VM Server for SPARC 3.1 软件升级前的 LDOM 中),可以使用以下命令启用该属性:
# ldm set-domain extended-mapin-space=on <domain-name>
对 extended-mapin-space
属性的更改将触发主域中的延迟重新配置,并需要重启。重启之后,需要停止并重新启动 LDOM。
可以使用 kstat
命令检查 LDC 上配置的模式,例如:
# kstat -p|grep dring_mode vnet:0:vnetldc0x0:dring_mode 4 vnet:0:vnetldc0x3:dring_mode 4 vnet:1:vnetldc0x1:dring_mode 4 vnet:1:vnetldc0x6:dring_mode 4
以下是可用模式:
#define VIO_TX_DRING 0x1 #define VIO_RX_DRING 0x2 #define VIO_RX_DRING_DATA 0x4
使用最新软件并将 extended-mapin-space
设置为 on
后,dring_mode
应为 4
。
最新 Oracle VM 和 Oracle Solaris 软件提供的重要性能优势通过提高代码效率和大型发送分流 (LSO) 特性实现。此特性允许 TCP 协议栈将大数据包写入处理分帧的数据链路,将每数据包成本分摊到栈,类似于巨型帧在数据链路层中的做法。可以通过以下 kstat
统计信息观察 LSO。
# kstat -p|grep lso tcp:0:tcpstat:tcp_lso_disabled 0 tcp:0:tcpstat:tcp_lso_enabled 168 tcp:0:tcpstat:tcp_lso_pkt_out 170173983 tcp:0:tcpstat:tcp_lso_times 32649030 vnet:0:vnetldc0x1:lso_enabled 1 vnet:0:vnetldc0x1:lso_ipackets 0 vnet:0:vnetldc0x1:lso_max_len 8192 vnet:0:vnetldc0x1:lso_opackets 20915690
图 1 至图 3 所示图形旨在展示通过最新软件和分配足够硬件资源的平衡 LDOM 配置能够实现的性能。实际性能可能有所不同,受负载、系统和网络配置的影响。
注:这些图形仅用于说明;并不保证现在或将来的性能。
图 1、图 2 和图 3 所示性能测量结果是用以下系统配置获得的。
uperf
,使用 iperf
配置文件 (TCP)图 1. LDOM 到 LDOM 性能测量
图 2. LDOM 到外部 (vnet->vsw->IXGBE 10 GbE)* 性能测量
图 3. CDOM 到外部(通过 IXGBE 10 GbE)性能测量
在此基准测试中,使用默认的 1500 字节 MTU,网络接口卡 (NIC) 在报告的约 8.7 Gb/秒达到饱和。
如果运行 Oracle Solaris 11 及更高版本,可以使用 dlstat
(1M) 命令(如清单 1 所示)查看是如何在与 vnet 设备关联的伪介质访问控制 (MAC) 环上拆分流量的,例如:
dlstat show-link [-r|-t] [-i <interval>] <vnet device>
# dlstat show-link -r -i 1 net1 LINK TYPE ID INDEX IPKTS RBYTES INTRS POLLS IDROPS net1 rx local -- 0 0 0 0 0 net1 rx other -- 0 0 0 0 0 net1 rx hw 0 38.98K 237.63M 38.98K 0 0 net1 rx hw 1 65.54K 398.06M 65.54K 0 0 net1 rx hw 2 13.14K 91.20M 13.14K 0 0 net1 rx hw 3 23.59K 150.55M 23.59K 0 0 net1 rx hw 4 31.25K 220.17M 31.25K 0 0 net1 rx hw 5 57.22K 385.30M 57.22K 0 0 net1 rx hw 6 67.02K 444.18M 67.02K 0 0 net1 rx hw 7 57.83K 389.23M 57.83K 0 0
清单 1
作为对比,图 4 显示使用 SR-IOV 而非 vnet/vsw 时的一些结果。使用 IXGBE 设备创建了一个 SR-IOV 虚拟功能(参见 ldm
(1M) create-vf
),将它分配给一个四核来宾域。然后,使用 uperf
并用前述系统配置重复同样的 I/O 测试。
图 4. LDOM (IODOM) 到外部(通过 ixgbevf)性能测量
可以看到在这些测试范围内,性能与物理设备几乎相当。主要区别似乎是 MAC 环更少、中断更少(每个环一个 IXGBE 中断)。在单线程性能较低的平台上,这种差异可能更显著。注意,这仍是共享资源;随着此资源利用率的增加,性能预计会下降。所有虚拟功能只基于一个 10 GbE 链路。
一般来说,来宾域的表现与常规系统大致相同,都应响应特定负载要求(例如 TCP 窗口大小)执行任何特定调优。这完全取决于运行的应用的要求。应用驱动系统行为。
ip_soft_rings_cnt
默认值为 2
。推荐值为虚拟 CPU 数。
此参数仅适用于 Oracle Solaris 10。Oracle Solaris 11 及更高版本实现了全新的 MAC 层,其内置的扇出能力取决于平台架构。
ip_soft_rings_cnt
变量确定用于扇出传入 TCP/IP 连接的工作线程数。应根据系统类型及是否使用链路聚合来调优 ip_soft_rings_cnt
。开始时最好将此值设置为 vCPU 计数/2。在 sun4v 系统上会在内部将此值乘以 2,因此您需要将期望值除以 2。
在 /etc/system
中设置此值:
set ip:ip_soft_rings_cnt=8
需要重启。
设置为 8
将导致每设备创建 16 个软环。
在 Oracle VM Server for SPARC 3.1 之前的版本中,巨型帧可提高网络吞吐量,因为每数据传输成本被分摊。Oracle VM Server 3.1(及相关操作系统版本)提供了 LSO 特性,使用 TCP 协议时可提高标准以太网 MTU(1500 字节)性能。这避免了大多数情况下对巨型帧的要求。实际上,因为难以诊断可能发生的路径 MTU 问题,如无特殊需要,不建议您配置巨型帧特性。
对于 Oracle VM 3.1 之前的版本(及必需的 Oracle Solaris 支持),要实现最佳网络吞吐量,无一例外都必需巨型帧。
default_mtu
变量应设置为等于或小于网络基础设施(包括任何交换机和路由器)支持的最高 MTU。通常,最大 MTU 大小为 9216 (1024*9),但实际 MTU 大小依赖于各设备的规格。
无论确定为何值,重要的是必须在与该设备关联的所有虚拟交换机上将 MTU 设置为此值。要更改 vnet 中的 MTU,通常只需更改 vsw 设备的 MTU 即可,例如:
# ldm set-vswitch mtu=9000 vsw-10g-priv-primary
需要重启拥有通过此 vsw 的 vnet 的 LDOM。
在 Oracle Solaris 11 上,要更改物理接口的 MTU,请使用 dladm set-linkprop
命令设置物理数据链路的 mtu
属性。在 Oracle Solaris 10 上,要更改物理接口的 MTU,请阅读您的硬件及所运行 Oracle Solaris 版本的相关文档。
巨型帧的主要注意事项是要求在整个网络基础架构中和虚拟机内部启用帧。通常通过运行带宽测试(如发送 1 MB 消息)并观察挂起来进行验证。
随着 Oracle VM Server for SPARC 3.1(及至少 Oracle Solaris 11.1 SRU9 或 Oracle Solaris 10 版本加 150031-07 或更高补丁)中引入的 vnet/vsw 更改,由于 LSO,使用 TCP 时的虚拟网络性能实际上比不用巨型帧时更好。
在 Oracle Solaris 11 中,可以运行 dladm show-linkprop -p mtu
命令检查支持的 MTU。输出将在 POSSIBLE
列中列出支持的 MTU。Intel 82599 芯片集的虚拟功能 (VF)(例如基于 Niantic 的卡,如 X1109a-z)上不支持非标准 MTU。请参见 /kernel/drv/ixgbevf.conf
。
链路聚合 (IEEE 802.3ad) 提供了一种机制,可将一个或多个网络链路聚合成一个链路聚合主干。(聚合链路在客户端看来就像一个数据链路。)使用聚合链路上创建的 vsw 完成的网络配置可以实现:
聚合链路的效率取决于所选择的散列策略。请参见 dladm
(1M) 手册页。如果您运行 Oracle Solaris 11 及更高版本,可以使用 dlstat
(1M) 命令监视聚合链路的效率,例如:
# dlstat show-aggr -r -i 1 aggr1
注意,要实现全部潜力,链路聚合需要能够饱和聚合带宽的负载。
Jon Anderson、Pradhap Devarajan 和 Ravi Nallan 是 Oracle 系统 RPE 组的软件开发人员,Darrin Johnson 是该组软件总监,而 Narayana Janga 是该组高级首席工程师。
Raghuram Kothakota 是 Oracle VM 组的软件开发人员,Jeff Savit 是该组首席技术产品经理。
Justin Hatch 是 Oracle SPARC 技术服务中心的高级首席技术支持工程师。
修订版 1.0,2014 年 7 月 24 日 |