软件滞后制约多核应用

2006-07-27 10:49何正未
计算机世界·技术与应用 2006年21期
关键词:线程内核虚拟化

何正未

多核处理器将成为一种广泛普及的计算模式,影响企业和消费者用户的使用模式。它通过为工作负担较重的场合提供显著提升的性能,来促进服务器/工作站业务环境的发展。然而,要想真正突显多核处理器带来的高效率,软件的发展得跟上硬件的步伐。

在多核处理器如火如荼发展,硬件制造商不断推出新产品的时候,软件业却远远没有来得及为此作好准备。只有在软件能够充分利用多核处理器的特性时,多核处理器优势才能体现出来。当前,多核处理器软件开发商面临着技术和商业问题,软件界缺少为多核处理器进行高效编程的标准工具,缺少开发并行应用所需的技巧。

负责IBM多内核、多线程Power5服务器处理器设计的Balaram Sinharoy指出,现有软件只能在集成2到4个内核,而且每个内核只有两个线程的处理器上发挥性能优势。

多核处理器软件代码优化也对编译器和应用程序开发工具提出了挑战。面向多核处理器,业界需要通过努力改善软件设计来使应用程序长期优化和效率提高。

同时,多核处理器将成为一种广泛普及的计算模式,影响企业和消费者用户的使用模式。它通过为工作负担较重的场合——尤其是那些已经在使用多线程应用的场合,提供显著提升的性能,来促进服务器/工作站业务环境的发展。例如数据采集、数学分析和Web服务。多核处理器还将在推动虚拟技术和PC安全性方面起到关键作用。

下面就多核处理器软件和应用的若干问题进行简要分析和讨论。

操作系统: 支持多核的版本

业界各大主要操作系统厂商正在准备推出相应的操作系统,以支持上市的双核/多核处理器产品。预计目前市场上现有的各主要操作系统都将推出新的版本。支持多核处理器的操作系统包括: Microsoft Windows、Novell和Red Hat Enterprise Linux 发行版,以及Sun Microsystems公司的Solaris 10。其中有些操作系统还将包括专门支持应用的优化程序,以充分发挥多核功能的优势,从而改善一系列应用的性能。

QNX公司最近推出了一个多核版本的开发工具。该公司声称它的操作系统软件结构有助于多核处理,能够为所有多处理模型提供支持。该软件包是对OS内核做了某些改动的现有产品的组合。通过该软件,用户将能把现有代码迁移到一个多处理器环境下。QNX支持非对称多处理、对称多处理和限制多处理模型。对于前者,将运行多操作系统实例(不一定是同一操作系统),每一个物理处理器上运行一个。资源在操作系统之间被完全管理。在对称处理时,惟一的操作系统实例运行在多个CPU核上。用户能渐进地迁移现有应用程序,开始将特定任务分配给专用的CPU核处理,随后朝对称多处理模型转移。用户还能使用一种称为“限制多处理”模式,在这种模式下,可以把关键任务与线程,或者为单核操作编写而又不想重写的任务分配给指定的处理器,在该处理器上它们将在自己的空间中运行。软件在运行时能在这种配置下执行受控或动态负载均衡。

另外,在部分厂家提出的单级单映像编程模式下,尽管实际上有多个内核、多项任务同时运行,处理多个数据包或单元,程序员也将其抽象为一个单独的、顺序的编程实体,此时,需要由操作系统或内核软件负责所有必需的核心间的协调工作。这些内核软件为程序员提供统一的机制来管理处理器中的所有资源。

隨着时间的推移,操作系统的调度程序必须设计得更复杂。当然,随着软件性能的提高,它将允许在每个裸片上集成更多可支持更多线程的内核。

编程模式: 抽象层、核心间通信、可编程性

多核处理器需要一个抽象层来管理并行机制,允许重新定向应用、分配负载并管理功率。需要隐藏软硬件细节的新型编程模型。

当前,多内核设计正在推动我们朝向“处理器海洋”结构,可能包含成百上千个处理器。然而,为一个处理器编写的软件几乎无法与另一个端接。这是因为编程模型瞄准的是单一处理器和单一线程。Imperas公司CEO Simon Davidmann认为,目前需要的是能够提炼出硬件和软件细节的编程模型,以及将平台应用编译实现自动化的途径。

