NUMA 硬件上的 IIS 8.0 多核缩放

作者:Robert McMurray

兼容性

版本 说明
IIS 8.0 在 IIS 8.0 中引入了 NUMA 上的多核缩放。
IIS 7.5 IIS 7.5 不支持 NUMA 上的多核缩放。
IIS 7.0 IIS 7.0 不支持 NUMA 上的多核缩放。

问题

一般来说,增加核心数应提高性能。 但有一点需要注意,增加内核数量可能会导致性能下降,因为内存同步的成本超过了具有额外内核的 NUMA 硬件的优势。 IIS 8.0 解决此问题的方法是在非统一内存访问 (NUMA) 硬件上智能分配和关联其进程。

解决方案

Windows Server 2012 上的 Internet Information Services (IIS) 可识别 NUMA,并为 IT 管理员提供最佳配置。 以下章节介绍在 NUMA 硬件上使用 IIS 8.0 实现最佳性能的不同配置选项。

IIS 支持通过以下两种方式对工作负荷进行分区:

  1. 在一个应用程序池(如 Web 花园)中运行多个工作进程:如果使用此模式,默认情况下,应用程序池配置为运行一个工作进程。 为了获得最佳性能,应考虑运行与 NUMA 节点相同的工作进程数,以便工作进程和 NUMA 节点之间存在 1:1 关联。 这可以通过将 AppPoolsetting 的“最大工作进程数”设置为 0 来实现。 在此设置中,IIS 确定硬件上有多少 NUMA 节点可用,并启动相同数量的工作进程。
  2. 在单个工作负荷/站点中运行多个应用程序池:在这种配置中,工作负荷/站点被划分给多个应用程序池。 例如,站点可能包含配置为在单独的应用程序池中运行的多个应用程序。 实际上,此配置会导致为工作负荷/站点运行多个 IIS 工作进程,IIS 智能地分配和关联进程,以实现最佳性能。

此外,IIS 8.0 还有两种不同的方法,用于在 IIS 工作进程即将启动时识别最佳 NUMA 节点。

  1. 最多可用内存(默认):此方法背后的理念是,具有最多可用内存的 NUMA 节点最适合用于处理即将启动的其他 IIS 工作进程。 IIS 了解每个 NUMA 节点的内存消耗情况,并使用此信息对 IIS 工作进程进行“负载均衡”。
  2. Windows:IIS 还可以选择让 Windows OS 做出此决定。 Windows OS 使用轮循机制。

最后,可通过两种不同的方法将线程从 IIS 工作进程关联到 NUMA 节点。

  1. 软相关性(默认):使用软相关性,如果其他 NUMA 节点具有周期,则来自 IIS 工作进程的线程可能会被调度到未关联的 NUMA 节点。 此方法有助于将系统上的所有可用资源最大化。
  2. 硬相关性:使用硬相关性,无论系统上其他 NUMA 节点上的负载如何,IIS 工作进程中的所有线程都将关联到使用上述设计选择的选定 NUMA 节点。

分步说明

先决条件

  • IIS 安装在 Windows Server 2012 上。
  • IIS 进程模型是 IIS 应用程序池配置的一部分。 不需要从服务器管理器安装特定的 IIS 功能。

已知 bug 的解决方法

此功能目前没有已知的 bug。

配置步骤

  1. 打开“IIS 管理器”。
  2. 在左侧导航窗口中选择“应用程序池”:
    Screenshot that shows Application Pools selected.
  3. 选择“应用池”:
    Screenshot that shows the Application Pools pane. The Default App Pool line is highlighted.
  4. 在“操作”窗格中,选择“高级设置”:
    Screenshot that shows the Actions pane with Advanced Settings highlighted.
  5. 在“进程模型”组中,找到“最大工作进程”设置。
    Screenshot that shows the Process Model group. Maximum Worker Processes and its value of 1 is highlighted.
  6. 将该值设置为 0。

在“高级设置”下还可以找到最佳 NUMA 选择逻辑以及相关性类型。 但是,仅当 IIS 在 NUMA 硬件上运行时,它们才会显示。

方案

在升级到 Windows Server 2012 之前和之后,在 NUMA 硬件上运行性能测试。 比较性能结果以查看改进。

总结

你已成功探索 Windows Server 2012 中 NUMA 硬件功能的 IIS 多核缩放。