云中的高性能计算资源如何调度?

让我们直面这个问题吧:资源调度从来就不是个诱人的话题。它们是必须要做的事情,但是通常很复杂而且常常令用户沮丧、让系统管理员忙碌。最常见的抱怨是:"为什么我的作业没有运行?"问题的答案通常依赖于对一些调度规则的解释,或者干脆说已经满负载,或者在极罕见的情况下称一个用户的程序导致了该问题。

如果你不知道什么是资源的时刻表,那么接下来的这几段必须要看了。这个名词是说,您有很多个资源、很多个作业在排队,需要列出这些资源以最佳的状态工作。一些常见的资源调度比如Sun Gird、Engine, Torque/Maui、Moab、PBS、Platform以及Platform Lava。集群是体现资源调度最好的例子。在一个128节点的集群里,每个计算节点有八个核。大部分的用户的程序需要1-16个核来工作,但是有一些需要 256个核。问题就是,给出一个工作的清单,什么才是这个集群被充分利用的最佳工作方式?

用户在提交"作业"的时候经常通过一个脚本(类似于qsub,queue summit)使得作业插入到队列调度中去,如果被允许,用户可以使用类似qstat(queue status,队列状态)的脚本来控制自己的程序,同时打印出一些让人困扰的信息,没有一个信息可以回答你"为什么我的作业没有运行"(当然,这里也提供了这条消息,但是看起来最简单的方式还是给系统管理员发个邮件)。

为了使调度问题更棘手一点,在某些情况下,我们不知道这些应用程序将会运行多长时间,而且也许有一些其它所需的资源(比如内存容量、存储、处理器类型等)。因此,资源调度这个工作并不简单,但是对于集群利用率来说非常重要。实际上,多核的出现使得内核级调度工作比以前更加重要(当然也更加困难)。在内核级,内核必须被安排,而且将任务在核心之间互相转移必须基于缓存。有趣的是,高层次的资源调度能力已经延伸到CPU,控制核心的位置对获得最好性能是非常必要的。

为什么资源调度将会成为高性能计算以后新的、很酷的工具?并不是因为一种新的额GUI或者一些其它的神秘的功能。真正的原因是云计算。但是这并不意味着云将会很快到处都是,实际上,资源调度将会把云放在合适的地方。

最近,我听到一个新泽西技术研究所的David Perel使用Sun Grid Engine(SGE)所做的Apache Hadoop动态资源分配实验。随后有一个深入的研究,有关Sun Grid Engine更新的文章。在新的版本里有两个诱人的更新,第一个是云计算,第二个则是Hadoop,类似于一种大众云计算的东西。

最特别的是,SGE新的版本允许云中的互换,就好像亚马逊的EC2。作业被允许,SGE可以控制之间的联系。使用EC2的话,用户需要为应用程序构建AMI图像。除此之外,他们还需要提供EC2上的账户信息。一旦做到这一点,用户可以讲作业插入队列,对于EC2来说,则有了一个"云爆发"。

另外一个新功能是与Hadoop的整合。如果你不知道什么是Hadoop的话,那就Google一下。只是架设好一个Hadopp集群并非易事。这是一种不依赖一个数据库的强大的搜索模式。通常,地图搜索减少启动服务器的数量,给每个本地硬盘驱动器设置不同的数据。SGE已经得到增强,现在Hadoop作业可以直接提交。

在这一点上行,云中的高性能计算是一件喜忧参半的事情。除非你使用一个特别设计的HPC云计算,就好像Penguin的POD服务,对HPC性能至关重要的I/O资源可以多样化。这可能会改变。作为单独服务器包含更多内核。HPC应用调查显示,57%的HPC用户使用32处理器或者更少的核心。这些人证实了ClusterMoney.net有关此调查55%的数字。当云计算开始使用48个内核的服务器时,可能会消除一些服务器到服务器通信问题的形成。

高性能计算可能会采取一种不同的、使用密集多核服务器的方式进入云计算。用户可以在桌面上就将作业加到SGE中去。这种资源调度方式会接触可以运行虚拟机的本地资源或者云中资源。这种资源调度方式可能会让HPC实现宝贵的桌面化。听起来像网格计算,但是更简单。

作者Douglas Eadline,是Linux Magazine的HPC高级编辑。