
存储
文章平均质量分 90
存储系统软件是一个复杂的系统软件工程,需要严谨的理论架构和工程化来保证数据安全性和系统稳定性,存储的底线和红线是不允许丢失数据。存储算法理论、系统架构、硬件结构、操作系统、软件工程等各个环节都非常复杂。系统复杂性决定了存储研发不可能是一件容易的事,对于存储新产品技术要在无人区不断摸索和试错,对理论创
souy_c
这个作者很懒,什么都没留下…
展开
-
DAOS整体设计分析 (二)
DAOS 使用校验和提供端到端数据完整性,以更好地确保用户数据不会静默损坏。在写入或更新期间,DAOS 客户端库 (libdaos.so) 在通过网络传输之前计算校验和并将其附加到 RPC 消息。 根据配置,DAOS 服务器可能会或可能不会计算校验和来验证接收到的数据。原创 2022-09-05 16:49:20 · 1307 阅读 · 0 评论 -
GFS2+ISCSI+CLVM分布式文件系统集群搭建记录
一、环境信息Centos7系统文件系统服务器两台 IP: 10.243.31.9 node3 IP: 10.243.31.10 node4存储服务器 IP: 10.243.31.13 store二、机器准备 1、[node3&node4]增加机器别名:/etc/hosts 2、[node3&node4]关闭防火墙systemctl stop firewalld.service3、[node3&node4]关闭 Network...原创 2021-01-28 11:41:54 · 2058 阅读 · 2 评论 -
Openstack Nova与Hypervisor对接
OpenStack是公有云的标准云OS框架,目前已经得到各个云厂商支持和客户的认可,很多云解决方案提供商都把云战略转向OpenStack,如传统厂商方案 SoftLayer、Helion、FusionSphere、Suse和Redhat等,以及新型云服务商的方案,如RackSpace、Miratis、Nebula、ClouScaling、MetaCloud、PistonCloud、Canonical等。今天我们来讨论一下OpenStack如何与底层Hypervisor对接和技术原理。OpenStack和原创 2020-11-29 23:04:20 · 2405 阅读 · 0 评论 -
基于分布式存储的文件系统4k对齐写优化
测试工具:vdbench磁盘类型:iscsi Initiator、Target(TGTD)文件系统:xfs后端磁盘的io粒度是4k,实际生产环境中发现有许多512字节的数据写到存储后端,512字节的写触发写惩罚,需要先补齐4k然后再写下去。解决该问题有几种方法:方法1:设置lun的物理扇区大小当将一个卷映射到lun时默认的物理扇区是512字节:加lun时通过--blocksize 4096 参数指定物理扇区为4k,就可以保证lun之下收到的请求不会小于4k。方法2:.原创 2020-11-29 22:27:04 · 1157 阅读 · 1 评论 -
PacificA:基于日志复制的分布式存储技术论文
1 概要介绍复制协议是一个实用复制机制的关键,简单性和模块化是构建实用系统的关键因素。本文的复制框架包含了以下特性:(1)复制组配置管理与数据复制分离,Paxos用于管理配置,主/备模式用于数据复制。(2)分散监控用来检测故障并触发重新配置,监控流量遵循数据复制的通信模式。(3)通用的抽象模型,该模型澄清了正确性并允许不同设计实例。本文描述的基于日志的分布式系统和以前的系统(如Boxwood和Bigtable)使用的新复制方案进行对比。本文描述的方案在简单性方面具有优势,因为不依赖单..原创 2020-11-13 15:34:57 · 511 阅读 · 0 评论 -
一种多副本复制算法----法定数共识算法
一种阻止分区中的事务产生不一致的方法是制定一个规则,使操作只能在某一个分区中进行。由于不同分区中的副本管理器不能相互通信,因此每一个分区中的副本管理器子组必须独立地决定它们是否能进行操作。法定数是一个副本管理器子组,它的大小使它具有执行操作的权利。例如,如果拥有大多数成员是一个标准的话,那么含大多数成员的子组可形成一个法定组,因为其他的子组不会拥有大多数成员在一个法定数共识的复制方案中,一个逻辑对象上的更新操作可以成功地被副本管理器组一个子组完成。该子组的其他成员将拥有对象的过时的拷贝。版本号或时间戳可原创 2020-10-09 19:44:57 · 987 阅读 · 0 评论 -
kubernetes 存储插件CSI开发指导
1.K8s 的持久化存储支持在支持持久化存储方面,K8s 提供了内嵌原生 Driver 的方式连接外部的常见存储系统例如 NFS、iSCSI、CephFS、RBD 等来满足不同业务的需求。但由于存储生态本身也在不断演进,使用 K8s 内嵌的方式来支持不断变化的存储系统在成本和时效上都会对 K8s 项目自身带来巨大的挑战。所以和其他服务管理系统一样,K8s 逐渐的将存储系统的具体实现从主项目中分离出来,通过定义接口的方式允许第三方厂商自行接入存储服务。在这个道路上也经历了两个阶段:Flex Vol原创 2020-09-19 14:45:25 · 3023 阅读 · 1 评论 -
HDFS概述
HDFS作为一个分布式文件系统,具有高容错的特点,它可以部署在廉价的通用硬件上,提供高吞吐率的数据访问,适合那些需要处理海量数据集的应用程序。HDFS没有遵循可移植操作系统接口(Portable Operating System Interface, POSIX)的要求,不支持"ls"或"cp"这样的标准UNIX命令,也不支持如fopen()和fread()这样的文件读写方法,而是提供了一套特有的、基于Hadoop抽象文件系统的API,支持以流的形式访问文件系统中的数据。HDFS主要特性HDFS的主原创 2020-09-06 14:52:26 · 514 阅读 · 0 评论 -
mapreduce 任务task处理流程
在MapReduce计算框架中,一个应用程序被划分成Map和Reduce两个计算阶段,它们分别由一个或者多个Map Task和Reduce Task组成。其中,每个Map Task处理输入数据集合中的一片数据(InputSplit),并将产生的若干个数据片段写到本地磁盘上,而Reduce Task则从每个Map Task上远程拷贝相应的数据片段,经分组聚集和归约后,将结果写到HDFS上作为最终结果,如下图所示。总体上看,Map Task与Reduce Task之间的数据传输采用了pull模型。为了能够容错,原创 2020-09-19 14:02:43 · 1484 阅读 · 0 评论 -
mapreduce 编程模型
MapReduce是在总结大量应用的共同特点的基础上抽象出来的分布式计算框架,它适用的应用场景往往具有一个共同的特点:任务可被分解成相互独立的子问题。基于该特点,MapReduce编程模型给出了其分布式编程方法,共分5个步骤:1)迭代(iteration)。遍历输入数据,并将之解析成key/value对。2)将输入key/value对映射(map)成另外一些key/value对。3)依据key对中间数据进行分组(grouping)。4)以组为单位对数据进行归约(reduce)。5)迭代。原创 2020-09-05 15:06:22 · 2141 阅读 · 0 评论 -
hadoop-mapreduce基本架构
MapReduce是一个分布式计算框架,主要由两部分组成:编程模型和运行时环境。其中,编程模型为用户提供了非常易用的编程接口,用户只需要像编写串行程序一样实现几个简单的函数即可实现一个分布式程序,而其他比较复杂的工作,如节点间的通信、节点失效、数据切分等,全部由MapReduce运行时环境完成.MapReduce设计目标,主要有以下几个:易于编程:传统的分布式程序设计(如MPI)非常复杂,用户需要关注的细节非常多,比如数据分片、数据传输、节点间通信等,因而设计分布式程序的门槛非常高。Hadoop原创 2020-09-05 14:36:36 · 3327 阅读 · 0 评论 -
分布式系统一致性设计---乐观并发控制和悲观并发控制
锁的缺点传统的锁机制有许多固有的不足,加锁的缺点总结如下(1)、锁的维护带来的开销,这些开销在不支持对共享数据并发访问的系统中是没有的。即使是只读事务(查询),它不可能改变数据的完整性,通常仍然需要利用锁来保证数据在读取时不会被其他事务修改。但是锁只在最坏的情况下才起作用。例如,有两个并发执行的客户进程将n个对象的值增1。如果这两个客户程序同时开始执行并运行相同的时间,但它们访问对象的次序不相关,并使用独立的事务来访问并增加对象的值,那么这两个程序同时访问到同一个对象的概率只有1/n,因此每n个原创 2020-08-07 16:49:48 · 1417 阅读 · 2 评论 -
分布式系统一致性概念及设计方法
CAP分布式系统,尤其是分布式存储系统,在进行设计时有许多方面需要考虑,其中绕不开的一个问题就是CAP,CAP定理描述如下:C(Consistency)一致性:也就是所有用户看到的数据是一样的。A(Availability)可用性:总是能够在合理的时间内返回合理的响应。P(Partition tolerance)分区容错性:当出现网络分区后,系统能够继续工作。C、A、P三者之间不不可兼得,分布式系统的设计是就要思考对他们如果取舍。在分布式系统中,网络无法100%可靠,网络分区其实是一原创 2020-08-07 14:25:09 · 620 阅读 · 0 评论 -
Docker中存储应用
在什么场景下使用虚拟机,在什么场景下使用物理机。这些问题并没有一个统一的标准答案,因为它们都有自身最适用的场景,在此场景下,它们都是不可替代的。原本是没有虚拟机的,所有的应用都直接运行在物理机上,计算和存储资源都难以增减,要么资源不够用,要么就是把过剩的资源浪费掉,所以现在虚拟机被广泛地使用,而物理机的使用场景被极大地压缩到了像数据库系统这样的特殊应用上。原本也没有容器,大部分的应用都运行在虚拟机上,只有少部分特殊应用仍然运行在物理机上。但现在所有的虚拟机技术方案,都无法回避两个主要的问题,一个是H原创 2020-08-01 15:54:17 · 419 阅读 · 0 评论 -
NVDIMM为存储加速
随着存储技术的不断发展及人们对存储性能的不懈追求,高性能存储开始探索向内存通道的迁移。在这样的背景下,NVDIMM(Non-Volatile Dual In-Line Memory Module)技术便应运而生了。NVDIMM是一种可以随机访问的非易失内存。非易失内存是指即使在不通电的情况下数据也不会消失,即在计算机掉电、系统崩溃和正常关机的情况下,依然可以保留数据。NVDIMM同时表明它使用的封装是双内联存储器模块封装,与标准双内联存储器模块插槽兼容,并且能通过标准的DRAM硬件接口进行通信。使用原创 2020-07-20 08:55:09 · 474 阅读 · 0 评论 -
SDS软件定义存储
计算机发展到今天,软件定义已经是一种潮流,前有软件定义网络,后有软件定义存储。对于软件定义存储来说,是随着当年EMC在EMC World上发布的软件定义存储战略迅速成为业界热点的。软件定义存储将硬件存储资源整合起来,并通过软件编程的方式来定义这些资源,借此,用户能够根据一定的策略来配置和使用存储服务。另外,随着存储系统的多样化,如果依然对不同的存储使用不同的软件,效率会非常低,并且会增加运维的复杂度。而且不同的存储软件之间不能互通,这也会影响存储的调度。于是急需一个非常高效的、统一的存储软件,用于管原创 2020-07-20 08:54:55 · 1860 阅读 · 0 评论 -
存储加速库ISA
ISA-L是一套在IA架构上加速算法执行的开源函数库,目的在于解决特定存储市场的计算需求。ISA-L底层函数都是使用汇编语言代码编写的,通过使用高效的SIMD指令和专用指令,最大化地利用CPU的微架构来加速存储算法的计算过程。通过源码包中的C示例函数,ISA-L可以非常容易地理解并整合到客户的软件系统中。ISA-L可以应用到多种操作系统中,它通过了在Linux、BSD及Windows Server上的测试,全面支持Intel 64位硬件平台。ISA-L中的算法函数覆盖了数据保护、数据安全、数据完原创 2020-07-20 08:54:25 · 1496 阅读 · 0 评论 -
存储底线--数据安全及主流方法
在英文里,有两个单词都表示“安全”,一个是Safety,另一个是Security。所谓Safety,是指数据不丢失的意思。这是目前云存储解决的主要问题,我们可以把数据放在云端,然后由所有的终端设备通过云端来共享。从专业角度来说,这又叫可用性,意思是,数据总是可用的,基本不会丢失。所谓Security,是指数据的隐私和不泄露。高可用方案在Google I/O大会上对目前主要的高可用方案做过一个比较,如图1所示。1)备份备份应该是常见也是最容易想到的方案,备份的优点是延迟低、吞吐量高原创 2020-07-18 16:01:39 · 500 阅读 · 0 评论 -
linux io流:块层
块层(Block Layer)对内核来说,管理块设备要比管理字符设备复杂得多。因为块设备访问时,需要在介质的不同区间前后移动,而字符设备访问时仅仅需要控制一个位置,就是当前位置。所以内核没有提供一个专门的子系统来管理字符设备,但是却有一个专门的子系统来管理块设备。这不仅仅是因为块设备的复杂度远远高于字符设备,更重要的原因是块设备的访问性能对系统的影响很大,对硬盘每多一分利用都会对系统的整体性能带来提升,其效果要远远比提高键盘的吞吐速度好得多。块设备上的操作涉及内核中的多个组成部分,内核块设备I/O流原创 2020-07-18 15:49:29 · 774 阅读 · 0 评论 -
linux io流:文件系统和BTRFS简介
Linux文件系统的体系结构是一个对复杂系统进行抽象化的有趣例子。通过使用一组通用的API函数,Linux就可以在多种存储设备上支持多种文件系统,这使得它拥有了与其他操作系统和谐共存的能力。文件系统概述文件是文件系统中最核心的概念,Linux中文件的概念并不局限于普通的磁盘文件,而是指由字节序列构成的信息载体,I/O设备、socket等也被包括在内。因为有了文件的存在,所以需要衍生出文件系统去进行组织和管理文件,而为了支持各种各样不同的文件系统,所以有了虚拟文件系统的出现。文件系统是一.原创 2020-07-18 15:43:28 · 1000 阅读 · 0 评论 -
分布式存储ceph:Qos
QoS最早起源于网络通信,是指一个通信网络能够利用各种基础技术,为特定应用提供更好的服务能力。简单来说就是如何设置规则,共享资源。随着Ceph的成熟,特别是在OpenStack将Ceph作为存储后端之后,Ceph的QoS就变得更加重要了。前端QoS前端QoS是指在客户端实现QoS,是最简单、最常用的,我们以OpenStack Cinder+ Ceph RBD为例进行说明。虽然Ceph RBD目前还不支持QoS,但是OpenStack可以提供前端QoS,它提供如下参数。· total_b.原创 2020-07-18 15:36:31 · 2478 阅读 · 0 评论 -
分布式存储ceph:加密和压缩
加密加密是将用户的明文数据通过加密,变成加密数据,在数据被窃取的时候起到防护作用。对于Ceph来说,从应用程序到存储设备的数据链路上来看,根据对数据加密的位置,现阶段主要有以下几种加密方式。· 客户端加密:这包括应用程序本身的加密,以及更为广泛的通用加密模块。如Linux内核的dmcrypt。这些加密都在客户端进行,意味着在网络上传送的都是加密数据,存储的也都是加密数据。· 存储端加密:数据的加密与解密在存储端进行,存储设备负责管理密钥。在这种方法中,在网络上通过HTTP传递的都是明文数据,想要原创 2020-07-18 15:33:09 · 4419 阅读 · 0 评论 -
分布式存储ceph:可靠性设计
Ceph使用CRUSH算法实现了去中心化,Ceph客户端和OSD守护进程都使用CRUSH算法来有效地计算出对象存储的位置,而不是基于一个中心化的查找表格,而且随着OSD守护进程拓扑的变化,比如有新节点加入或旧节点退出,CRUSH算法会重新在OSD上分布数据,不会由于单个OSD的故障而影响整个集群的存储。Ceph还利用Monitor集群来保证集群结构的高可靠性,Ceph客户端在读/写数据之前,必须与Monitor通信来获得最新的集群运行图的副本。原则上来说,一个Ceph的存储集群可以只使用一个Monito原创 2020-07-18 15:10:12 · 2581 阅读 · 0 评论 -
分布式存储ceph:CRUSH算法
作为一个分布式存储系统,如何合理地分布数据非常重要。Ceph系统的许多特性,如去中心化、易扩展性和负载均衡等都和它采用的CRUSH数据分布算法是密不可分的。经过不断地实践和优化,Ceph作为开源云存储重要的后端之一,被大家认可,这也离不开CRUSH算法的先进设计。CRUSH算法的基本特性为一个分布式存储系统实现数据分布算法不简单,至少需要考虑下述情况。· 实现数据的随机分布,并在读取时能快速索引。· 能够高效地重新分布数据,在设备加入、删除和失效时最小化数据迁移。· 能够根据设备的物理位原创 2020-07-18 15:08:07 · 1556 阅读 · 0 评论 -
分布式存储ceph:后端存储ObjectStore
ObjectStore是Ceph OSD中最重要的概念之一,它完成实际的数据存储,封装了所有对底层存储的I/O操作。I/O请求从客户端发出后,最终会使用ObjectStore提供的API进行相应的处理。ObjectStore也有不同的实现方式,目前主要有FileStore、BlueStore、MemStore、KStore。可以在配置文件中通过osd_objectstore字段来指定ObjectStore的类型。MemStore和元数据主要用于测试,其中MemStore将所有数据全部放在内存中,KSto原创 2020-07-18 15:05:51 · 1419 阅读 · 1 评论 -
分布式存储ceph:对象存储、块存储、文件存储
对象存储严格意义上讲,Ceph只提供对象存储接口,所谓的块存储接口和文件系统存储接口都算是对象存储接口应用程序。不同于传统文件系统提供的open/read/write/close/lseek,对象存储只提供put/get/delete,对象存储的逻辑单元就是对象而不是我们通常概念中的文件。如下图所示,对于Ceph来说,RADOS GW是一个基于librados库构建的对象存储接口,为应用程序提供Ceph存储集群的RESTful网关,这样Ceph就作为Amazon S3和OpenStack Sw...原创 2020-07-18 15:01:33 · 3312 阅读 · 1 评论 -
分布式存储ceph:体系结构
Ceph最初针对的目标应用场景,就是大规模的、分布式的存储系统。Ceph需要很好地适应这样一个大规模存储系统的动态特性。· 存储系统规模的变化:这样大规模的存储系统,往往不是在构建的第一天就能预料到其最终的规模的,甚至根本就不存在最终规模这个概念。只能是随着业务的不断拓展,业务规模的不断扩大,让系统承载越来越大的数据容量。这样系统的规模自然会随之变化,越来越大。· 存储系统中设备的变化:对于一个由成千上万个节点构成的系统,其节点的故障与替换必然是时常出现的情况。而系统一方面要足够可靠,不能使业务受到原创 2020-07-18 14:49:41 · 346 阅读 · 1 评论 -
数据重删------定长重删和不定长(滑动窗口,内容分块)重删算法
块级重删是指将数据流或者文件根据某种方式进行切片(也叫分块),以数据块为单位进行hash计算,以此找到相同的数据块进行删除。块级重删又分为定长重删和变长重删。定长重删定长重删其实很好理解,实现逻辑也比较简单。将要备份的数据以固定长度进行分块,并计算每个分块的hash值(value)。如下图所示,每4个数据进行分块,数据总共被分成了4个切片,计算各个切片的hash值。当数据首次备份时,得到fingerprint1,fingerprint2,fingerprint3,fingerprint4共4个h原创 2020-07-01 11:43:44 · 3500 阅读 · 0 评论 -
数据重删和数据压缩主流技术分析
数据压缩随着计算能力的不断提升,当代社会正在产生越来越巨量的数据,数据压缩也被应用在生活的方方面面,如在网上打开的图片、视频、音频等都是经过压缩的。压缩可以分为无损压缩和有损压缩。无损压缩可以通过压缩文件完全恢复原始文件;而有损压缩则会丢失一部分信息。对于文本、可执行程序的压缩是无损压缩的典型应用场景,因为任何一点信息的缺失都是不被允许的。有损压缩在图片、音频、视频方面被广泛应用,因为人们对于损失的部分信息并不敏感。有损并不意味着信息是被随机丢弃的,而是选择丢弃对恢复影响最小的部分。有损压缩既提高了原创 2020-07-01 11:23:46 · 3536 阅读 · 1 评论 -
spdk探秘-----RPC
SPDK软件库实现了一个基于JSON-RPC 2.0的服务,以允许外部的管理工具动态地配置基于SPDK软件的服务器应用,或使用监控工具动态地获取SPDK应用的运行状态。目前,JSON-RPC是SPDK软件库中最主要的监控管理工具,SPDK软件库中包含的各个组件均有一些相应的RPC方法供用户调用。未来SPDK软件库会增添更多的RPC方法,来提高管理SPDK各个子系统或模块的灵活性,并减少对静态配置的依赖。1.RPC当把整个应用程序散布在互相通信的多个进程中时,一种方式是各个进程可以进行显式的网络编程,原创 2020-06-30 15:41:20 · 2931 阅读 · 0 评论 -
spdk探秘-----vhost 、ISCSI、 NVMe-oF Target
vhost target这里我们主要介绍用SPDK vhost target来加速虚拟机中的I/O,在介绍这个加速方案之前,我们先看看主流的I/O设备虚拟化的方案。· 纯软件模拟:完全利用软件模拟出一些设备给虚拟机使用,主要的工作可以在Simics、Bochs、纯QEMU解决方案中看到。· 半虚拟(Para-Virtualization):主要是一种frontend-backend的模型,在虚拟机中的Guest OS中使用frontend的驱动,Hypervisor中暴露出backend接口。这原创 2020-06-30 15:20:29 · 5869 阅读 · 1 评论 -
spdk探秘-----用户态块层详细介绍
先通过回顾内核态的通用块层来详细介绍SPDK通用块层,包括通用块层的架构、核心数据结构、数据流方面的考量等。最后描述基于通用块层之上的两个特性:一是逻辑卷的支持,基于通用块设备的Blobstore和各种逻辑卷的特性,精简配置(Thin-Provisioned)、快照和克隆等;二是对流量控制的支持,结合SPDK通用块层的优化特性来支持多应用对同一通用块设备的共享。内核通用块层Linux操作系统的设计总体上是需要满足应用程序的普遍需求的,因此在设计模块的时候,考虑更多的是模块的通用性。针对内核块设备驱动原创 2020-06-30 14:13:34 · 1529 阅读 · 0 评论 -
ZIP压缩算法详细分析及解压实例解释----其他关键点补充:deflate树和deflate编码、字符串匹配等
本文之前一篇压缩算法中没提到的一些关键知识点的补充ZIP压缩算法详细分析及解压实例解释deflate树及deflate编码我们知道交换哈夫曼树的任意两颗子树依然还是哈夫曼树,交换的过程虽然会改变叶子结点的huffman编码,但是,不会改变huffman树的带权路径和,也不会改变每个叶子结点的编码长度。基于这一点,我们可以做个更特殊的变换,每一层,让非叶子结点排在右边,叶子结点排在非叶子结点的左边。假设以 6、9、10、11、15、16 建立一颗哈夫曼树: 叶子节点对应的码表就是:...原创 2020-06-19 17:24:10 · 1628 阅读 · 0 评论 -
ZIP压缩算法详细分析及解压实例解释
最近自己实现了一个ZIP压缩数据的解压程序,觉得有必要把ZIP压缩格式进行一下详细总结,数据压缩是一门通信原理和计算机科学都会涉及到的学科,在通信原理中,一般称为信源编码,在计算机科学里,一般称为数据压缩,两者本质上没啥区别,在数学家看来,都是映射。一方面在进行通信的时候,有必要将待传输的数据进行压缩,以减少带宽需求;另一方面,计算机存储数据的时候,为了减少磁盘容量需求,也会将文件进行压缩,尽管现在的网络带宽越来越高,压缩已经不像90年代初那个时候那么迫切,但在很多场合下仍然需要,其中一个原因是压缩后的数据转载 2020-06-19 00:16:46 · 1764 阅读 · 1 评论 -
qos----令牌桶算法
令牌桶算法一般指的是单/双速三色标记法。srTCM的英文全称是Single Rate Three Color Marker,单速率三颜色标记该算法要预先在系统中设定三个参数,三个参数如下:Committed Information Rate(CIR),提交信息率。 Committed Burst Size(CBS),提交Burst大小。 Excess Burst Size(EBS),超量Burst大小。CIR用于表示每秒IP包的字节数。CBS和EBS以字节为单位。必须被设置。推荐值:它们之原创 2020-06-14 16:02:25 · 2309 阅读 · 0 评论 -
spdk探秘-----reduce介绍
SPDK的reduce块压缩方案基于使用ssd存储的压缩块,如果不是ssd磁盘也没必要使用压缩功能。压缩过程会产生元数据,元数据也需要持久化保存。该元数据用于记录逻辑空间到ssd盘上存储压缩数据的映射。数据压缩功能对外体现为一个压缩的块设备bdev,该bdev和一般的bdev用法并无二致,用户的io通过这个压缩bdev后数据会被压缩,然后写入后端存储设备中。压缩bdev的后存储必须是支持精简配置的存储设备,如果不支持精简配置即使经过压缩效果也不会很明显后端存储设备的大小必须适合最坏的情况,即没有数据原创 2020-06-13 15:33:23 · 582 阅读 · 0 评论 -
spdk探秘-----块设备开发指导
这里的块设备是一种存储设备,它支持在固定大小的块中读写数据。这些块通常是512或4096字节。这些设备可能是软件中的逻辑结构,或者对应于像NVMe ssd这样的物理设备。通用库的公共头文件是bdev.h,它是与任何类型的块设备交互所需的全部API。除了为所有块设备提供一个通用的抽象之外,bdev层还提供了许多有用的特性:1、I/O请求自动排队,以响应队列满或内存不足的情况2、热删除支持,即使有I/O流量时。3、I/O统计信息,如带宽和延迟4、设备重启和I/O超时跟踪struct原创 2020-06-13 15:22:19 · 1771 阅读 · 0 评论 -
spdk探秘-----基本框架及bdev范例分析
Spdk框架介绍存储性能开发工具包(SPDK)提供了一组工具和库,用于编写高性能,可伸缩的用户模式存储应用程序。它通过使用一些关键技术实现了高性能:(1)、将所有必需的驱动程序移动到用户空间,这样可以避免系统调用并启用应用程序的零拷贝访问。(2)、轮询硬件用于完成而不是依赖中断,这降低了总延迟和延迟差异。(3)、避免I / O路径中的加锁方式来进行线程间的通信,而是依赖于消息传递。SPDK的基石是用户空间,轮询模式,异步,无锁NVMe驱动程序。这提供了从用户空间应用程序直接到SSD的零拷原创 2020-06-13 15:15:59 · 6531 阅读 · 1 评论 -
超融合存储探秘
让我们一起看一下传统虚拟化, 分布式存储架构下的计算环境下的系统体系结构,如下图所示:传统存储的特点是存储集中化,分布式存储已经做到了去集中化,可以将存储节点分散开。但是不管传统存储还是分布式存储在和计算节点向配合使用时都是独立开来,典型应用如ceph和openstack的配合。总的来说这种计算存储分离的结构有几种缺点:1,存储资源集中化,很难随着计算资源扩展而扩展。特别是采用VNX这种Scale Up的存储系统,无法适应数据中心的这种可扩展性需求。2,采用存储与计算分离的这种架构,需要独立原创 2020-06-13 14:59:55 · 1859 阅读 · 0 评论 -
哈夫曼树(Huffman tree)及哈夫曼编码
基本术语1、路径和路径长度在一棵树中存在着一个节点序列K1,K2,K3…Kj,使得Ki是Ki+1的双亲,则称此节点序列是从K1~Kj的路径,因为树中每个节点只有一个双亲节点,所以他也是这两个之间的唯一路径,从K1~Kj所经过的分支数称为这两个节点之间的路径长度,他等于路径上的节点数减1.2、节点权和带权路径度在许多应用中将树中的节点赋值一个有意义的实数,称此实数为该节点的权,节点的带权路径长度规定为从树根节点到该节点之间的路径长度与该节点权的乘积。3、树的带权路径长度树的带权路径长度原创 2020-06-13 14:52:19 · 10159 阅读 · 0 评论