多内核处理器的主要挑战之一是如何将软件应用映射到日益复杂的硬件内,即编程模型和它所提供的效率。一个优良的编程模型应具有很高透明度,能对程序员隐藏尽可能多的硬件细节。在GSPx 2005研讨会上,Ignios公司首席技术官(CTO) Mark Lippett指出,现在需要的是“平台抽象层(platform abstraction layer)”,用于将软件应用映射到硬件上。Ignios在其SystemWeaver产品内提供这种层。

核心间通信开销是在进行多内核处理器编程时需要考虑的又一重要因素。对于一个将任务分割到多个内核上的应用而言,软件模块或任务间的通信效率(如通信建立时间、需要传输的数据量、传输速度、以及抵达时间的可预测性)是至关重要的。

需要传输的数据量取决于应用类型和应用分割。而传输效率和可预测性则与通信(软件)架构和系统中使用的硬件互联类型有关。硬件互联提供的灵活性可能有限,但分割和通信软件的选择权通常掌握在设计人员手中。一种用于核心间通信的高效灵活的软件架构能够快速地和可预测地传输数据、管理多个逻辑连接和不同种类的硬件互联、同步传输以及为应用提供一个抽象层。

当今的大多数操作系统是设计运行在单核处理器上的。并行多处理技术在操作系统处理负载均衡任务上比较简单,但是对非对称多处理要把任务分配到多个线程上的工作留给开发人员,这给可编程性带来了挑战。比如,由于操作系统在一定程度上分担了芯片的复杂性,STI开发的Cell处理器可被用作具有XML或TCP处理功能的加速器或卸载处理器,但其他的编程模式可能要求用户了解用于PowerPC的各种编译器及位于其下的多个专用核。

也有厂家提出的解决方案支持单级单映像编程模式。即尽管实际上有多个内核、多项任务同时运行,处理多个数据包或单元,程序员可将多处理器抽象为一个单独的、顺序的编程实体。

编译器: 开发多级并行

为多处理器或多线程环境设计的应用软件通常能够利用多核处理器结构优势。但同时,当软件为多核处理器得到最优化时,业界将期望看到通过发挥基于多核处理器系统结构优势的软件创新方法,来提高应用程序总性能。

编译器和应用程序开发工具将为多核处理器优化软件代码发挥重要作用。编译器将承担更大的责任,面临更大的挑战。面向多核处理器,通过努力调校软件设计使能长期优化和效率提高。Intel 正在从事有助于为多核结构优化线程性能的编译器和软件工具的引入。

单线程应用不会自动在多内核系统上运行得更快。普遍使用的C和C++在本质上是顺序执行语言。因此,当把一个用C或C++编写的应用程序移植到多内核系统上时,该应用也许并不能从多内核平台的并行处理能力中获益。

在应用程序中,一般有四种并行可供挖掘:

● 指令级并行ILP: RISC核心的指令乱序执行、超级标量(多个执行部件),一般在核心内实现;

● 数据级并行DLP: 比如SIMD,支持MMX、SSE、SSE2、SSE3等,通常也在核心内实现;

● 线程级并行TLP: 比如Intel的超线程(HT),多核处理器。一般采用OpenMP、MPI方式编程。如何充分挖掘应用程序的线程级并行性,是多核处理器获得高性能的关键点之一;

● 进程级并行PLP: 处理器之间、进程间通过消息传递进行通信,一般采用MPI编程方式。

Amdahl 定律指出,应用程序的并行加速来自于其可并行化部分。串行代码制约着可扩展性,如何挖掘应用程序的多级并行性,是编译器必须考虑的主要问题之一。

开发工具: 功能调试、性能优化

调试多内核系统比调试单处理器系统更为复杂,而且可能会影响到应用。在多内核系统中如果其中一个内核或子系统停止工作,系统状态的检测就变得很复杂,因为其他内核可能正在与停止运作的内核进行数据传输。一些内核会使其外设与内核一起停止工作,这使得内核之间通信状态很容易被检测出来。一个允许设计人员控制系统中哪些部分应被停下来进行调试和控制传输中数据的多内核调试器是必不可少的。

调试工具、优化程序正在演进。Intel就是在网上提供多内核工具的一个例子。该公司启动了一项名为“线程技术使能”(Threading Enabling)的计划,这项计划提供以下工具:

