NUMA 硬件上的 IIS 8.0 多核缩放
兼容性
版本 | 说明 |
---|---|
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 支持通过以下两种方式对工作负荷进行分区:
- 在一个应用程序池(如 Web 花园)中运行多个工作进程:如果使用此模式,默认情况下,应用程序池配置为运行一个工作进程。 为了获得最佳性能,应考虑运行与 NUMA 节点相同的工作进程数,以便工作进程和 NUMA 节点之间存在 1:1 关联。 这可以通过将 AppPoolsetting 的“最大工作进程数”设置为 0 来实现。 在此设置中,IIS 确定硬件上有多少 NUMA 节点可用,并启动相同数量的工作进程。
- 在单个工作负荷/站点中运行多个应用程序池:在这种配置中,工作负荷/站点被划分给多个应用程序池。 例如,站点可能包含配置为在单独的应用程序池中运行的多个应用程序。 实际上,此配置会导致为工作负荷/站点运行多个 IIS 工作进程,IIS 智能地分配和关联进程,以实现最佳性能。
此外,IIS 8.0 还有两种不同的方法,用于在 IIS 工作进程即将启动时识别最佳 NUMA 节点。
- 最多可用内存(默认):此方法背后的理念是,具有最多可用内存的 NUMA 节点最适合用于处理即将启动的其他 IIS 工作进程。 IIS 了解每个 NUMA 节点的内存消耗情况,并使用此信息对 IIS 工作进程进行“负载均衡”。
- Windows:IIS 还可以选择让 Windows OS 做出此决定。 Windows OS 使用轮循机制。
最后,可通过两种不同的方法将线程从 IIS 工作进程关联到 NUMA 节点。
- 软相关性(默认):使用软相关性,如果其他 NUMA 节点具有周期,则来自 IIS 工作进程的线程可能会被调度到未关联的 NUMA 节点。 此方法有助于将系统上的所有可用资源最大化。
- 硬相关性:使用硬相关性,无论系统上其他 NUMA 节点上的负载如何,IIS 工作进程中的所有线程都将关联到使用上述设计选择的选定 NUMA 节点。
分步说明
先决条件
- IIS 安装在 Windows Server 2012 上。
- IIS 进程模型是 IIS 应用程序池配置的一部分。 不需要从服务器管理器安装特定的 IIS 功能。
已知 bug 的解决方法
此功能目前没有已知的 bug。
配置步骤
- 打开“IIS 管理器”。
- 在左侧导航窗口中选择“应用程序池”:
- 选择“应用池”:
- 在“操作”窗格中,选择“高级设置”:
- 在“进程模型”组中,找到“最大工作进程”设置。
- 将该值设置为 0。
在“高级设置”下还可以找到最佳 NUMA 选择逻辑以及相关性类型。 但是,仅当 IIS 在 NUMA 硬件上运行时,它们才会显示。
方案
在升级到 Windows Server 2012 之前和之后,在 NUMA 硬件上运行性能测试。 比较性能结果以查看改进。
总结
你已成功探索 Windows Server 2012 中 NUMA 硬件功能的 IIS 多核缩放。