原创 Ceph Monitor選主(下)

monitor選主的下半段就是真正的選主 發送OP_PROPOSE請求 void Monitor::start_election() _reset(); elector.call_election(); start();

原创 Ceph Monitor選主(上)

monitor選主主要包括前期準備和選主兩部分 選主前期準備 發送探測消息 任何一個monitor節點都可以發起選舉,選舉的入口函數是bootstrap bootstrap cancel_probe_timeout(); i

原创 Linux設備驅動模型——總線、設備、驅動

總線 內核所支持的每一種總線類型都由一個bus_type描述。因爲bus_type結構體中定義了struct subsystem subsys,所以總線的級別處於subsystem,即總線的父結構也一定是一個subsystem。同

原创 非連續內存區管理

夥伴算法系統、slab分配器都是要求物理頁框連續。buddy 分配器並不能完全消除頁外碎片問題,爲了應付可能的情況(指總空閒空間大於請求 大小,但空閒空間卻不連續,這種情況 buddy 分配器沒有辦法處理),Linux 提供了一種

原创 Linux設備模型初始化——PCI子系統初始化

在《Linux設備模型初始化》一節介紹了由__define_initcall引入的幾個初始化宏,PCI初始化過程就是由這些宏控制的,下面我們介紹PCI的初始化。 首先就是優先級最高的postcore_initcall(pcibus

原创 內存管理——夥伴系統算法

通常情況下,一個高級操作系統必須要給進程提供基本的、能夠在任意時刻申請和釋放任意大小內存的功能,就像malloc 函數那樣,然而,實現malloc 函數並不簡單,由於進程申請內存的大小是任意的,如果操作系統對malloc 函數的實

原创 Linux設備驅動模型——kobject、kset、subsystem的關係

kobject Linux內核中有大量的驅動和設備,而這些驅動和設備往往具有類似的結構,根據面向對象的思想,我們就可以將這些共同的部分提取爲父類,這個父類就是kobject,也就是驅動編程中使用的.ko文件的由來,而三大類設備驅動

原创 Linux設備模型初始化——SCSI子系統初始化

Linux中scsi驅動框架 在Linux中scsi驅動基本分爲三大層:top level,middle level以及lower level。top level爲具體的scsi設備驅動,例如我們常用的磁盤設備驅動就在該層(Lin

原创 Ceph Monitor Paxos實現

Monitor的Paxos實現主要包括Leveldb、Paxos和PaxosService三層,其中Leveldb負責底層存儲,同時也負責PaxosService給Paxos傳遞數據。Paxos負責Paxos算法的具體實現,Pa

原创 《The Chubby lock service for loosely-coupled distributed systems》閱讀筆記

Chubby架構 一個Chubby的cell一般由5個節點組成,並利用Paxos算法選舉出一個master節點,客戶端通過chubby庫和master節點通信。Chubby內部維護了一個文件系統,文件系統中的每個文件都可以看成一

原创 《The Google File System》論文閱讀筆記

1 導論 GFS的設計基於以下幾點: (1) 首先組間故障是一個很常見的事情。 (2) 普遍都是大文件,GB規模的文件也很常見。 (3) 大多數文件的更改方式是追加新數據而不是覆蓋已經存在的數據。 (4) 共同設計應用程序和文件系

原创 《Google File System》思考

  閱讀完《Google File System》論文後,心中有不少疑惑,一些問題在網上查詢後整理如下: 單master節點如何做到高可用   GFS論文中對master的高可用描述是5.1.3節中的Master Replicat

原创 從掛載fuse文件系統分析mount系統調用

mount系統調用的原型如下 int mount(const char *source, const char *target, const char *filesystemtype, unsig

原创 ubuntu18.04更換源後 update失敗

ubuntu18.04更換爲阿里源後,執行apt-get update,出現如下錯誤 E: Failed to fetch http://mirrors.aliyun.com/ubuntu/dists/bionic/main/bi

原创 Linux設備模型初始化——SCSI上層sd驅動分析

static int __init init_sd(void) { int majors = 0, i; /* Linux中所有的主設備號也是被各種各樣的設備所瓜分.其中,8,65-71,136-143這麼個16個號碼就被s