浅谈:Win7如何提升Nehalem的利用率

他们合作的结果是更好的性能,提高电力消费,或两者兼而有之,这取决于在你的应用程序中的线程的数量。

英特尔Nehalem处理器的几个重要特点就在于更好的处理器核心管理。四核的Nehalem芯片利用对称多线程(SMT)技术,每一个核心能够同时运行两个线程。如果启用了SMT的话,处理器最多就可以可以由启用前运行的4线程增长到8个线程。

SMT一般是配置在BIOS中的,可以在启动时做更改。由于Nehalem处理器每线程之间的核心都在共享一些资源,而SMT的作用就是使处理器的性能和吞吐量增倍。无论你的应用程序运行SMT或不运行,这些都需要通过具体测试你的应用程序才能确定。

对于这种线程如何工作的讨论中,我将只谈四个内核运行的每一个线程–即禁用SMT技术后的状态。请注意,这就是由供应商配置在一般Nehalem电脑中的情况。

Nehalem的架构十分关注每个核心所活跃运行的代码。当在一个确定的时间内,核心仍然没有活动时,晶体管驱动器将关闭处理器的核心。此功能的设计主要为了节约能源。该处理器还可以增加活跃的核心频率,以便提高性能。此选项被称为Turbo模式,在某些系统中的Turbo模式需要具体启用。

于是所有这一切事情神奇的发生了,因为这种功能,需要操作系统进行配合。关键是,必须保证处理器的活跃核心拥有足够长的时间来关闭它的晶体管。这是在Windows 7发布之前很难达到的。虽然创建应用程序的线程是由它的操作系统来安排并加以执行的。应用程序无法自己进行调控,他们只能控制到底使用哪些管道。在Windows 7之前,Windows内核将不考虑安排一个线程上到底去运行那个可用的核心,在该线程执行之前。 (如果没有核心是可用,Windows的线程调度将会选择一个正在运行的线程关闭或是正在等待交换的线程关闭。决定哪些线程先被利用是关键问题。)

开发人员可以通过使用施加某种控制技术,在整个执行核心调用选择处理器的级别关系上。此功能允许开发人员指定一个线程上运行的核心。大多数操作系统, 包括Windows,视为一个命令,而不是一个处理器应用的请求,这使他们接受请求的安排遭到了限制(虽然在实际情况中,它们大多完成请求)。然而, 这种编程方法一般是不被鼓励的,因为它往往使调度工作的效率降低。在大部分情况下,采取何种运行时间和地点的调度决定并不比在程序员编写代码算法时容易。

由于以前的Windows对于其预定线程的调度是毫无规划的,因此一个使用三个线程的应用程序,你可能会看到这些线程将轮流使用Nehalem的四个内核。其结果是,节电功能和Turbo模式会受到影响,因为没有核心会保持很长时间不活动。然而Windows 7中,往往安排线程运行在同一内核,而不是让他们轮流工作,三个线程的应用程序通常只会使用三颗核芯,因此可以让Nehalem处理器的第四个核心处于关闭状态。

此举明显减少了电力的供应,而且还能够通过以下两种方式提高性能:Turbo模式,如前面所述,以及副缓存模式,即更好的缓存应用。真正的胜利是在节能方面的。在桌面系统中,功耗可能不会时最重要的一个标准,但他们对服务器和移动设备却是非常重要的。特别是移动用户,将享受更长的电池寿命时,Nehalem的移动处理器将在消费电子设备中出现。