7.3 资源调度算法
一个调度平台,可以根据业务需要选择不同的调度算法,这里的作业资源调度算法跟操作系统的进程资源调度算法有相似性,但是不存在操作系统的系统进程用户进程调度划分,这里按照通俗的理解,例举一些常用的作业资源调度算法。
一种方式是先来后到的方式,先来的先被调用,先分配CPU、内存等资源,后来的在队列等待,这种方式适合平均计算时间、耗用资源情况差不多的作业,为了让后来的作业有机会提前运行,通常还会匹配优先级,即优先级高的先运行,优先级一样的按先来后到方式运行。
但是实际操作的时候,优先级容易碰到问题,如果用户都认为自己的作业优先,把自己提交的作业优先级都设置的最高,这样排在后面的作业还是要等很久才被调度,特别是前面有一个耗用资源特别久的作业,比如占用几个小时乃至几天的大部分机器的CPU和内存的训练算法作业,导致排在后面的大量很短时间运行完、耗用资源比较少的作业很久才被调度,实际上他们优先调度更适合。
另一种方式,也就是根据上面问题产生的最短时间或者最少资源耗用优先方式。但是这样也是有问题的,如果一个用户像买彩票多买概率就高一样,一次提交了大量作业(也许还有相同的作业),就为了优先得到执行,如果他提交的作业时间都比较短,那永远都是这个用户在占用计算平台集群资源,其他用户永远在等。
因此,还有一种公平方式去保证资源调度,也就是每个用户分配一个资源池,不能多用,如果要多提交作业任务,把自己的资源池占光了,就只能等了,大家都公平的使用资源。这样看似解决了公平问题,但是又是有问题的,跟大锅饭问题相似,有的用户的作业多任务重,分配到的资源少,有的用户作业稀少也占用一样的资源池,反而不公平了,这里按用户平均分配资源池并不能真正公平。
所以,又出现了按容量调度方式,通俗的说,每个用户的资源池里如果有多余的资源容量,要共享出来,拿出来给其他有需要的用户使用,调度平台去保障这种容量的管理和分配。
还只有更多的调度算法,这里不再一一列举。
我们可以看到,作业资源调度算法随着使用问题和解决会不断发展新的内容,同时在不同的业务场景中还会面临不同的权重,比如作业性质的权衡,生产作业要优先,训练作业要往后,生产作业中止后恢复要继续优先排,还有资源类别的权衡和分配策略,CPU占用型和内存占用型谁更优先,CPU、内存、硬盘、带宽几种资源之间的调度搭配,不同硬件性能服务器的资源调度侧重,等等,是一个很复杂的课题,跟业务场景也很相关。