ZStack云计算 2010-04-02
资源调度从来就不是个诱人的话题。它们是必须要做的事情,但是通常很复杂而且常常令用户沮丧、让系统管理员忙碌。最常见的抱怨是:“为什么我的作业没有运行?”问题的答案通常依赖于对一些调度规则的解释,或者干脆说已经满负载,或者在极罕见的情况下称一个用户的程序导致了该问题。
如果你不知道什么是资源的时刻表,那么接下来的这几段必须要看了。这个名词是说,您有很多个资源、很多个作业在排队,需要列出这些资源以最佳的状态工作。一些常见的资源调度比如SunGird、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作业可以直接提交。