自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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 2342

原创 记一次cmake cache引发的编译问题

文章目录前言问题的出现总结和说明总结官方说明前言c/c++程序员对cmake肯定都有所耳闻,大型项目的makefile如果要编写起来非常复杂,一般都是通过cmake进行管理。但即使经常接触,但由于cmakelists基本很少改动,但对其一些工作机制还不是很了解,本人前段时间刚好因为对cmake的生疏遇到了一个挺有意思的小问题,记录和分享一下。问题的出现假设某项目的代码组织结构如下:.└── project ├── CMakeLists.txt └── src ├─

2020-06-30 09:48:53 3525

原创 基于C++11的线程池实现

文章目录线程池基本组成源码和分析参考前端时间偶然在github上看到了一个非常精炼的C++11线程池实现。作者用不到100行的代码实现了一个简单的线程池,且使用了较多C++11的新特性。于是便想着自己也来动手看看,思路上基本是借鉴原版,但会加入一些自己的想法和尝试,同时先避免对复杂语法的运用以理解线程池为首要目的。由于个人能力有限,如果代码中有明显bug欢迎指正,一起交流进步。线程池基本组成...

2020-03-09 22:00:39 488

原创 c++ new运算符是如何调用构造函数的

内存申请和对象构造       本文内容简短,只为记录下一次思考过程,事情起源于一句话,“new操作符会调用operator new分配内存再调用构造函数构造对象”,但最近再次看到这句话的时候越看越有疑问,怎么样调用构造函数??于是就带着这个问题顺便看下operator new和placement new的源码加深下印象了。众所周知构造函数是在实例化一...

2020-02-27 23:39:37 8063 2

原创 十问paxos

前言paxos作为大名鼎鼎的算法,关于它的文章数不胜数,除去原作者的Paxos Made Simple(学习paxos必看)之外,网上也有众多的梳理讲解。本文相当于是对paxos的学习笔记,但是对paxos的介绍会简单带过,主要侧重于从一个初学者的角度去看学习paxos时一些可能会产生以及比较关键的问题,通过对这些问题的思考来学习理解paxos。为了解决什么问题任何算法发明出来都是为了解决实...

2020-01-05 23:29:17 268

转载 Linux系统调用列表

一、进程控制: ...

2020-01-02 15:09:02 194

原创 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 2951 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 751

转载 Linux错误码汇总

常用linux错误代码含义,如下表所示:名称值描述EPERM1操作不允许ENOENT2无此文件或目录ESRCH3无此进程EINTR4中断系统调用EIO5I/O 错误ENXIO6无此设备或地址E2BIG7参数列表过长ENOEXEC8执行文...

2019-12-18 15:08:00 2235

原创 结合符号表来看为什么不推荐C++模板的声明定义分离

众所周知c++的模板定义通常实现在头文件中,当然也可以实现在源文件中,但这是不推荐的做法,今天就结合一下符号表来看一下为什么不推荐这样做。标准用法先来看一个标准模板实现的例子:template.h#ifndef _TEMP_H_#define _TEMP_H_template<typename T>T maxx(T t1,T t2){ return t1&lt...

2019-12-15 21:01:56 325

原创 正则表达式流派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 955

原创 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 804

原创 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 1761 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 2433

原创 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 2025

原创 C++ Mixin初探

背景在阅读ceph源码时发现了下面的一处写法,由于本人才疏学浅,这种写法是第一次接触,一时间不理解这种写法的含义以及设计理念,于是便查找资料学习相关知识。template<class T>class MDSHolder : public T{ ......};最终确定这是c++实现mixin的方式,也就是Template Parameters as Base C...

2019-11-30 15:51:43 1876

原创 C++ CRTP初探

背景众所周知C++通过虚函数实现运行时多态,而虚函数的又是通过虚函数表来实现的,实际调用虚函数时需要通过虚表指针查询虚函数表来进行调用,这会带来一定的开销。当类越大虚函数虚函数越多时这种开销也会越来越明显。CRTP便是避免这种开销的一种方式,通过模板参数在编译期间确定多态版本,无需虚函数表查询。这是CRTP最初的目的。CRTP定义那么首先看下到底什么是CRTP?template<c...

2019-11-30 15:44:17 1471 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除