跳过导航链接 | |
退出打印视图 | |
在 Oracle Solaris 11.1 中使用虚拟网络 Oracle Solaris 11.1 Information Library (简体中文) |
通过 pool 链路属性,您可将网络处理绑定到 CPU 池。使用此属性,您可以更好地整合区域中的网络资源管理与 CPU 绑定和管理。在 Oracle Solaris 中,区域管理包括使用 zonecfg 或 poolcfg 命令将非网络处理与 CPU 资源池绑定。要指定相同的资源池以便同时管理网络处理,请使用 dladm set-linkprop 命令来配置链路的 pool 属性。然后您将该链路指定给该区域。
通过设置链路的 pool 属性并将该链路指定为一个区域的网络接口,该链路将同时绑定到该区域的池。如果该区域被设置为专用区域,则未指定给该区域的其他数据链路不再能够使用池中的 CPU 资源。
注 - 可以设置一个单独的属性 cpu 来将特定 CPU 指定给数据链路。cpu 和 pool 这两个属性是互斥的。您不能为给定数据链路同时设置这两个属性。要使用 cpu 属性将 CPU 资源指定给数据链路,请参见如何将 CPU 分配给链路。
有关区域中池的更多信息,请参见《Oracle Solaris 11.1 管理:Oracle Solaris Zones、Oracle Solaris 10 Zones 和资源管理》中的第 13 章 "创建和管理资源池(任务)"。有关创建池以及将 CPU 集指定给池的更多信息,请参阅 poolcfg(1M) 手册页。
下图显示将 pool 属性指定给数据链路时池的工作原理。
图 3-1 指定给一个区域的 VNIC 的 pool 属性
在图中,系统有八个 CPU。如果系统上没有配置池,则所有 CPU 都属于缺省池并由全局区域使用。不过,在本示例中,已创建 pool99 池,其中包含 CPU 3 和 CPU 4。该池与专用区域 zone1 相关联。如果 pool99 被设置为 vnic1 的一个属性,则 pool99 变为专用于管理 vnic1 的网络处理。在将 vnic1 指定为 zone1 的网络接口后,pool99 中的 CPU 将被保留,用于管理 zone1 的网络和非网络处理。
pool 属性在本质上是动态的。可以使用一个 CPU 范围配置区域池,内核确定将哪些 CPU 指定给该池的 CPU 集。对池的更改会自动针对数据链路实现,从而简化了该链路的池管理。相反,通过使用 cpu 属性将特定 CPU 指定给链路时会要求您指定要分配的 CPU。每次要更改池的 CPU 组成时,您必须设置 cpu 属性。
例如,假定使图 3-1 中的系统 CPU 4 处于脱机状态。由于 pool 属性是动态的,软件会自动将另一个 CPU 与池相关联。因此,会保留池的两个 CPU 的初始配置。对于 vnic1,此更改是透明的。调整后的配置如下图所示。
图 3-2 pool 属性的自动重新配置
其他与池相关的属性显示有关数据链路的 CPU 使用或 CPU 池的信息。这些属性是只读属性,不能由管理员设置。
pool-effective 显示正用于网络处理的池。
cpus-effective 显示正用于网络处理的 CPU 的列表。
为了管理区域的 CPU 资源,设置数据链路的 pool 属性通常不作为初始步骤执行。更常见的是使用命令(如 zonecfg 和 poolcfg)将区域配置为使用资源池。cpu 和 pool 链路属性本身并未设置。在这种情况下,当引导区域时,会根据区域配置自动设置这些数据链路的 pool-effective 和 cpus-effective 属性。缺省池显示在 pool-effective 下,同时由系统选择 cpus-effective 的值。因此,如果使用 dladm show-linkprop 命令,则 pool 和 cpu 属性将为空,而 pool-effective 和 cpus-effective 属性将包含值。
要为网络处理绑定区域的 CPU 池,您还可以直接设置数据链路的 pool 和 cpu 属性。配置这些属性后,它们的值也会反映在 pool-effective 和 cpus-effective 属性中。但是请注意,通常不使用此替代步骤来管理区域的网络资源。
与其他链路属性一样,数据链路的 pool 属性可以在创建链路时设置,也可以稍后在链路需要进一步配置时设置。
要在创建 VNIC 时设置 pool 属性,请使用以下语法:
# dladm create-vnic -p pool=pool-name -l link vnic
要设置现有 VNIC 的 pool 属性,使用以下语法:
# dladm setlinkprop -p pool=pool-name vnic
以下过程介绍了如何为 VNIC 配置 CPU 池。
开始之前
您必须完成以下事项:
使用为其指定的 CPU 数量创建一个处理器集
创建一个将与处理器集相关联的池
将池与处理器集相关联
注 - 有关完成这些先决条件的说明,请参见《Oracle Solaris 11.1 管理:Oracle Solaris Zones、Oracle Solaris 10 Zones 和资源管理》中的"如何修改配置"。
如果尚未创建 VNIC,使用以下语法:
# dladm create-vnic -l link -p pool=pool vnic
其中 pool 指为区域创建的池的名称。
如果 VNIC 存在,请使用以下语法:
# dladm setlinkprop -p pool=pool vnic
zonecfg>zoneid:net> set physical=vnic
注 - 有关解释如何将网络接口指定给区域的说明,请参阅《Oracle Solaris 11.1 管理:Oracle Solaris Zones、Oracle Solaris 10 Zones 和资源管理》中的"配置、检验并提交区域"
示例 3-6 将链路的 CPU 池指定给具有专用 IP 类型的区域
本示例说明如何将池指定给区域的数据链路。该方案基于图 3-1 中的配置。本示例假定已为区域配置一个名为 pool99 的 CPU 池。然后将该池指定给一个 VNIC。最后,将非全局区域 zone1 设置为使用该 VNIC 作为网络接口。
# dladm create-vnic -l net1 -p pool99 vnic1 # zonecfg -c zone1 zonecfg:zone1> set ip-type=exclusive zonecfg:zone1> add net zonecfg:zone1>net> set physical=vnic1 zonecfg:zone1>net> end zonecfg:zone1> exit
以下过程说明如何通过配置 cpu 属性,指定特定 CPU 来处理数据链路上的通信流量。
# dladm show-linkprop -p cpus link
缺省情况下,没有将 CPU 指定给任何特定接口。因此,命令输出中的参数 VALUE 将不包含任何条目。
# echo ::interrupts | mdb -k
输出将列出系统上每个链路的参数,包括 CPU 数量。
这些 CPU 可以包括与链路的中断相关联的 CPU。
# dladm set-linkprop -p cpus=cpu1,cpu2,... link
其中 cpu1 是要指定给该链路的 CPU 编号。您可以为链路指定多个专用 CPU。
# echo ::interrupts | mdb -k
# dladm show-linkprop -p cpus link
示例 3-7 将 CPU 分配给链路
此示例说明如何将特定 CPU 指定给数据链路 net0。
请注意由不同的命令生成的输出中的以下信息。为清楚起见,重要信息在输出中强调显示。
# dladm show-linkprop -p cpus net0 LINK PROPERTY PERM VALUE DEFAULT POSSIBLE net0 cpus rw -- -- -- # echo ::interrupts | mdb -k Device Shared Type MSG # State INO Mondo Pil CPU net#0 no MSI 2 enbl 0x1a 0x1a 6 18 # dladm set-linkprop -p cpus=14,18,19,20 net0 # dladm show-linkprop -p cpus net0 LINK PROPERTY PERM VALUE DEFAULT POSSIBLE net0 cpus rw 14,18,19,20 -- --
所有支持线程(包括中断)现在只限于新指定的 CPU 集。
另请参见
有关显示如何使用流以及如何分配系统资源(包括 CPU 和 CPU 池)以在虚拟网络中处理网络通信的示例,请参见示例 3-8。