
系统
文章平均质量分 72
feilengcui008
这个作者很懒,什么都没留下…
展开
-
Distributed Systems-再谈2PC和3PC
之前的一篇文章感觉分析得不太完整,所以再记录点东西。故障组合情况对于多个节点且每个节点有多个可能状态参与的分布式系统来说,假设在有限的某个时间点上发生故障的概率为0,对于coordinator(proposer/master/leader等),在发送接收的一轮交互中,可能在发送消息前(t < t1),发送部分消息(t1 < t < t2),发送所有消息后并且接收消息前(t2 < t < t3),接收原创 2016-01-22 16:24:14 · 805 阅读 · 0 评论 -
Distributed Systems-Paxos
本文主要提炼了《Paxos Make Simple》中的一些主要观点,然后加上自己的理解,使用通俗的语言尝试做一些解释。关于Paxos算法背景和一致性相关问题可以参见原论文算法涉及的主要对象action 对一条记录(某个变量)的一次操作(这一点只是本人便于后面理解加上的) 这里选用操作这个词,而不是值,因为一个在对某个变量达成某个值的共识前可能已经经过多个更新操作,所以为了区别,使用操作作为每原创 2015-12-18 15:15:11 · 550 阅读 · 0 评论 -
Linux内核-文件系统-页高速缓存
Linux内核的VFS是非常经典的抽象,不仅抽象出了flesystem,super_block,inode,dentry,file等结构,而且还提供了像页高速缓存层的通用接口,当然,你可以自己选择是否使用或者自己定制使用方式。本文主要根据自己阅读Linux Kernel 3.19.3系统调用read相关的源码来追踪页高速缓存在整个流程中的痕迹,以常规文件的页高速缓存为例,了解页高速缓存的实现过程,不原创 2015-10-20 18:51:45 · 2069 阅读 · 0 评论 -
Linux内核-内存管理-内存访问与缺页中断
简单描述了x86 32位体系结构下Linux内核的用户进程和内核线程的线性地址空间和物理内存的联系,分析了高端内存的引入与缺页中断的具体处理流程。先介绍了用户态进程的执行流程,然后对比了内核线程,引入高端内存的概念,最后分析了缺页中断的流程。用户进程 fork之后的用户态进程已经建立好了所需的数据结构,比如task struct,thread info,mm struct等,将编译链接好的可执行原创 2015-10-16 18:12:12 · 1565 阅读 · 0 评论 -
Linux内核-编译与启动流程
(额…觉得Linux编译链接过程和启动过程还是有那么点作用的哈,要理清楚细节非常多…趟了不少源码…记此备忘)编译流程1.编译除arch/x86/boot目录外的其他目录,生成各模块的built_in.o,将静态编译进内核的模块链接成ELF格式的文件vmlinux大约100M,置于源码根目录之下2.通过objcopy将源码根目录下的vmlinux去掉符号等信息置于arch/x86/boot/com原创 2015-09-20 23:27:58 · 681 阅读 · 0 评论 -
Linux内核-抢占
主要介绍内核抢占的相关概念和具体实现,以及抢占对内核调度和内核竞态和同步的一些影响。1. 基本概念用户抢占和内核抢占 用户抢占发生点 当从系统调用或者中断上下文返回用户态的时候,会检查need_resched标志,如果被设置则会重新选择用户态task执行内核抢占发生点 当从中断上下文返回内核态的时候,检查need_resched标识以及__preemp_count计数,如果标识被设置,并且原创 2016-06-18 14:28:56 · 3857 阅读 · 0 评论 -
Redis源码分析
简介Redis的eventloop实现也是比较平常的,主要关注文件描述符和timer相关事件,而且timer只是简单用一个单链表(O(n)遍历寻找最近触发的时间)实现。流程主要在initServer(server.c)中初始化整个eventloop相关的数据结构与回调// 注册系统timer事件if (aeCreateTimeEvent(server.el, 1, serverCron, NU原创 2016-05-29 22:20:51 · 753 阅读 · 0 评论 -
Linux内核-容器之namespace
1. 介绍简单玩了下Linux kernel为容器技术提供的基础设施之一namespace(另一个是cgroups),包括uts/user/pid/mnt/ipc/net六个(3.13.0的内核). 这东西主要用来做资源的隔离,我感觉本质上是全局资源的映射,映射之间独立了自然隔离了。主要涉及到的东西是:clonesetnsunshare/proc/pid/ns, /proc/pid/uid_原创 2016-06-10 20:12:26 · 8198 阅读 · 1 评论 -
Linux网络编程之简单总结
SVM1.概述⇒\Rightarrow brief introductionSVM全称Support_Vector_Machine,即支持向量机,是机器学习中的一种监督学习分类算法,一般用于二分类问题。对于线性可分的二分类问题,SVM可以直接求解,对于非线性可分问题,其也可以通过核函数将低维映射到高维空间从而转变为线性可分。对于多分类问题,SVM经过适当的转换,也能加以解决。相对于传统的分类算法如l原创 2015-03-04 22:37:33 · 1154 阅读 · 0 评论 -
Distributed Systems-leader based分布式一致性协议
上一篇文章推导了基本Paxos算法,并引出了在实际使用中其存在的问题,然后说明了leader-based分布式一致算法的优势。这篇文章分析一下选主的本质,选出一个主对整个算法的影响,以及采用选主会存在的问题以及基本Paxos协议是怎么样保证这些问题不会影响一致性的。1.为什么选主至于为什么选主?个人认为有如下原因:避免并发决议导致的livelock和新丢失的问题可以采用一定方法在选主时(raft原创 2016-03-10 09:41:02 · 777 阅读 · 0 评论 -
Linux下ELF文件格式
(in English for practice^_^)In this article,I will talk about the ELF files for Linux,and their diffs as to comprehend the linking process in a diff view angle.There are many articles talking about tha原创 2015-09-13 21:57:33 · 854 阅读 · 0 评论 -
Linux下x86_64进程地址空间布局
关于Linux 32位内存下的内存空间布局,可以参考这篇博文Linux下C程序进程地址空间局关于源代码中各种数据类型/代码在elf格式文件以及进程空间中所处的段,在x86_64下和i386下是类似的,本文主要关注vm.legacy_va_layout以及kernel.randomize_va_space参数影响下的进程空间内存宏观布局。情形一:vm_legacy_va_layout=1 ke原创 2015-03-08 23:33:26 · 4959 阅读 · 0 评论 -
Docker
本文主要介绍Docker的一些基本概念、Docker的源码分析、Docker的一些issue、Docker周边生态等等。基本概念Basicsdocker大体包括三大部分,runtime(container)、image(graphdriver)、registry,runtime提供环境的隔离与资源的隔离和限制,image提供layer、image、rootfs的管理、registry负责镜像存储与分原创 2016-10-08 17:23:16 · 2179 阅读 · 0 评论 -
Runc容器生命周期
容器的生命周期涉及到内部的程序实现和面向用户的命令行界面,runc内部容器状态转换操作、runc命令的参数定义的操作、docker client定义的容器操作是不同的,比如对于docker client的create来说, 语义和runc就完全不同,这一篇文章分析runc的容器生命周期的抽象、内部实现以及状态转换图。理解了runc的容器状态转换再对比理解docker client提供的容器操作命令原创 2016-11-30 17:17:43 · 881 阅读 · 0 评论 -
Protobuf和GRPC(一)
数据交互协议和RPC框架对于分布式系统来说是必不可少的组件,这个系列主要用来分析Protobuf和GRPC的主要实现原理,本文主要介绍Protobuf生成代码的主要流程以及Protobuf与GRPC之间的交互方式。简要描述Protobuf Protobuf主要由三大部分构成: Core: 包括核心的数据结构比如Message和Service等等 Compiler: proto文件的To原创 2017-03-05 20:32:11 · 4031 阅读 · 1 评论 -
Raft简单实现小结
上一周花了大部分时间重新拾起了之前落下的MIT6.824 2016的分布式课程,实现和调试了下Raft协议,虽然Raft协议相对其他容错分布式一致性协议如Paxos/Multi-Paxos/VR/Zab等来说更容易理解,但是在实现和调试过程中也遇到不少细节问题。虽然论文中有伪代码似的协议描述,但是要把每一小部分逻辑组合起来放到正确的位置还是需要不少思考和踩坑的,这篇文章对此做一个小结。Raft实现这原创 2017-03-20 20:51:07 · 3759 阅读 · 0 评论 -
Paper Reading - In Search of an Understandable Consensus Algorithm(Raft)
0 Abstract In order to enhance understandability, Raft separates the key elements of consensus, such as leader election, log replication, and safety, and it enforces a stronger degree of coherency to原创 2017-04-01 10:51:44 · 1120 阅读 · 0 评论 -
Distributed Systems-2PC和3PC
这篇文章主要讨论下解决分布式一致性问题的两种算法:两阶段提交(2PC)和三阶段提交(3PC)。之前感觉2PC和3PC的流程挺简单的,但是真正仔细去分析过后,才发现很多的细节。而这些细节对理解Paxos,Raft,Viewstamp Replication,Atomic Broadcast等其他更复杂的一致性算法有很大的作用。所以才在此记录一下这些细节,尤其是从工程实现的角度来思考。具体的术语,像co原创 2016-01-21 20:35:31 · 1217 阅读 · 2 评论 -
Linux内核-协议栈-初始化流程分析
本文主要针对Linux-3.19.3版本的内核简单分析内核协议栈初始化涉及到的主要步骤和关键函数,不针对协议的解析以及数据包的处理流程做具体分析,后续有机会再详细分析(主要是作者目前这块才涉及…)1.准备Linux内核协议栈本身构建在虚拟文件系统之上,所以对Linux VFS不太了解的可以参考内核源码根目录下Documentation/filesystems/vfs.txt,另外,socket接口原创 2015-10-31 10:35:16 · 2281 阅读 · 0 评论 -
Linux内核-协议栈-从BSD Socket接口层到传输层1
本文接上一篇Linux内核协议栈-初始化流程分析,在上一篇中主要分析了了Linux内核协议栈涉及到的关键初始化函数,在这一篇文章中将分析协议栈的BSD socket和到传输层的流程。采取的方式是分析socket相关的主要系统调用。针对不同的系统调用,其到达的协议层深度可能不同,有的基本只到sock层就够了,但是有些可能需要会涉及到比如tcp的具体细节和更底层的细节。本文基本追溯到传输层的开始,再深入原创 2015-10-31 12:57:33 · 1151 阅读 · 0 评论 -
Linux网络编程之多线程
multithread mode//thread server#include <stdio.h>#include <stdlib.h>#include <netinet/in.h>#include <netdb.h>#include <pthread.h>#include <unistd.h>#define MAX_READ_CHUNK 2*1024*1024#define KEE原创 2015-03-03 10:29:23 · 550 阅读 · 0 评论 -
Linux网络编程之select
select-nonblocking modethe select-nonblocking mode is simple but the fd number is usually limited to 1024,although if we dont need very high concurrency number like the front server(nginx etc),we can原创 2015-03-03 10:31:03 · 514 阅读 · 0 评论 -
Linux网络编程之epoll
epoll-nonblocking(Level-Trigger)with epoll each time we exec epoll it return the fds which have events,it behaves better than select/poll.You can use both blocking and nonblocking in LT mode,but only n原创 2015-03-09 10:09:56 · 681 阅读 · 0 评论 -
Linux网络编程之多进程
multiprocess mode//fork server#include <stdio.h>#include <string.h>#include <unistd.h>#include <sys/socket.h>#include <netdb.h>#include <stdlib.h>#include <netinet/in.h>#include <sys/wait.h>#i原创 2015-03-03 10:28:10 · 612 阅读 · 0 评论 -
Linux网络编程之poll
poll-nonblocking modethe poll is like select,it uses struct pollfd to replace the read_set,write_set,error_set of select,and it has no limitation of the fd number like select.struct pollfd { in原创 2015-03-03 10:33:07 · 562 阅读 · 0 评论 -
Distributed Systems-Basics
This post is a simple outline about some basic(really basic) ideas behind distributed systems and I will add more (detail) stuff sometimes according to my narrow understanding. Why distributed?a singl原创 2015-12-02 10:41:32 · 716 阅读 · 0 评论 -
Linux下的时间
时钟硬件时钟RTC(real time clock),记录wall clock time,硬件对应到/dev/rtc设备文件,读取设备文件可得到硬件时间读取方式 通过ioctl #include <linux/rtc.h> int ioctl(fd, RTC_request, param); hwclock命令通常内核在boot以及从低电量中恢复时,会读取RTC更新system ti原创 2016-05-16 18:13:22 · 460 阅读 · 0 评论 -
Distributed Systems-选主与同步
在上一篇文章中讨论了leader选举对于基本Paxos算法在实际工程应用中的必要性,这一篇文章首先结合raft的选举算法谈谈leader选举的实质和常用方法,然后结合raft算法选举后的日志恢复以及《Paxos Made Simple》里lamport勾勒的multi-paxos的日志恢复来详细分析一下选主后要做的两件重要事情以及俩算法在这块的差异。1.raft的选主算法以及选主算法的实质前面一篇文原创 2016-03-10 21:28:43 · 800 阅读 · 0 评论 -
Distributed Systems-一致性协议背景介绍及Paxos算法的推导
Paxos算法无疑是分布式系统理论中的经典,由于很多论文、博客都没有详细分析算法的背景以及实际中应用会产生的非常多的细节问题,所以导致很难理解,或者说很难完整理解,实现和测试则是更繁杂。本文主要基于自己的理解,以一种前因后果的较逻辑也较明白(非形式化)的方式来重新推导一遍Paxos算法,这里主要指basic paxos,而不是其他变形比如multi-paxos以及其他leader-based的分布式原创 2016-03-08 19:09:51 · 1337 阅读 · 0 评论 -
Linux内核-文件系统-挂载流程分析
1.根文件系统的挂载mount_root[init/do_mounts.c] create_dev(“/dev/root”, ROOT_DEV) ==> how to do this sys_unlink(“/dev/root”)sys_mknod(“/dev/root”,…)mount_block_root(“/dev/root”, flags) get_fs_names -> c原创 2015-09-13 21:31:09 · 1327 阅读 · 0 评论 -
Linux内核-协议栈-主要函数调用栈
本文主要记录Linux协议栈相关的主要系统调用的一些主要的函数调用栈,备忘。目前添加socket/connect1.sys_socketbsd socket layer=> sys_create net/socket.c=> socket_create net/socket.c=> __socket_create net/socket.c=> sock_alloc net/socket.cine原创 2016-03-26 23:29:43 · 1058 阅读 · 0 评论 -
Paper Reading - Large-scale cluster management at Google with Borg
0. Abstract It achieves high utilization by combining admission control, efficient task-packing, over-commitment, and machine sharing with process-level performance isolation最重要的三点:装箱与调度算法,资源的抢占/rec原创 2017-04-01 10:53:10 · 745 阅读 · 0 评论