0%

简要说明linux虚拟化套件中的一些术语,特别是qemu, KVM, hypervisor;以及它们的区别与联系。

阅读全文 »

简要记录Python3中的metaclass。注意本文是基于new-style class的。Python3中所有class都是new-style class,Python2则不同:Python2.2以前根本不支持new-style class,而从Python2.2开始,虽然支持但需要显示地声明。

阅读全文 »

本文简要介绍一下mpstat命令的使用,并补充一些CPU中断知识。

阅读全文 »

详细梳理Basic Paxos算法,试图找出从Paxos到Raft的演进过程。

阅读全文 »

Version代表LevelDB数据库的一个固化状态;VersionEdit代表对Version的修改或编辑操作;VersionSet维护一系列Version。

阅读全文 »

LevelDB中Table是一个比较复杂的结构。Block负责有序kv-pair的存储、查询及迭代;Table利用Block构造上一层的结构,包含Data Block, Index Block, Filter Block等,并管理这些Block之间的关系。本篇记录这些琐碎细节。

阅读全文 »

Linux中用户态程序总是preemptible的,内核使用clock tick中断用户态程序切换到别的线程,不用等待用户态程序主动放弃CPU。但在Kernel Preemption被引入之前,一个线程进入内核态,不放弃CPU也不返回用户态就能一直占用CPU。直到linux 2.6才引入Kernel Preemption。本文的主要目的是介绍Linux的三种Kernel Preemption模式。但介绍Voluntary Preemption的时候,也需要把might_sleep搞清楚。

阅读全文 »

本文基于linux kernel 3.19.8版本梳理一下读文件的过程,从vfs开始,到发送请求给block层结束。

阅读全文 »