<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[SY_Yu的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/SY_Yu</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; SY_Yu]]></copyright><item><title><![CDATA[ceph源码分析--纠删码写流程]]></title><link>https://blog.youkuaiyun.com/SY_Yu/article/details/80954685</link><guid>https://blog.youkuaiyun.com/SY_Yu/article/details/80954685</guid><author>SY_Yu</author><pubDate>Sat, 07 Jul 2018 20:57:04 +0800</pubDate><description><![CDATA[op出队列之后的代码流程

]]></description><category></category></item><item><title><![CDATA[ceph源码分析--onode lru]]></title><link>https://blog.youkuaiyun.com/SY_Yu/article/details/80140536</link><guid>https://blog.youkuaiyun.com/SY_Yu/article/details/80140536</guid><author>SY_Yu</author><pubDate>Sun, 29 Apr 2018 00:53:44 +0800</pubDate><description><![CDATA[onode是bluestore中的元数据形式，由于bluestore直接写裸盘，因此需要onode来管理对象。本文就讲讲onode的缓存算法。

在bluestore的cache中存在着lru和twoq两种，但是关于onode元数据的cache采用的都是lru算法。



1.lru上已有元素在访问到时怎么到队首？

这部分得从get_onode讲起，在其中调用了

BlueStore::Onod...]]></description><category></category></item><item><title><![CDATA[ceph源码分析--一个entry函数的调用]]></title><link>https://blog.youkuaiyun.com/SY_Yu/article/details/79955551</link><guid>https://blog.youkuaiyun.com/SY_Yu/article/details/79955551</guid><author>SY_Yu</author><pubDate>Mon, 16 Apr 2018 01:10:04 +0800</pubDate><description><![CDATA[ceph中有很多的entry函数，往往是由各线程来调用处理的，本篇文章以bluestore中的MempoolThread为例来讲讲该函数的调用。

 struct MempoolThread : public Thread {
    BlueStore *store;
    Cond cond;
    Mutex lock;
    bool stop = false;
  public:
...]]></description><category></category></item><item><title><![CDATA[ceph源码分析--isa-l计算校验块的一个小优化]]></title><link>https://blog.youkuaiyun.com/SY_Yu/article/details/79935947</link><guid>https://blog.youkuaiyun.com/SY_Yu/article/details/79935947</guid><author>SY_Yu</author><pubDate>Sun, 15 Apr 2018 22:15:19 +0800</pubDate><description><![CDATA[本次来聊一聊isa-l，即ceph的纠删码插件之一。当然这个值曾经默认是jerasure。 
关于纠删码的原理其实就像是线性代数中解线性方程组。这部分就不赘述。本次重点关注isa-l中的两个函数。

本次主要关心的问题： 
在已经知道旧的校验块后和旧的数据块和修改后的数据块后怎么快速得到新的校验块。

首先isa-l库是可以独立单独运行的，首先从 
https://github.com/ceph/...]]></description><category></category></item><item><title><![CDATA[ceph源码分析--Monitor对osd report进行报down处理]]></title><link>https://blog.youkuaiyun.com/SY_Yu/article/details/79286100</link><guid>https://blog.youkuaiyun.com/SY_Yu/article/details/79286100</guid><author>SY_Yu</author><pubDate>Thu, 08 Feb 2018 16:07:54 +0800</pubDate><description><![CDATA[上一篇讲到Monitor的tick处理，顺带讲解Monitor对osd report超时的处理 
该部分在PGMonitor的tick中调用



void Monitor::tick()
{
  // ok go.
  dout(11) &amp;lt;&amp;lt; &quot;tick&quot; &amp;lt;&amp;lt; dendl;
  ···
  //调用paxosservice的tick()
  for (vector&amp;lt...]]></description><category></category></item><item><title><![CDATA[ceph源码分析--Monitor tick]]></title><link>https://blog.youkuaiyun.com/SY_Yu/article/details/79271049</link><guid>https://blog.youkuaiyun.com/SY_Yu/article/details/79271049</guid><author>SY_Yu</author><pubDate>Thu, 08 Feb 2018 09:09:51 +0800</pubDate><description><![CDATA[刚入职的时候曾经定位过一个ceph集群时钟回调8小时的单子。后来投入到了项目中。 
