Ceph剖析:定时器safetimer的实现】的更多相关文章

定时器的作用是在指定的时间执行指定的动作.SafeTimer通过multimap数据结构维护定时项,定时项是时间和事件的Pair,定时项在map中按照定时时间从小到大排列.此外,SafeTimer使用一个线程来轮询定时项,当到达定时项指定的时间时执行对应的事件.下面代码是这个线程的入口函数: void SafeTimer::timer_thread() { lock.Lock(); while (!stopping) { utime_t now = ceph_clock_now(cct); //…
作者:吴香伟 发表于 2014/10/10 版权声明:可以任意转载,转载时务必以超链接形式标明文章原始出处和作者信息以及版权声明 心跳是用于OSD节点间检测对方是否故障的,以便及时发现故障节点进入相应的故障处理流程.故障检测需要在故障的发现时间和心跳带来的负载之间做权衡,如果心跳频率太高则过多的心跳报文会影响系统性能,如果心跳频率过低则会延长发现故障节点的时间,从而影响系统的可用性. 建立连接 在大规模部署的场景中,如果任意两个OSD节点间都建立心跳连接将带来巨大的负担.尤其,当新加入一个OSD…
作者:吴香伟 发表于 2014/10/9 版权声明:可以任意转载,转载时务必以超链接形式标明文章原始出处和作者信息以及版权声明 总体上,Ceph的消息处理框架是发布者订阅者的设计结构.Messenger担当发布者的角色,Dispatcher担当订阅者的角色.Messenger将接收到的消息通知给已注册的Dispatcher,由Dispatcher完成具体的消息处理. 在服务端,SimpleMessenger通过Accepter实例监听端口,接收来自客户端的连接.Accepter接受客户端的连接后…
作者:吴香伟 发表于 2014/10/8 版权声明:可以任意转载,转载时务必以超链接形式标明文章原始出处和作者信息以及版权声明 Recovery阶段 在Leader选举成功后,Leader和Peon都进入Recovery阶段.该阶段的目的是为了保证新Quorum的所有成员状态一致,这些状态包括:最后一个批准(Committed)的提案,最后一个没批准的提案,最后一个接受(Acceppted)的提案.每个节点的这些状态都持久化到磁盘.对旧Quorum的所有成员来说,最后一个通过的提案应该都是相同的…
作者:吴香伟 发表于 2014/09/11 版权声明:可以任意转载,转载时务必以超链接形式标明文章原始出处和作者信息以及版权声明 Paxos算法存在活锁问题.从节点中选出Leader,然后将所有对数据的修改都通过Leader作为提案提出,可以让算法快速收敛.Leader的选举规则是,由当前活动的Monitor节点中rank值最小的节点当选.选举不仅会产生Leader还将确定Quorum成员,Quorum成员就是那些支持新Leader节点当选Leader的节点.因此,虽然不能保证Leader的ra…
作者:吴香伟 发表于 2014/09/05 版权声明:可以任意转载,转载时务必以超链接形式标明文章原始出处和作者信息以及版权声明 数据分布是分布式存储系统的一个重要部分,数据分布算法至少要考虑以下三个因素: 1) 故障域隔离.同份数据的不同副本分布在不同的故障域,降低数据损坏的风险: 2) 负载均衡.数据能够均匀地分布在磁盘容量不等的存储节点,避免部分节点空闲部分节点超载,从而影响系统性能: 3) 控制节点加入离开时引起的数据迁移量.当节点离开时,最优的数据迁移是只有离线节点上的数据被迁移到其它…
线程池ThreadPool的实现符合生产者-消费者模型,这个模型解除生产者消费者间的耦合关系,生产者可以专注处理制造产品的逻辑而不用关心产品的消费,消费者亦然.当然,生产者消费者之间需要一个连接的纽带,那就是产品接口.产品接口是对这两者的约束,生产者生产的产品要符合产品的接口,消费者依据产品接口来消费. Thread类是ThreadPool中的消费者,它封装pthread API函数,对外提供Thread::entry()作为线程的入口函数.Thread只是对消费者的抽象,WorkThread才…
低分辨率定时器的实现 定时器激活与进程统计 IA-32将timer_interrupt注册为中断处理程序,而AMD64使用的是timer_event_interrupt.这两个函数都通过调用所谓的全局时钟的事件处理程序,来通知内核中通用的.体系结构无关的时间处理层.无论如何,该处理程序都通过调用以下两个函数,使得周期性低分辨率计时设施开始运作. do_timer update_process_time do_time: jiffies_64 += ticks;这意味着 jiffies_64确定了…
[前言]程序按照一定顺序执行称为控制转移.最简单的是平滑流,跳转.调用和返回等指令会造成平滑流的突变.系统也需要能够对系统状态的变化做出反应,这些系统状态不能被内部程序变量捕获但是,操作系统通过使控制流发生突变来对这些情况做出反应,称为异常控制流.异常发生在计算机系统各个层次,在硬件层有硬件中断,比如来自io口的:在操作系统层,内核通过上下文切换将控制从一个进程转移到另一个用户进程,异常不是指不希望得到的"异常",有时是一种通信手段:在应用层,一个进程可以发信号到另一个进程,而接收者会…
unitedstack有云 :https://www.ustack.com/blog/ceph_infra/…