Dune: User-level Access to Privileged CPU Features 笔记

论文的原文在这里 Dune: Safe User-level Access to Privileged CPU Features 1. Introduction Dune 的目标是让用户态程序直接使用硬件特性(例如,获得更好的硬件加速等),不过所谓的 “直接” 还是在虚拟化的环境中。Dune 利用现代 CPU 的虚拟化功能,提供给用户一个 进程的抽象, 而不是一个 虚拟机的抽象。 Dune 是一个内核模块,可以在需要的时候加载到标准的 linux 内核中。 于是一个普通进程可以进入 “Dune Mode”,在这个模式下的进程可以直接访问页表、中断、系统调用表等等。 特点: Dune 进程是一个普通的 linux 进程,唯一的区别是它用 VMCALL 指令进入系统调用。 Dune 内核模块只提供进程级别的抽象,因此相对于 KVM 来说要简单得多。 3. Kernel Support for Dune Dune mode 下的进程运行在 VMX non-root 模式,可以安全的访问特权级硬件。然后看一下 Dune 的整个架构图。 {:height=“300” width=“300”} 如果说前面 1、2 小节读下来仍然云里雾里的话,一看到这个图立刻觉得特别清晰了,因为太像 KVM 的架构了! 同样也是利用 CPU 提供的 VT-x 技术,Dune 更像是一个轻量级的 KVM。 在后续的章节中,作者也提到了 Dune 项目的原型就是在 KVM 的基础上修改的,特别是对 VT-x 操作的部分。 ...

Me

Raft 一致性算法读书笔记

论文原文链接 In Search of an Understandable Consensus Algorithm Raft 保证一致性的 4 个重要组成部分: 领导人的选举,日志复制,安全性,集群成员的变化。 Raft 是一个强领导者算法,意思就是所有的数据以当前领导者(Leader)上的为准,领导者上有的就是正确的,领导者上没有的就是错误的。 5.1 Raft 的基本术语和概念 任期的概念:任期(term) 用来区分时间轴上不同的领导者,当领导者换了,日期也也立刻变更。raft 算法用 term 来表示一个 逻辑时钟,而不是用传统的几月几日几点几分几秒,term 是一个递增的整数,当领导者变了,term 也 +1。 集群中的每一个服务器都存储了一个 currentTerm,任意两个 server 要相互通信时都需要包含各自的 currentTerm。如果一个 server 的 currentTerm 值小于对方,那么它需要更新自己的值。如果 candidate 或者 leader 发现他们自己的 currentTerm 比其他人的要小,那个立马变成 follower。如果收到的请求包含一个旧的 currentTerm,直接忽略。 原论文的图 2 包含了大量的信息,我自己制作了下面四个图片。 5.2 领导人的选举 领导人不断的向集群中其他人发送心跳包,当集群中一个 server 在一段时间里没有收到领导人的心跳包,那么他就要起义,自己竞选当领导人。 开始一次选举 Follower 把自己的 term+1,身份转变成 Candidate,向集群中其他 server 发起请求投票 RPC,当他获得大多数选票时,就成功当选。 问题:他怎么知道 “大多数” 是多少?(etcd 的实现似乎是每个 server 知道集群里面有多少台服务器) ...

Me