频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

详解Windows Server 2008内核新变化

来源:chinaitlab 作者:佚名 出处:巧巧读书 2008-04-06 进入讨论组
上一页 1 2 3 4 5 下一页 

NUMA 优化

Windows Server 2003 在线程调度程序和内存管理器中引入了 NUMA 优化,而 Windows Server 2008 在 I/O 管理器中添加了 NUMA 优化同时扩展了内存管理器的 NUMA 优化。

NUMA 系统通常是多处理器系统,其中的内存延迟随访问它的处理器不同而有所不同(请参见图 4)。内存被分成多个节点,CPU 和节点之间的延迟可能各不相同,并且每个 CPU 都被视为它可最快访问的那个节点的一部分。

详解Windows Server 2008内核新变化(图五)

图 4 示例 NUMA 系统

NUMA 系统(尤其是具有超过八个 CPU 的系统)通常比一致内存访问系统更加经济且性能更高。一致内存访问系统必须平等地为所有 CPU 提供内存,而 NUMA 系统则能够为直接连接到 CPU 的内存提供高速互连,同时为与 CPU 相隔较远的内存提供较为便宜但更高延迟的连接。

为能在 NUMA 系统中有效扩展,操作系统或应用程序必须了解节点拓扑结构,以便使计算能够在包含计算数据和代码的内存附近执行。例如,Windows 调度程序为每个线程分配一个所谓的理想处理器,该处理器是调度程序试图始终在其上执行该线程的 CPU。这样做可以使线程置于 CPU 缓存中的数据能够尽可能地在每次该线程运行时可用。

在 Windows Server 2003 中,调度程序扩展此概念的方法是:将包含理想处理器的节点视为该线程的理想节点,并且当理想处理器正忙于执行另一个线程时,调度程序会尝试在理想节点中的另一个 CPU 上调度该线程。Windows Server 2003 内存管理器也支持 NUMA,并且在可能的情况下,它会将线程的内存分配定向到正在执行此线程的节点的内存中。

在 Windows Server 2008 中,内存管理器将内核的非分页内存缓冲区(内核和设备驱动程序用于存储必需保存在 RAM 中的数据的内存)分到各个节点,这样可以在产生分配的节点上为线程分配内存。系统页表项 (PTE) 是从发生分配的节点中分配,如果需要新页表页来满足内存分配,则会按照在 Windows Server 2003 中所采取的方式在相同的节点内存中分配,而不会从任何其他节点的内存中分配。

在 Windows Server 2003 中,当线程进行内存分配时,内存管理器在分配内存时将优先考虑在线程当前执行的节点中进行分配。如果线程暂时调度到非理想节点,则在此期间执行的所有分配操作都将在非理想节点中执行。所以,当线程最终回到其理想节点中执行时,它将不再像最初一样紧挨着所分配内存中存储的数据或代码。

为解决这一问题,在 Windows Server 2008 中,内存管理器在所有线程内存分配时都将优先考虑线程的理想节点,即使线程正在另一节点附近执行。内存管理器还能自动了解处理器和节点之间的延迟,所以当理想节点中没有足够的可用内存时,它会检查与理想节点最近的另一节点。此外,当线程引用代码或数据时,内存管理器将把其待机列表中的页面迁移到线程的理想节点。

希望控制分配位置的应用程序可使用新的 NUMA 内存 API,它使这些应用程序能够为内存分配、文件映射视图和文件映射对象指定首选节点。对于与文件映射相关的分配,内存管理器会检查映射操作是否指定节点,然后检查文件映射对象是否指定节点,如果两者都未指定,则最后它将回来继续选用线程的理想节点。

在 Windows Server 2008 之前,用于存储或网络 I/O 的中断及其相关的延缓进程调用 (DPC) 能够在任意 CPU 上执行,包括在与启动 I/O 操作处于不同节点的 CPU 上执行。这有可能导致 I/O 操作中的数据读取或写入在访问数据的节点以外的其他节点的内存中执行。

为避免这种情况,Windows Server 2008 I/O 系统将 DPC 执行定向到启动 I/O 操作的节点中的 CPU,并且拥有支持 PCI 总线 MSI-X(消息信号中断标准的扩展)设备的系统还可以通过使用设备驱动程序来进一步让 I/O 在本地完成,因为这些设备驱动程序将利用 Windows Server 2008 API 将 I/O 中断定向到启动该 I/O 的处理器。

动态分区

让系统更具伸缩性的一种方法是让其支持动态增加硬件资源(如 CPU 和内存)。如果这些资源无需重启系统即可实现更换,则此支持还能使系统更具可用性。

Windows Server 2003 支持动态内存添加功能,从而使得具有动态内存支持的服务器能在管理员添加的同时即可使用这些 RAM。Windows Server 2008 还扩展了动态内存支持,因为它可实现内存更换。

RAM 由于越来越依赖纠错码 (ECC) 校正而非常容易发生故障,因此在支持动态更换的服务器上,Windows Server 2008 可透明地将出现故障的内存条中的数据迁移到替换内存上。具体过程为:首先迁移操作系统所控制的数据,然后将硬件设备置于低功耗状态来有效关闭它们,迁移内存中的剩余数据,接着恢复设备电源继续正常操作。

Windows Server 2008 还支持处理器的动态添加和动态更换。对于动态更换,硬件必须支持备用 CPU 概念,当现有 CPU 产生故障指示时,备用 CPU 可联机或动态添加到系统中,目前仅高端系统支持此概念。Windows Server 2008 调度程序可减缓故障 CPU 上活动的速度,并将工作转移至替换硬件上,随后可取出故障 CPU 并将其更换为新的备用件。

Windows Server 2008 支持处理器的动态添加,因此管理员能在不停机的情况下升级服务器的处理能力。但是,调度程序和 I/O 系统只能将新 CPU 提供给那些通过新 API 请求 CPU 到达通知的设备驱动程序和应用程序,因为某些应用程序内置假定 CPU 数量对于引导会话而言是固定的。例如,应用程序可能为每个 CPU 分配一个工作队列,线程执行时将使用与该 CPU 关联的队列。如果调度程序将该应用程序的某个线程调度到新的 CPU 上,它可能会试图引用并不存在的队列,因而可能导致损坏应用程序的数据并很有可能致使该应用程序崩溃。

基于 Microsoft 服务器的应用程序(如 SQL ServerExchange Server)能支持 CPU 动态添加,一些核心 Windows 进程也支持此功能,包括 System 进程、会话管理器进程 (%SystemRoot%\System32\Smss.exe) 和 Generic Service Hosting 进程 (%Systemroot%\System32\Svchost.exe)。其他进程也可使用 Windows API 来请求新 CPU 到达通知。当新 CPU 到达时,Windows 将向设备驱动程序通知这一情况、启动 CPU 并随后通知所写入的设备驱动程序和应用程序使用新的 CPU,这样它们就可以在需要时分配数据结构以跟踪新 CPU 上的活动。

更多文章 更多内容请看Windows操作系统安装Windows权限设置Windows操作系统安全集专题,或进入讨论组讨论。
上一页 1 2 3 4 5 下一页 
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章