最近同事问我osd向monitor定时report的处理过程，也涉及到了这一块的内容，而且 
正式入职答辩的时候，主管问，那这个tick线程是定时调用的吗？当时被问懵了，因为自己并没有深入的前后看到这块。事情总要有头有尾，遗留的问题总要解决，写这篇博客的目的就是回答当时的遗留问题。究竟monitor的这个tick是...]]></description><category></category></item><item><title><![CDATA[ceph源码分析--MonitorDB]]></title><link>https://blog.youkuaiyun.com/SY_Yu/article/details/79238815</link><guid>https://blog.youkuaiyun.com/SY_Yu/article/details/79238815</guid><author>SY_Yu</author><pubDate>Fri, 02 Feb 2018 14:31:16 +0800</pubDate><description><![CDATA[友情链接]]></description><category></category></item><item><title><![CDATA[ceph源码分析--Monitor paxos算法]]></title><link>https://blog.youkuaiyun.com/SY_Yu/article/details/79150394</link><guid>https://blog.youkuaiyun.com/SY_Yu/article/details/79150394</guid><author>SY_Yu</author><pubDate>Wed, 24 Jan 2018 14:25:04 +0800</pubDate><description><![CDATA[友情链接]]></description><category></category></item><item><title><![CDATA[ceph源码分析--ceph命令解析（终端敲命令之后发生的事）]]></title><link>https://blog.youkuaiyun.com/SY_Yu/article/details/79131881</link><guid>https://blog.youkuaiyun.com/SY_Yu/article/details/79131881</guid><author>SY_Yu</author><pubDate>Mon, 22 Jan 2018 20:27:08 +0800</pubDate><description><![CDATA[在一次开发组内讨论中，那次是admin_socket的后台部分的课程分享。分享中同事提出了一个疑问。既然讲了admin_socket的的后台部分，那前端输入命令到底是怎么去调用的后台呢，或者前台的命令到底是怎么发送的呢？平时的ceph命令到底是怎么解析的呢？讨论会后带着这些疑问，看起了ceph代码。

在终端敲入了ceph stastus，终端就返回了集群的状态。那在这个过程中，到底是调用了什么。]]></description><category></category></item><item><title><![CDATA[ceph源码分析--monitor leader选举]]></title><link>https://blog.youkuaiyun.com/SY_Yu/article/details/79102202</link><guid>https://blog.youkuaiyun.com/SY_Yu/article/details/79102202</guid><author>SY_Yu</author><pubDate>Fri, 19 Jan 2018 01:29:31 +0800</pubDate><description><![CDATA[本篇博客主要分为三个部分 
1.概述 
2.选举的时机 
3.选举的过程



1.概述

monitor在运行的过程中，必须存在一个leader节点来。众多的更新操作都是由leader节点来完成，写的命令也会经由peon转发到leader节点进行。

leader的选择是根据rank值来的，rank值小的为leader，而rank值跟IP地址有关。



2.选举的时机

在ceph中有大致三处]]></description><category></category></item><item><title><![CDATA[ceph源码分析--monitor的lease机制]]></title><link>https://blog.youkuaiyun.com/SY_Yu/article/details/79070010</link><guid>https://blog.youkuaiyun.com/SY_Yu/article/details/79070010</guid><author>SY_Yu</author><pubDate>Thu, 18 Jan 2018 00:33:30 +0800</pubDate><description><![CDATA[概述

在monitor节点中，存在着Leader和Peon两种角色。在monitor采用了一种lease机制，保证了副本在一定时间内可读写。同时lease机制也保证了整个集群中的monitor当前都是可用状态。

Leader节点会向所有的Peon节点定时的发送lease消息，延长各个节点的lease时间，同时收集所有节点的ack消息。只要有一个节点没有回复ack消息。就会重新发起选举。 
同理]]></description><category></category></item><item><title><![CDATA[unix环境高级编程apue.h文件头的安装]]></title><link>https://blog.youkuaiyun.com/SY_Yu/article/details/79057124</link><guid>https://blog.youkuaiyun.com/SY_Yu/article/details/79057124</guid><author>SY_Yu</author><pubDate>Sun, 14 Jan 2018 15:59:34 +0800</pubDate><description><![CDATA[工作了，以前只停留在pad里的书都想入手。手里有了unix网络编程卷1卷2，最近看ceph源码的过程中，越来越发现需要补充unix环境高级编程的知识。

从pad中走向了实体书。中午快递到货，迫不及待的翻开了。第一件事，安装



 #include"apue.h"



1.官网下载

下载传送门



2.解压make