● 性能分析器,开发人员利用它可以分析代码,发现数据流可以进行优化的区域;

● 常用函数和子程序优化代码库,这使开发人员可以提取函数,因此完全跳过编写函数和优化函数的工作;

● 专为多内核程序开发的编译器;

● 一种叫做“线程检查器”、用于发现线程互动中潜在冲突的工具。

由于C和C++不能在语言级为应用分割提供任何支持,应用/算法分割可在任务(系统)级完成。运行时平台(操作系统及内核间通信)通过在内核间重新分配任务实现此项功能。为获得最佳效率而进行的精细分割(任务/算法分割)可以采用代码分割工具来完成。

并行应用程序: 培养编程能力

多核处理器在结构上提供了获得性能优势的创新,但也影响到已有的软件部署和开发人员技能。如果想在多核处理器上提升性能的话,很多应用程序必须并行化。从某种角度上说,当前多内核开发的关键与多处理器系统是一样的: 谨慎开发多线程应用程序(即不同部分可以同时运行的程序),使线程不相互干扰。

多核处理器的发展将迫使各级IT专业人员提高自己的技能,要将多处理概念更深入地植入到他们的计算意识中。许多企业通过培育在任何多核处理器环境中茁壮成长的各种技能,特别是编写多线程应用程序的能力,来确保自己处于有利地位。业界普遍需要更好的编程教育,因为今天的大多数编程是以黑盒子方式完成的。

Carnegie Mellon大学教授Babak Falsafi指出: “我们将看到一种变化,即我们从一开始就教授并行技术。这将是一种渐进式的变化,可能需要十多年时间,但是最终,多内核处理技术将推动一种确保多线程和并行技术成为基本技能的变化”。

软件许可: 如何计费

一个芯片还是两个芯片?软件厂商如何收取多内核芯片的费用仍是激烈争论的问题。

在计划向多核处理器移植时,软件厂商对应用程序的授权方式是需要考虑的另一个关键因素。目前,许多企业级应用程序厂商依据核心数(by core),而不是插槽数(by slot)进行授权。这就是说,一个双插座、双核服务器能比一个双插座、单核服务器提供更高性能,原因是应用程序能够识别4个处理器(而不是2个),所以授权费用也将翻番。在基于多核处理器的系统中,增加的授权费用将抵消潜在的性能提高。由于多核处理器不是线性可扩展的(这意味着,增加一个核,不会获得100%性能提高),翻倍的授权成本将导致较低总性价比。

由于这个原因,用户在评估哪些应用程序可以移植到使用多核处理器的系统中时,软件授权是必须考虑的一个关键因素。比如,企业软件授权成本要高于提供应用程序运行的服务器成本,这是值得关注的。这对那些区别于专门服务器,在低价点提供卓越性能的行业标准服务器来说,显得尤其重要。尽管大多数应用程序厂商没有表态,但有些厂商已经采取按插座数,而不是按核心(core)数授权策略。

虽然所有的服务器在不久的将来都将采用双内核技术,但是软件许可收费方式却远未统一。实际上,3家最大的软件厂商采取了不同的许可方式。IBM将根据不同的情况做出许可决定,Oracle将双内核芯片算为两个芯片,微软则打算将双内核芯片作为单个芯片来对待。

IBM在收取软件许可费时,将x86双内核芯片视为一个处理器。但是,随着芯片的改进,IBM可能会改变收费计划,将双内核算为两个芯片。一位IBM发言人说,公司将根据客户报告的芯片性能,“不断地评估”其许可方式。

Oracle的许可政策目前还是按照处理器核心收费。Oracle全球许可与价格战略副总裁Jacqueline Woods认为,尽管双内核目前可能不能提供两倍的性能,但它未来可能将提供两倍或更高的性能提升。Woods说: “当这些芯片的性能改进时,我们的价格保持不变,因为我们在这个领域中是中立的。”Oracle在2005年底又制订了0.25(针对UltaSPARC T1)、0.5(针对Intel Xeon或AMD Opteron)及0.75(针对其他多核心处理器)等3级系数值模式新版授权方案。

“到底该怎样收费?这的确是个复杂的问题,英特尔、IBM、微软、甲骨文及其他很多公司将不得不就此达成协议,”惠普公司服务器部资深技术专家Michael Krause表示,“现在,惠普公司已经有人着手研究此问题。这是多内核产品上市的最大问题之一,而目前业界尚无对策。”

