- 博客(17)
- 收藏
- 关注
原创 从qemu-virtio到vhost-user
文章目录一、linux单机存储栈1.1 概览1.2 block layer1.2.1 io scheduler1.2.2 block mq二、计算虚拟化2.1 cpu虚拟化2.2 内存虚拟化2.2.1 linux内存管理方案2.2.2 内存虚拟化2.3 qemu-kvm2.3.1 qemu2.3.2 kvm2.3.3 qemu-kvm三、存储虚拟化3.1 全虚拟化IO3.2 virtio3.2.1 概述3.2.2 架构3.2.3 virtqueue3.2.4 virtio-blk/virtio-scsi3.
2021-11-13 15:44:16
2767
1
原创 记一次cmake cache引发的编译问题
文章目录前言问题的出现总结和说明总结官方说明前言c/c++程序员对cmake肯定都有所耳闻,大型项目的makefile如果要编写起来非常复杂,一般都是通过cmake进行管理。但即使经常接触,但由于cmakelists基本很少改动,但对其一些工作机制还不是很了解,本人前段时间刚好因为对cmake的生疏遇到了一个挺有意思的小问题,记录和分享一下。问题的出现假设某项目的代码组织结构如下:.└── project ├── CMakeLists.txt └── src ├─
2020-06-30 09:48:53
3974
原创 基于C++11的线程池实现
文章目录线程池基本组成源码和分析参考前端时间偶然在github上看到了一个非常精炼的C++11线程池实现。作者用不到100行的代码实现了一个简单的线程池,且使用了较多C++11的新特性。于是便想着自己也来动手看看,思路上基本是借鉴原版,但会加入一些自己的想法和尝试,同时先避免对复杂语法的运用以理解线程池为首要目的。由于个人能力有限,如果代码中有明显bug欢迎指正,一起交流进步。线程池基本组成...
2020-03-09 22:00:39
624
原创 c++ new运算符是如何调用构造函数的
内存申请和对象构造 本文内容简短,只为记录下一次思考过程,事情起源于一句话,“new操作符会调用operator new分配内存再调用构造函数构造对象”,但最近再次看到这句话的时候越看越有疑问,怎么样调用构造函数??于是就带着这个问题顺便看下operator new和placement new的源码加深下印象了。众所周知构造函数是在实例化一...
2020-02-27 23:39:37
9422
2
原创 十问paxos
前言paxos作为大名鼎鼎的算法,关于它的文章数不胜数,除去原作者的Paxos Made Simple(学习paxos必看)之外,网上也有众多的梳理讲解。本文相当于是对paxos的学习笔记,但是对paxos的介绍会简单带过,主要侧重于从一个初学者的角度去看学习paxos时一些可能会产生以及比较关键的问题,通过对这些问题的思考来学习理解paxos。为了解决什么问题任何算法发明出来都是为了解决实...
2020-01-05 23:29:17
313
原创 cephfs caps简介
本文主要是对Gregory Farnum关于cephfs caps介绍的简单总结,主要介绍caps的基本设计,更深入的的如lock相关代码没有涉及。文章目录caps基础基本概念caps种类caps permission种类caps combinationpinAuth、Link、XattrFilecaps管理lockcaps如何变更caps相关告警总结caps代码相关caps数据表示和规则f...
2019-12-27 21:15:57
3485
1
原创 ceph源码中的几处语法分析
文章目录1. MDSContext::vec目标代码关键词语法分析2. C_IO_Wrapper目标代码关键词语法分析3. MDSGatherBuilder目标代码关键词语法分析总结本文选取了ceph中的几处代码进行分析,旨在读懂代码的基础之上,提炼出关键知识点和思想进行学习。1. MDSContext::vec目标代码class MDSContext : public Context...
2019-12-23 23:39:10
868
转载 Linux错误码汇总
常用linux错误代码含义,如下表所示:名称值描述EPERM1操作不允许ENOENT2无此文件或目录ESRCH3无此进程EINTR4中断系统调用EIO5I/O 错误ENXIO6无此设备或地址E2BIG7参数列表过长ENOEXEC8执行文...
2019-12-18 15:08:00
2302
原创 结合符号表来看为什么不推荐C++模板的声明定义分离
众所周知c++的模板定义通常实现在头文件中,当然也可以实现在源文件中,但这是不推荐的做法,今天就结合一下符号表来看一下为什么不推荐这样做。标准用法先来看一个标准模板实现的例子:template.h#ifndef _TEMP_H_#define _TEMP_H_template<typename T>T maxx(T t1,T t2){ return t1<...
2019-12-15 21:01:56
393
原创 正则表达式流派BRE,ERE,PCRE简介
在regex101上看到正则表达式语言风格可选php,js,python等。但实际上平时只会在grep、awk、sed中用,于是google一把为什么为这些正则表达式有什么区别。之前只知道BRE和ERE,这才知道原来正则也有很多流派之分。具体参考下方几个链接正则表达式“派别”简述Linux/Unix 工具与正则表达式的 POSIX 规范POSIX正则表达式规范BRE和ERE简介...
2019-12-03 11:38:32
1108
原创 cephfs file stripe简介
概念介绍layoutcephfs file layout描述了一个file对象是怎么存储到rados中的,存储在文件的xattr中。文件xattr为***ceph.file.layout***,目录xattr为***ceph.dir.layout***下面是一个layout示例:ceph.file.layout="stripe_unit=4194304 stripe_count=1 obj...
2019-12-02 22:12:17
912
原创 nfs-ganesha rados_ng恢复原理分析
nfsv4协议nfs-ganesha提供对nfsv3和nfsv4的支持,而众所周知nfsv4是有状态协议,和v3差别很大,且nfsv4.1中引入了RECLAIM_COMPLETE,使得可以提前结束grace period,加速recovery流程,因此,本所介绍的恢复过程是基于nfsv4.1+的。下面简单介绍一些nfs4.1协议中的一些关键概念,想要对该协议有更清楚的认识请参考RFC5661,...
2019-12-01 18:26:55
2183
9
原创 ceph 单活mds主从切换流程
本文的所有的分析仅基于个人理解,初学ceph不久,很多地方都是浅显的认识。代码基于ceph nautilus版本。且只分析单活MDS的切换,多活MDS暂不关注mds关键概念想要理解MDS切换过程,首先需要理清一些基本概念。mdsmap包含整个ceph集群的所有mds的状态信息:fs个数、fs名称、各mds状态、数据池、元数据池信息,等等Contains the current MD...
2019-11-30 22:52:23
2657
原创 ceph mds启动流程
本文的所有的分析仅基于个人理解,代码基于ceph nautilus版本MDSDaemon Start首先一切的开始自然是mds进程的上电过程:src/ceph_mds.ccint main(int argc, const char **argv){ // 全局初始化,任何类型ceph daemon启动时都需要调用global_init来完成一些初始化工作 auto cct ...
2019-11-30 22:47:14
2342
原创 C++ Mixin初探
背景在阅读ceph源码时发现了下面的一处写法,由于本人才疏学浅,这种写法是第一次接触,一时间不理解这种写法的含义以及设计理念,于是便查找资料学习相关知识。template<class T>class MDSHolder : public T{ ......};最终确定这是c++实现mixin的方式,也就是Template Parameters as Base C...
2019-11-30 15:51:43
2240
原创 C++ CRTP初探
背景众所周知C++通过虚函数实现运行时多态,而虚函数的又是通过虚函数表来实现的,实际调用虚函数时需要通过虚表指针查询虚函数表来进行调用,这会带来一定的开销。当类越大虚函数虚函数越多时这种开销也会越来越明显。CRTP便是避免这种开销的一种方式,通过模板参数在编译期间确定多态版本,无需虚函数表查询。这是CRTP最初的目的。CRTP定义那么首先看下到底什么是CRTP?template<c...
2019-11-30 15:44:17
1564
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人