安装点依赖gcc make啥的 
一make，果然报错，人生啊总是要走很]]></description><category></category></item><item><title><![CDATA[玩转linux主机-vim配置]]></title><link>https://blog.youkuaiyun.com/SY_Yu/article/details/79056994</link><guid>https://blog.youkuaiyun.com/SY_Yu/article/details/79056994</guid><author>SY_Yu</author><pubDate>Sun, 14 Jan 2018 15:45:18 +0800</pubDate><description><![CDATA[在程序员届有一个鄙视链，用vim的鄙视用IDE的。但是完全没配置的vim实在是太难用了。这里笔者在github上找到了用vim打造IDE环境。 
https://github.com/BillWang139967/Vim具体的配置方法不赘述，在项目的readme.md有详细说明。]]></description><category></category></item><item><title><![CDATA[ceph源码分析--admin socket]]></title><link>https://blog.youkuaiyun.com/SY_Yu/article/details/79049067</link><guid>https://blog.youkuaiyun.com/SY_Yu/article/details/79049067</guid><author>SY_Yu</author><pubDate>Sat, 13 Jan 2018 00:37:53 +0800</pubDate><description><![CDATA[官方文档

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]]></description><category></category></item><item><title><![CDATA[Codeforces Round #428 (Div. 2) A. Arya and Bran]]></title><link>https://blog.youkuaiyun.com/SY_Yu/article/details/77432143</link><guid>https://blog.youkuaiyun.com/SY_Yu/article/details/77432143</guid><author>SY_Yu</author><pubDate>Sun, 20 Aug 2017 20:08:09 +0800</pubDate><description><![CDATA[传送门#include<iostream>
using namespace std;#define MAX_N 100010
int 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]]></description><category></category></item><item><title><![CDATA[ceph日志级别]]></title><link>https://blog.youkuaiyun.com/SY_Yu/article/details/77151757</link><guid>https://blog.youkuaiyun.com/SY_Yu/article/details/77151757</guid><author>SY_Yu</author><pubDate>Mon, 14 Aug 2017 00:25:49 +0800</pubDate><description><![CDATA[在ceph运行的过程中，可以通过调整日志级别来排查系统异常等。代码文件中经常有dout(10)这样的语句。表示输出到日志，而数字则代表日志级别。日志的设置有debug_osd,debug_mon等。#define dout_subsys ceph_subsys_mon 
#undef dout_prefix 
设置的日志主要看 ceph_subsys_mon的最后一项。日志的级别设置有两种方法。1.]]></description><category></category></item><item><title><![CDATA[ceph基本命令]]></title><link>https://blog.youkuaiyun.com/SY_Yu/article/details/76600035</link><guid>https://blog.youkuaiyun.com/SY_Yu/article/details/76600035</guid><author>SY_Yu</author><pubDate>Wed, 02 Aug 2017 23:42:20 +0800</pubDate><description><![CDATA[1.集群健康状态ceph health
2.集群状态ceph -s
3.查看ceph存储空间ceph df
4.查看mon状态信息ceph mon stat
5.查看mon的选举状态 ceph quorum_status
6.查看osd状态ceph osd stat/dump
7.查看osd状态和层级ceph osd tree
8.查看pg状态ceph pg stat]]></description><category></category></item><item><title><![CDATA[LeetCode---1. Two Sum]]></title><link>https://blog.youkuaiyun.com/SY_Yu/article/details/70052415</link><guid>https://blog.youkuaiyun.com/SY_Yu/article/details/70052415</guid><author>SY_Yu</author><pubDate>Tue, 11 Apr 2017 13:58:56 +0800</pubDate><description><![CDATA[传送门class Solution {
public:
    vector&lt;int&gt; twoSum(vector&lt;int&gt;&amp; nums, int target) {
        vector&lt;int&gt; res;
        map&lt;int,int&gt; m;
        for(int i=0;i&lt;nums.size();i++){
            m[nums[i]]=i;]]></description><category></category></item><item><title><![CDATA[Codeforces Round #408 (Div. 2) A Buying A House]]></title><link>https://blog.youkuaiyun.com/SY_Yu/article/details/70048900</link><guid>https://blog.youkuaiyun.com/SY_Yu/article/details/70048900</guid><author>SY_Yu</author><pubDate>Tue, 11 Apr 2017 10:58:46 +0800</pubDate><description><![CDATA[传送门#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)]]></description><category></category></item><item><title><![CDATA[1128. N Queens Puzzle (20) PAT 甲级]]></title><link>https://blog.youkuaiyun.com/SY_Yu/article/details/68489900</link><guid>https://blog.youkuaiyun.com/SY_Yu/article/details/68489900</guid><author>SY_Yu</author><pubDate>Thu, 30 Mar 2017 16:51:48 +0800</pubDate><description><![CDATA[传送门#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]]></description><category></category></item></channel></rss>