- 博客(48)
- 资源 (4)
- 收藏
- 关注
原创 分享最近我们团队对GFS脑裂的分析 - 感谢陈方县同学
1 glusterfsreplica脑裂分析1.1 glusterfs replica io流程glusterfs通过对replica卷的所有子卷写相同的数据实现冗余功能。当glusterfs的客户端对replica卷有任何写操作(包括数据与元数据)时,glusterfs通过对所有的子卷加锁进行同步。glusterfs的client每次对server端做操作,都需要经
2014-06-12 10:47:26
2154
原创 集群存储系统IO路径入口与出口的阀门控制
IO路径是存储系统的数据通道,入口与出口要有可控的阀门机制,有时候入口也是出口,特别是在分布式集群中 脑裂的问题 需要它的支撑。 内核中相关的 点 1. 文件系统VFS层的freeze功能;2.dm 尤其是MP这块有queue suspend功能;这块在多路径路径全部故障时可以有效管理IO请求,路径恢复后重新发送;3.MD这块的suspend支持;
2013-10-29 10:59:03
1232
原创 奇虎360可以干大事
最近又有朋友加入360,恭喜一下,360的管理架构与facebook如出一辙,摘录转载一篇相关的报道吧,我一直看好360,它可以干大事。 http://tech.sina.com.cn/i/2013-09-02/09298698924.shtml刚刚跨入市值100亿美元俱乐部的奇虎360(81.9, -2.84, -3.35%), 作为一家互联网安全与服务公司,到底是如何管理和运营的
2013-10-29 08:40:39
1494
原创 阶段总结
分布式集群存储 一定要保证客户应用业务连续正常运行,包括对故障很强的容忍抵抗能力,特别是应用计算节点不能访问存储系统时,也要保证应用业务在故障恢复后立刻恢复运行;openstack/cf+gfs 还是 openstack+ceph, 保证客户服务质量是关键。
2013-10-29 08:36:37
834
原创 TaLK理念
一直想说一下这个工作室的理念,其实 也是 自己个人的一种 分享规划,计算机这块 如果与 国外的学校相比,可能课程以及动手这块 还是有差距的,算法 是一个方面,但是我们不能 一头扎在算法、数据结构上,试问 我们经历大学、研究生的学业,真的 熟悉掌握 计算机系统原理吗?所以 也是以个人的经验为基础,分享一下 我们需要学习linux内核的 必要性,对系统的把握,对架构 以及 OS运行机制的
2013-08-27 08:57:14
941
原创 应该选择什么样的公司
科技类的公司,个人觉得首先看 公司的战略规划 是否 紧跟当前时代热点方向,同时要有自己的创新 以及 过硬的产品渠道优势。不要太刻意看 公司的 外在品牌,因为 品牌这个概念,需要我们有产品的经验能力才能去判断,需要我们主动去 分析判断 一些可能在我们自己眼中甚至大部分眼中是 低调的公司,这样 才能加强我们的判断和选择能力。起步阶段,个人建议可以选择 创业公司磨练,尤其选择 海龟人士创
2013-08-27 08:50:35
1047
原创 原来如此(glusterfs afr数据不一致问题定位)
接上篇“又忙碌了一个月“,终于定位在本地文件系统xfs的预分配策略上,导致glusterfs afr配置下,文件的预分配块占用的磁盘空间不一致,但是通过进一步md5验证,数据是没问题的,为了进一步确认,在其他机器上再次验证了一下,至少centos6.4的xfs 在不同套本地文件系统下,在长时间写入大量文件后,对于大文件的磁盘块预分配是不同的,也就是我们会看到同样的副本,在不同的机器本地文件系统xf
2013-08-07 08:29:26
2033
原创 又忙碌了一个月
技术的积累和实战总是充满惊喜,转眼一个月没写博客了,这个要自我提醒一下。最近一直在深入研究glusterfs 在脑裂情况下的数据不一致问题(需要解决的一个实际生产问题),也对比了一下一直密切跟踪的ceph,再次对 对象存储有了更进一步的认识,还是回到gluster上来吧,核心功能机制在客户端处理,存储间副本的修复由self-heal机制被动触发,这块在存储服务器时间不一致时,网络间故障如果发生
2013-08-02 09:23:15
997
转载 rackspace: openstack
Rackspace:开源OpenStack前景堪比LinuxRackspace CEOLanham Napier市场的分散性导致客户难以选择云计算厂商和合作伙伴,一旦做错决定将不得不转移到新的云上进行重新构建。这对于一些大的公司来说,确实是一个挑战。鉴于上述原因,云需要一个开源的操作系统,开源云可以避免被锁的问题。而OpenStack就是这样一个开源的云操作系统。OpenStack
2013-07-02 10:01:19
1031
原创 辗转相除
辗转相除辗转相除, 又名欧几里德算法(Euclidean algorithm)乃求两个正整数之最大公因子的算法。它是已知最古老的算法, 其可追溯至前300年。它首次出现于欧几里德的《几何原本》(第VII卷,命题i和ii)中,而在中国则可以追溯至东汉出现的《九章算术》。它并不需要把二数作质因子分解。证明:设两数为a、b(b<a),求它们最大公约数(a、b)的步骤如下:
2013-06-28 12:45:03
830
原创 open-iscsi/scst 追踪四(网络字节序)(转载有修改)
字节序问题 --- Endianness1.1. Processers所有的字节序问题都要追踪到CPU上,不管是GeneralCPU 还是 Special CPU ,CPU决定了存储的字节排列顺序问题,即字节序(Endianness)。通用CPU领域以intel代表的x86家族历来以little-endian为主,而POWER-PC则主推big-endian设计的CPU;对于
2013-06-28 12:40:18
1233
转载 The Linux multipath implementation (转)
The Linux multipath implementation Original author : Christophe VaroquiCreation : Feb 2004Last update : Dec 2010Introduction The most common multipathed environment today is a Fibr
2013-06-28 10:52:26
995
原创 open-iscsi/scst 追踪三(scsi总线扫描)
open-iscsi注册为一个scsi host driver,我们需要了解scsi这部分设备扫描的原理,剖析了一下。1、写在前面 Scsi总线在扫描磁盘设备后生成的盘符与设备通道之间的关系是不固定的,其最主要的原因是设计者考虑到scsi总线在系统中不会静态、唯一存在,会动态生成,而盘符空间在全局只有一个,因此,盘符与设备通道之间很难实现绑定,至少这种绑定关系会随着系统中s
2013-06-28 10:46:51
2159
翻译 btrfs:B树经典论文(转)
B-Trees: Balanced Tree Data Structures Table of Contents:IntroductionStructure of B-TreesOperations on B-TreesExamplesApplicationsWorks CitedUseful Links
2013-06-25 10:40:39
1917
1
转载 grub2分析(转)
想了解操作系统bootloader过程原理的可以看过来,又勾起了一些项目回忆。。。转:一. 从开机到OS加载的简要流程: 机器加电,通过bios的0x19功能调用,加载mbr(也就是boot.img)到0x7c00位置,并跳到该地址开始执行boot.img,它会读入diskboot.img到0x8000处(也是512个字节的大小),随后跳到0x8000开始执行dis
2013-06-24 12:26:02
2441
原创 手稿核心章节技术架构 - md5 位图机制
1 Bitmap实现1.1 bitmap原理简单的说,bitmap的工作原理就是使用一个位图,每个位对应md设备的一个数据块,在md设备有数据写入时,设置该数据块对应的位,等待写入完成后,再清除该数据块对应的位。当需要进行数据同步/恢复时,参照bitmap的位图,只有设置了位对应的数据块才需要进行同步/恢复操作。1.2 核心数据结构1.2.1 Bitmap_info结构
2013-06-20 10:37:33
1465
原创 手稿基础章节素材整理
(完善中。。。)1. 存储精选DISK(scsi标准)->RAID->DAS->NAS->SAN2.系统管理top/atop/ps/iostat/netstat/filespyiozone/iometer/ltp/postmark3.内核基础修炼(定制编译、块设备、IO调度器)定制编译、块设备参考 “内核修炼一、二”差基于dead
2013-06-19 11:07:14
754
原创 手稿核心章节技术架构
(完善中。。。)1. dm-cacheio路径数据流缓存管理机制2.glusterfs核心用户态进程通信结构文件创建、删除、读、写、属性目录创建、删除dht剖析rep剖析3.md位图机制raid5算法(对称方式及rmw)4.ext4/jbd2磁盘layout协议日志数据、元数据、数据流
2013-06-19 10:57:08
797
原创 集群存储技术手稿计划 - “大话存储,我来实战”
起草了一篇大纲架构,计划陆续填充内容及实战技术,希望可以逐渐积累成型出一版手稿。1. 存储基础精炼畅谈学习1.1 我谈存储1.2去机房中我们应该看到和熟悉哪些设备2. 集群存储linux应用管理实战技能1.1 基本的系统管理操作1.2 测试技术3.操作系统学习的重要性 4.内核修炼一:快速熟练定制编译1.1 快捷实战内核定制编
2013-06-18 08:59:28
973
转载 几大存储公司的文件系统
Dell Fluid File System (FS) Dell Fluid FS是戴尔2009年年底收购Exanet技术而来。Fluid FS后端支持不同的戴尔存储阵列,包括PowerVault、EqualLogic和Compellent。许多功能评分,如容量、性能和可靠性等,取决于FluidFS后端的存储阵列。其中PowerVault解决方案在实际使用情况下是面向低成本的备份和归档,而C
2013-06-17 13:06:56
2815
原创 内存脏数据下刷(linux2.6.18/linux.2.6.32)剖析
1 前言BDI机制原本主要是用于检测磁盘的繁忙程度等作用,从2.6.19内核开始,将此部分功能整合到了mm/backing_dev.c中,一直到2.6.31内核为止,其功能也只是在不段的完善,但是脏数据的下刷依然是依靠pdflush。自2.6.32内核开始,彻底取消了pdflush,而是将此部分功能添加到BDI机制中,并且是为每个设备创建了一个名为“flush-设备主次设备号”的线程,用于
2013-06-17 11:40:37
4332
原创 open-iscsi/scst 追踪二 (open-iscsi 用户态管理系统技术架构分析)
1. 整体架构 1.1. 命名UNIX域套接字UNIX域套接字用于同一台机器上的运行的进程之间的通信,它是双向的、一种高效的IPC。UNIX域套接字可以使用标准的套接字接接口创建。1.2. netlinknetlink套接字是用以实现用户进程与内核进程通信的一种特殊的进程
2013-06-17 11:29:26
2648
翻译 btrfs元数据设计(转设计文档,可以基础性的看清楚其扩展b+树的数据结构设计)
Directories and subvolumes A directory's keys simply list all of the files contained within thedirectory, twice. The first list consists of a sequence of DIR_ITEM keys,ordered by the hash of the ite
2013-06-17 10:40:13
2035
原创 内核IO电梯调度算法-Deadline追踪
1 电梯算法之deadline1.1简介deadline,顾名思义是说有个最后期限控制。通过调研也发现对于每一个读请求和写请求都会赋予一个时间戳,用来控制一个最大的延迟处理时间点。超过该时间戳是一定要处理的。它是通过一个链表(first in first out)来将这些request串联起来的。但是如果一直这样按照链表的顺序来处理,又会造成磁盘抖动的问题。所以又很灵巧的引入了一个b
2013-06-14 13:30:30
1647
原创 linux 按需预读策略追踪(源码参考centos6.0内核源码)
1 按需预读我理解的按需预读和传统预读根本不同的地方,在于传统预读是按照请求来触发预取,而按需预读是按照访问的页面是否存在来触发预取。这也正是按需这两个字的含义。当访问页面不存在时,按需预读才开始触发预读。同时为了更好的解决并发顺序流的访问,引入了顺序流的概念。这个顺序流是空间连续,而非时间连续。在每个顺序流中都会选出一个位置,当IO访问到该页面时,便会触发预读。这样每个顺序流都有属于
2013-06-14 13:20:40
1573
原创 linux ftrace追踪一(基本技术结构粗略剖析)
一 文档说明本文为2.6.32下trace机制(以下简称trace)的调研文档。trace实现的基础为tracepoint机制,存放数据的缓存实现为ring buffer。阅读代码路径:samples/tracepointskernel/traceinclude/trace二 tracepointtracepoint是实现ftrace架构的基础。在内核代码路径s
2013-06-14 13:05:44
6005
原创 块设备驱动实战基础篇四 (逐渐成型,加入ioctl通信机制)
1.6介绍一种内核与用户空间通信的方法-misc设备ioctl机制块设备驱动开发中往往需要配合用户态的管理程序工具,管理我们的块设备,此时我们需要涉及用户空间程序与块设备通信的方法,ioctl机制就是接下来需要学习和实战的,通过ioctl机制,用户态负责发送各种命令给内核驱动;内核态接收用户态发送的命令,并根据命令执行相应的动作,如下图所示。 ioctl提供用户态程序使用内核态函数
2013-06-14 11:19:26
1762
1
原创 块设备驱动实战基础篇三 (BIO请求回调机制)
1.5 块设备请求返回处理回调机制 本节我们继续完善1.4节中的代码,在上节我们完成了请求的过滤转发,那么请求被磁盘处理完成后返回回来的路径处理是怎样的,本节我们继续带着这样的问题再一次完善我们的驱动程序,通过本节的学习,我们能够真正掌握请求处理,转发过滤,请求完成后回调处理机制的完整学习。 先给出完善后的IO架构图,我们对比一下1.4节最后给出的图有何区别:相比1.4节,
2013-06-14 11:16:41
2245
原创 块设备驱动实战基础篇二 (继续完善170行过滤驱动代码至200行)
1.3块设备驱动关键数据结构及函数API详细剖析经过上节四个步骤我们已经熟悉并实战了一个最基本的过滤块设备驱动的设计技巧,我们这一节先不继续实战,我们本节把上节170行代码中接触到的块设备核心数据结构和API接口剖析一下,把这部分掌握和理解一下。 我们把上节涉及的六个数据结构和相关API接口罗列一下: 块设备核心数据结构gendisk块设备仓库
2013-06-14 11:08:48
2012
原创 块设备驱动实战基础篇一 (170行代码构建一个逻辑块设备驱动)
1 内核块设备驱动基础学习与实战1.1 设备驱动IO架构初探 操作系统是如何将数据读到缓冲区的,发生了什么?我们带着这样的问题,粗略走一下read调用系统过程,希望这个初探,可以唤起大家研究操作系统内核的好奇心和兴趣,并以此为例,让我们先初步对请求在过滤块设备驱动中的处理过程有个大概印象和了解。 块设备在整个Linux中应用的总体结构图如下: 从上图可以看出,块
2013-06-14 10:54:00
2507
原创 浅谈切入内核学习的方法 - 从块设备驱动入手
接着“内核修炼一”我们开始真正的内核技术实战学习,个人觉得内核学习从实战入手,直接参与内核代码开发,实战是最好的,否则会长期停留在理论学习的抽象边界上,最近也持续思考,并与北邮的部分学生进行交流,根据这么多年积累的项目经验总结了一下,我们从块设备驱动入手进行内核学习,这里我们从此会反复强调IO的概念,这也是存储技术的核心概念。 我们再看一下操作系统应用层/内核层的架构图
2013-06-14 10:43:54
1393
原创 将第三方内核模块打入内核
1 将第三方内核模块(talk模块)打进内核1.1 预备知识开头我们已经知道如何写一个最简单的内核talk模块,并且简单介绍了内核模块灵活的动态可加载技术,但是往往内核会将许多重要的核心模块默认集成在内核中,让内核启动时自动随着内核的加载而加载,这就涉及到了我们如何将自己开发的第三方模块打入内核,对于一些嵌入式系统,它们往往是只读的,不允许你事后(linux启动后)再往系统里动态加载内
2013-06-14 10:30:21
1547
1
原创 kernelRPM包安装与制作
1 KernelRPM包制作与安装内核只有通过以rpm包的形式才能更广泛的发布给所有用户进行自由安装,否则只是在自己本机进行了编译安装,其它的用户是不能使用你的内核的,rpm包就像windows的应用程序安装文件一样,你通过制作rpm包,把自己定制好的内核以一种通用的便捷的方式共享开来。上面章节我们已经熟悉并举例实战了如何进行内核定制与编译,如何给内核打补丁,并且专门在centos6.2内
2013-06-14 10:29:19
3794
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人