GlusterFS:调度(Scheduler)算法源码分析
2012-10-27 12:54
561 查看
1.概述
在操作系统中调度算法是指根据系统的资源分配策略所规定的资源分配算法。对于不同的的系统和系统目标,通常采用不同的调度算法。在glusterfs中,调度算法用于调度哪一个存储节点来存储数据。大致表示如下:
调度算法示意图
目前在3.2.5中,实现了5种调度算法,分别是alu,random,nufa,rr,switch。
在每个算法中,他们均会实现这样几个操作:
1. 初始化函数(init),该函数在unify初始化的时候会被调用,完成调度器的初始化;
2. 析构函数(fini),该函数会在unify析构时候调用,完成调度器的销毁;
3. 更新函数(update),主要用于更新它收集到的子卷的相关信息;
4. 调度函数(schedule),通过相应的算法完成对子卷的调度工作;
5. 通知函数(notify),对相应的子卷进行通知。
在接下来下面我们将一一分析:
2.rr
rr调度算法全程为Round Robin。是让每个进程在就绪队列中的等待时间与享受服务的时间成正比例。2.1函数rr_init分析
1) 调度器选型验证;2) 在相应的unify对象中查看是否有只读类型子卷,如果没有,出错返回;
3) 在相应的unify对象中查看是否有可写类型子卷,如果没有,出错返回;
4) 为调度器的一些参数赋初值;
2.2.函数rr_schedule分析
1)通过函数获得调度分界线的索引值:next_schedule_index = ROUND_ROBIN (rr->schedule_index, rr->subvolume_count); 而函数: #define ROUND_ROBIN(index, count) ((index + 1) % count) |
for (i = 0; i < rr->subvolume_count; i++) { xlator_t *subvolume_xl = NULL; call_frame_t *frame = NULL; call_pool_t *pool = NULL; subvolume_xl = rr->subvolume_list[i].xl; pool = this_xl->ctx->pool; frame = create_frame (this_xl, pool); STACK_WIND_COOKIE (frame, rr_update_cbk, subvolume_xl->name, subvolume_xl, subvolume_xl->mops->stats, 0); } |
for (i = next_schedule_index; i < rr->subvolume_count; i++) { if (rr->subvolume_list[i].status == RR_SUBVOLUME_ONLINE && rr->subvolume_list[i].status == RR_MIN_FREE_DISK_NOT_REACHED) { pthread_mutex_lock (&rr->mutex); rr->schedule_index = i; pthread_mutex_unlock (&rr->mutex); return rr->subvolume_list[i].xl; } } |
for (i = 0; i < next_schedule_index; i++) { if (rr->subvolume_list[i].status == RR_SUBVOLUME_ONLINE && rr->subvolume_list[i].status == RR_MIN_FREE_DISK_NOT_REACHED) { pthread_mutex_lock (&rr->mutex); rr->schedule_index = i; pthread_mutex_unlock (&rr->mutex); return rr->subvolume_list[i].xl; } } |
3.可配置选型
键名 | 类型 | 默认值 | 描述 |
相关文章推荐
- Spark资源调度机制源码分析--基于spreadOutApps及非spreadOutApps两种资源调度算法
- Spark源码分析之Master资源调度算法原理
- Master原理剖析与源码分析:资源调度机制源码分析(schedule(),两种资源调度算法)
- Spark源码分析之Scheduler模块(TaskScheduler)
- OpenCv学习笔记(1)---CvTermCriteria---迭代算法终止条件结构体的---OpenCV源码分析
- STL源码之copy算法分析
- Pixhawk之姿态解算篇(3)_源码姿态解算算法分析
- 数据结构与算法学习(一)顺序存储结构ArrayList源码分析
- 源码分析之最近算法
- 一些算法的MapReduce实现——1 TB数据排序源码分析
- Glusterfs之nfs模块源码分析(中)之Glusterfs实现NFS服务器
- (转)Linux内核调度策略与算法分析 (2)
- Weka算法Classifier-tree-J48源码分析(四)总结
- Glusterfs之nfs模块源码分析(下)之NFS协议之RPC的实现和NFS协议内容
- Quartz源码——scheduler.start()启动源码分析(二)
- STL源码分析--算法
- TensorFlow学习笔记之源码分析(1)----最近算法nearest_neighbor
- Farneback 光流算法详解与 calcOpticalFlowFarneback 源码分析
- 【Nova】nova-scheduler调度过程分析
- Mesos源码分析(10): MesosSchedulerDriver的启动及运行一个Task