也有专家提出放弃计算物理处理器的个数,转而采用根据一个独立应用程序运行在芯片上的时间量收费。

多内核芯片是否将从根本上改变用户支付软件费用的方式,仍需拭目以待。一些人认为,软件厂商可能必须向开放源代码价格模型发展,从维修和支持服务而非从按处理器个数收费获得收入。

数字化生活: 更丰富

5~10年前,大多数人使用PC运行文字处理和电子表格程序,上因特网冲浪,玩游戏。时至今日,中档PC已能很轻易地提供所需性能。但是,多年来,人们已经大大扩展了在计算机上所能做的事情。今天,我们常常使用数字视频操作和数字照片软件应用程序,并且新游戏程序处于现实生活模拟的边界。这些激动人心的进步需要高性能PC来运行最新的、诡异的应用程序。

多核处理器使数字化生活成为可能。数字媒体娱乐,或数字生活,是一个激动人心的概念,目前微软、IBM和其他一些公司在合作开发。这个即将到来的进步将允许消费者在家中真正体验丰富的数字媒体。他们需要重要的计算机处理性能和多任务能力。多核的PC能提供这些性能和多任务能力,并将使他们成为数字家庭的中心。例如,在家庭里,多核PC能和电视无缝集成。基于多核PC承担的无线家庭网络的集线器,父亲能在起居室通过Web冲浪,女儿在她的卧室下载、播放MP3音频文件,儿子在厨房使用新型游戏设备玩游戏。所有这一切,都是多核处理器平衡高性能和多任务所带来的益处。

然而,目前多核处理软件总体滞后于硬件,软件面临诸多新挑战。但同时我们也应该看到,挑战和机遇并存,多核处理技术将会持续在软件演进中发挥重要影响,并和先前的高端并行处理技术一道,推动软件并行技术的发展。在出现多核处理器技术之前,SMP系統和超线程技术一直在推动众多操作系统和应用软件厂商设计出能够发挥多线程性能优势的软件。当基于多核处理器系统进入主流并不断发展后,操作系统和应用软件厂商将面向多核结构优化他们的产品,这将促进软件效率提高,获得潜在性能提升。

需求带来发展,而发展又是基于技术的。通过若干年向大众市场的发展和扩散,高端计算并行处理技术将不断促进多核处理器硬件、软件、应用技术的发展。无论带来的是问题还是机遇,多内核处理器的时代已经来临。

链接

虚拟化和安全: 更上一层楼

虚拟化是指使用软件的方法,通过提供多处理器“幻像”,来使工作负载共享处理器。虚拟化正在流行。虚拟化在未充分使用资源间平衡负载,使为峰值状况下预留的性能开销需求、为管理多余硬件的需求降到最低。虚拟技术的发展能够为多核处理器提供更好的保护、更高的资源使用率和更可观的商业运算市场价值。

多核处理器非常适合帮助公司实现虚拟化,因为它们提供了性能增长。正是由于这个原因,传统上在大型主机上的虚拟化技术正逐渐向普通服务器甚至桌面系统转移,而硬件辅助虚拟化也改变了一直以来主要通过软件来实现虚拟化的现状,性能、效率和可靠性都有提升。

在多核处理器的帮助下,用户可在整个公司范围内简单地实现虚拟化。虚拟化可以在相同的服务器上运行不同的操作系统和应用程序,大大节约了硬件实现。多核处理器将促使虚拟化技术更广泛应用,并获得巨大成功。

在安全性成为至关重要问题的今天,同样,一些旨在阻止病毒和其他网络威胁的、更加复杂的实时安全应用可以在后台运行,为平台提供额外的安全性,从而提供更加健全的保护。利用多核处理器,安全性的提高将对最终用户完全透明。

猜你喜欢
线程内核虚拟化
人民情怀:柳青为文为人的内核(评论)
初春
微软发布新Edge浏览器预览版下载换装Chrome内核
Java多线程产生安全问题及对策分析
采用ScheduledThreadPoolExecutor执行定时重试任务时内存溢出的分析及解决
浅谈虚拟化工作原理
用户怎样选择虚拟化解决方案
虚拟化整合之势凸显
虚拟化技术:绿色IT的希望
Java的多线程技术探讨