自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(258)
  • 资源 (1)
  • 收藏
  • 关注

原创 ceph源码分析--纠删码写流程

op出队列之后的代码流程

2018-07-07 20:57:04 1603

原创 ceph源码分析--onode lru

onode是bluestore中的元数据形式,由于bluestore直接写裸盘,因此需要onode来管理对象。本文就讲讲onode的缓存算法。在bluestore的cache中存在着lru和twoq两种,但是关于onode元数据的cache采用的都是lru算法。1.lru上已有元素在访问到时怎么到队首?这部分得从get_onode讲起,在其中调用了BlueStore::Onod...

2018-04-29 00:53:44 1717

原创 ceph源码分析--一个entry函数的调用

ceph中有很多的entry函数,往往是由各线程来调用处理的,本篇文章以bluestore中的MempoolThread为例来讲讲该函数的调用。 struct MempoolThread : public Thread { BlueStore *store; Cond cond; Mutex lock; bool stop = false; public:...

2018-04-16 01:10:04 805

原创 ceph源码分析--isa-l计算校验块的一个小优化

本次来聊一聊isa-l,即ceph的纠删码插件之一。当然这个值曾经默认是jerasure。 关于纠删码的原理其实就像是线性代数中解线性方程组。这部分就不赘述。本次重点关注isa-l中的两个函数。本次主要关心的问题: 在已经知道旧的校验块后和旧的数据块和修改后的数据块后怎么快速得到新的校验块。首先isa-l库是可以独立单独运行的,首先从 https://github.com/ceph/...

2018-04-15 22:15:19 2694 1

原创 ceph源码分析--Monitor对osd report进行报down处理

上一篇讲到Monitor的tick处理,顺带讲解Monitor对osd report超时的处理 该部分在PGMonitor的tick中调用void Monitor::tick(){ // ok go. dout(11) << "tick" << dendl; ··· //调用paxosservice的tick() for (vector&lt...

2018-02-08 16:07:54 1034

原创 ceph源码分析--Monitor tick

刚入职的时候曾经定位过一个ceph集群时钟回调8小时的单子。后来投入到了项目中。 最近同事问我osd向monitor定时report的处理过程,也涉及到了这一块的内容,而且 正式入职答辩的时候,主管问,那这个tick线程是定时调用的吗?当时被问懵了,因为自己并没有深入的前后看到这块。事情总要有头有尾,遗留的问题总要解决,写这篇博客的目的就是回答当时的遗留问题。究竟monitor的这个tick是...

2018-02-08 09:09:51 698

原创 ceph源码分析--MonitorDB

友情链接

2018-02-02 14:31:16 509

原创 ceph源码分析--Monitor paxos算法

友情链接

2018-01-24 14:25:04 478

原创 ceph源码分析--ceph命令解析(终端敲命令之后发生的事)

在一次开发组内讨论中,那次是admin_socket的后台部分的课程分享。分享中同事提出了一个疑问。既然讲了admin_socket的的后台部分,那前端输入命令到底是怎么去调用的后台呢,或者前台的命令到底是怎么发送的呢?平时的ceph命令到底是怎么解析的呢?讨论会后带着这些疑问,看起了ceph代码。在终端敲入了ceph stastus,终端就返回了集群的状态。那在这个过程中,到底是调用了什么。

2018-01-22 20:27:08 2397 1

原创 ceph源码分析--monitor leader选举

本篇博客主要分为三个部分 1.概述 2.选举的时机 3.选举的过程1.概述monitor在运行的过程中,必须存在一个leader节点来。众多的更新操作都是由leader节点来完成,写的命令也会经由peon转发到leader节点进行。leader的选择是根据rank值来的,rank值小的为leader,而rank值跟IP地址有关。2.选举的时机在ceph中有大致三处

2018-01-19 01:29:31 1123

原创 ceph源码分析--monitor的lease机制

概述在monitor节点中,存在着Leader和Peon两种角色。在monitor采用了一种lease机制,保证了副本在一定时间内可读写。同时lease机制也保证了整个集群中的monitor当前都是可用状态。Leader节点会向所有的Peon节点定时的发送lease消息,延长各个节点的lease时间,同时收集所有节点的ack消息。只要有一个节点没有回复ack消息。就会重新发起选举。 同理

2018-01-18 00:33:30 1032

原创 unix环境高级编程apue.h文件头的安装

工作了,以前只停留在pad里的书都想入手。手里有了unix网络编程卷1卷2,最近看ceph源码的过程中,越来越发现需要补充unix环境高级编程的知识。从pad中走向了实体书。中午快递到货,迫不及待的翻开了。第一件事,安装 #include"apue.h"1.官网下载下载传送门2.解压make安装点依赖gcc make啥的 一make,果然报错,人生啊总是要走很

2018-01-14 15:59:34 704

原创 玩转linux主机-vim配置

在程序员届有一个鄙视链,用vim的鄙视用IDE的。但是完全没配置的vim实在是太难用了。这里笔者在github上找到了用vim打造IDE环境。 https://github.com/BillWang139967/Vim具体的配置方法不赘述,在项目的readme.md有详细说明。

2018-01-14 15:45:18 298

原创 ceph源码分析--admin socket

官方文档http://docs.ceph.com/docs/master/rados/operations/monitoring/具体用法ceph daemon {daemon-name} ceph daemon {path-to-socket-file}ceph daemon osd.0 foo ceph daemon /var/run/ceph/ceph-osd.0.a

2018-01-13 00:37:53 1092

原创 Codeforces Round #428 (Div. 2) A. Arya and Bran

传送门#include<iostream>using namespace std;#define MAX_N 100010int main(){ int a[MAX_N]; int n,k; scanf("%d%d",&n,&k); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); } int c

2017-08-20 20:08:09 313

原创 ceph日志级别

在ceph运行的过程中,可以通过调整日志级别来排查系统异常等。代码文件中经常有dout(10)这样的语句。表示输出到日志,而数字则代表日志级别。日志的设置有debug_osd,debug_mon等。#define dout_subsys ceph_subsys_mon #undef dout_prefix 设置的日志主要看 ceph_subsys_mon的最后一项。日志的级别设置有两种方法。1.

2017-08-14 00:25:49 5272

原创 ceph基本命令

1.集群健康状态ceph health2.集群状态ceph -s3.查看ceph存储空间ceph df4.查看mon状态信息ceph mon stat5.查看mon的选举状态 ceph quorum_status6.查看osd状态ceph osd stat/dump7.查看osd状态和层级ceph osd tree8.查看pg状态ceph pg stat

2017-08-02 23:42:20 764

原创 LeetCode---1. Two Sum

传送门class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { vector<int> res; map<int,int> m; for(int i=0;i<nums.size();i++){ m[nums[i]]=i;

2017-04-11 13:58:56 377

原创 Codeforces Round #408 (Div. 2) A Buying A House

传送门#include<stdio.h>#define MAX_N 110int house[MAX_N];int main(){ int n,m,k; scanf("%d%d%d",&n,&m,&k); for(int i=1;i<=n;i++){ scanf("%d",&house[i]); if(house[i]==0)

2017-04-11 10:58:46 388

原创 1128. N Queens Puzzle (20) PAT 甲级

传送门#include<stdio.h>#include<vector>#include<math.h>#include<stdlib.h>using namespace std;int main(){ int k; vector<int> v; scanf("%d",&k); int n; while(k--){ scanf("%d

2017-03-30 16:51:48 339

原创 1068. 万绿丛中一点红(20) PAT 乙级

传送门#include<stdio.h>#include<math.h>#include<map> using namespace std;#define MAX_N 1100//typedef long long ll;int img[MAX_N][MAX_N];int m,n;int tol;map<int,int> v; bool judge(int i,int j){ if

2017-03-28 10:00:05 1830

原创 1067. 试密码(20) PAT 乙级

传送门#include<iostream>using namespace std;int main(){ string passwd,input; int n; cin>>passwd>>n; getchar(); int count=0; while(true){ getline(cin,input); if(in

2017-03-26 14:51:50 783

原创 1066. 图像过滤(15) PAT乙级

传送门#include<stdio.h>#define MAX_N 520int n,m;int a,b;int p;int num[MAX_N][MAX_N];void print(){ for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ if(num[i][j]<=b&&num[i][j]>=a){

2017-03-26 12:48:05 1050

原创 1127. ZigZagging on a Tree (30) PAT 甲级

传送门#include<stdio.h>#include<queue>#include<algorithm> #define MAX_N 32using namespace std;typedef struct Node { Node *lchild; Node *rchild; int data; int level;}node,*BTtree;int i

2017-03-15 21:04:41 956

原创 玩转linux主机--node.js、npm

1.安装文件下载官网下载node.js的tar.gz包2解压tar zxvf node-v6.9.5.tar.gz3.编译安装cd node-v6.9.5 ./configure –prefix=/usr/local/node make make install4.配置环境变量vim /etc/profile#set for nodejsexport NODE_HOME=/usr/local

2017-03-14 11:16:56 1038

原创 玩转linux主机--redis

redis是一款高效的key/value存储系统1.下载wget http://download.redis.io/releases/redis-3.2.8.tar.gz2.解压tar xzf redis-2.8.17.tar.gzcd redis-2.8.173.安装make进入redis4.启动 ./redis-server5.客户端测试 ./redis-cli

2017-03-11 11:43:04 477

原创 1126. Eulerian Path (25) PAT 甲级

传送门#include<stdio.h>#include<vector>#include<algorithm>using namespace std;#define MAX_V 520#define INF 1000000000int G[MAX_V][MAX_V];int set[MAX_V];int n,m;int d[MAX_V];int find(int r){ whi

2017-03-06 09:50:05 453

原创 1125. Chain the Ropes (25) PAT 甲级&&1070. 结绳(25) PAT 乙级

传送门#include<stdio.h>#include<algorithm>using namespace std;#define MAX_N 10100int main(){ int n; double a[MAX_N]; scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%lf",&a[i]);

2017-03-06 09:32:33 564

原创 1124. Raffle for Weibo Followers (20) PAT 甲级&&1069. 微博转发抽奖(20) PAT乙级

传送门#include<iostream>#include<map>#include<string>#include<vector>using namespace std;map<string,int> count;vector<string> v;int m,n,s;int main(){ string name; cin>>m>>n>>s; v.push_ba

2017-03-06 09:31:19 539

原创 1014. Waiting in Line (30) PAT 甲级

传送门#include<stdio.h>#include<algorithm>#include<vector>using namespace std;#define MAX_N 110#define INF 1000000000struct Customer{ int arriveTime; int processingTime;}customer;int endTime[

2017-03-02 15:50:21 285

原创 1122. Hamiltonian Cycle (25) PAT 甲级

传送门#include<stdio.h>#include<vector>#define MAX_V 210#define INF 100000000#include<algorithm>using namespace std;int G[MAX_V][MAX_V];int n,m;int k;int len;vector<int> h;bool judge(){ if(h.s

2017-03-01 17:08:02 548 2

原创 1118. Birds in Forest (25) PAT 甲级

传送门#include<stdio.h>#include<vector>#define MAX_N 10100int set[MAX_N];//vector<int> v;int find(int r){ int x=r; while(set[r]!=r){ r=set[r]; } while(x!=set[x]){ int z=x

2017-03-01 16:04:36 338

原创 1072. Gas Station (30) PAT 甲级

传送门#include<stdio.h>#include<string.h>#include<vector>#include<algorithm>using namespace std;#define MAX_V 1100#define INF 1000000000int G[MAX_V][MAX_V];int n,m,k,ds;int d[MAX_V];bool visited[M

2017-03-01 15:17:24 553

原创 1087. All Roads Lead to Rome (30) PAT 甲级

传送门#include<stdio.h>#include<iostream>#include<vector>#include<queue>#include<string.h>#include<algorithm>#include<map>#include<string>using namespace std;#define MAX_V 220#define INF 10000000

2017-03-01 13:32:17 737

原创 1018. Public Bike Management (30) PAT 甲级

传送门#include<stdio.h>#include<algorithm>#include<string.h>#include<vector>#include<math.h>using namespace std;#define MAX_V 510#define INF 1000000000int G[MAX_V][MAX_V];int n,m,Cmax,Sp;bool visi

2017-03-01 10:42:07 606

原创 1030. Travel Plan (30) PAT 甲级

传送门#include<stdio.h>#include<vector>#include<algorithm>#include<string.h>using namespace std;#define MAX_V 510#define INF 100000000int n,m;int Start,End;int G[MAX_V][MAX_V];int d[MAX_V];int cos

2017-02-28 20:47:52 269

原创 1003. Emergency (25) PAT 甲级

传送门#include<stdio.h>#include<string.h>#include<vector>using namespace std;#define MAX_V 510#define INF 1000000000int G[MAX_V][MAX_V];int weight[MAX_V];bool visited[MAX_V];int n,m;int num[MAX_V]

2017-02-28 19:22:28 338

原创 Dijkstra最短路

邻接矩阵表示#include<stdio.h>#include<map>#include<queue>#include<string.h>#include<math.h>#include<algorithm>#include<vector>using namespace std;#define MAX_V 510#define INF 1000000000int n;int m;

2017-02-28 16:33:40 391

原创 1112. Stucked Keyboard (20) PAT甲级

传送门#include<stdio.h>#include<string.h>#define MAX_N 1100int k;char str[MAX_N];bool map[256];bool visited[256];int main(){ scanf("%d",&k); scanf("%s",str); int count=1; int len=strle

2017-02-26 19:31:45 449

原创 1123. Is It a Complete AVL Tree (30) PAT 甲级

传送门#include<stdio.h>#include<algorithm>#include<queue>using namespace std;typedef struct Node{ int weight; int height; Node *lchild,*rchild;}AVLnode,*AVLtree;AVLtree root;int n;AVLnode

2017-02-24 21:25:43 378

2009-2018 计算机考研408历年真题

考研历年真题,帮助考生考上理想的学校。

2018-12-09

空空如也

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

TA关注的人

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