自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(57)
  • 资源 (2)
  • 收藏
  • 关注

原创 存储人视角:人工智能AI + 大模型

作为一个存储从业者,接触到了一系列术语:AIGC,AGI,大模型,ChatGPT ,NLP,RGA等, --- 这些是何物?他们之间有联系?在阅读了海量资料后,我这个外行算是了解了一点点。当然,因为数据是人工智能的基石,作为一个存储人,最重要的还是希望弄清楚人工智能和我们存储有什么内在关系。

2024-04-18 15:50:40 942

原创 RocksDB compaction优化

困扰Ceph用户(rocksdb使用者)多年的compaction问题终于获得了解决

2022-12-13 17:45:44 216 1

原创 aws s3性能优化实践

使用aws s3 sdk的性能优化实践

2022-12-13 11:16:24 1009

原创 Ceph性能瓶颈分析与优化(rbd篇)

ceph性能优化: rbd场景

2022-12-13 11:10:58 1304 1

原创 Ceph性能瓶颈分析与优化(混合盘篇)

ceph性能优化: 混合盘场景

2022-12-13 11:07:26 1774

原创 [译]Ceph性能优化之CPU核数对性能的影响 - Part 1

Ceph性能优化之CPU核数对性能的影响

2022-12-13 11:03:19 856

原创 一文囊括Ceph所有利器(工具)

ceph的工具很多,包括集群管理与运维,还有性能分析等等。所以本文期望应收尽收所有的工具,也当做自己的一个梳理与总结,当自己需要的时候知道有哪些利器可以使用。由于水平与能力有限,所以可能还有很多好用的利器是漏网之鱼,期待大家不吝告知。

2022-12-09 17:57:10 1394

原创 一名普通Cepher到Curver的转变史

存储(ceph)抑或云计算的圈子其实很小,所以非常荣幸借Curve这样一个平台,能与那些既陌生又熟悉的存储人一起交流与学习。

2022-12-09 17:52:06 488

原创 另辟蹊径Ceph源码分析之4:up_thru解析

写在前面大家都知道,OSDMap的作用之一便是维护Ceph集群osd的状态信息,所以基于此想先提出一个疑问:Ceph集群中有1个osd down了,那么osdmap会发生什么变化?osdmap会更新几次?文章详情见知乎:聊聊Ceph之up_thru来龙去脉分析...

2020-08-04 10:04:52 204

原创 另辟蹊径Ceph源码分析之3:解析ceph pg_temp(ceph 临时pg)

什么是pg_temp与pg_temp相关的数据结构osdmap类成员pg_temp的构建过程osd判断PG是否需要临时osd根据OSDService->pg_temp_wanted,向monitor发送该pg申请临时osd的消息monitor收到消息后,做决议,决议成功后更新OSDMap类的pg_temp成员pg_temp的运用总结什么是pg_temp...

2018-05-10 20:26:46 1944

原创 ceph pg inconsistent不一致,ceph pg repair无效

指令执行后,无效原因分析ceph pg repair这一操作会先进行pg scrub,得到该PG中不一致的对象,然后再进行recovery。 pg scrub时主副本和从副本均会进行资源预约,只有当scrubs_pending + scrubs_active < cct->_conf->osd_max_scrubs时scrub才能继续进行,也即repair才能进行,否则,r...

2018-05-10 20:25:35 3973 1

原创 在无外网环境下安装Ceph(Debian/Ubuntu环境适用)

问题无网络环境下就无法访问拥有Ceph相关包的源,也即无法直接通过apt-get install ceph这种方式安装Ceph包,那这种场景下该怎么安装Ceph呢?解决思路在该无网络的Ceph机器上搭建Ceph本地源解决步骤编译Ceph包可依据http://www.cnblogs.com/yanghc/p/5777401.html 文章中的第一步,编译Ceph相关包。注意: 编包的机器应该能访问外...

2018-02-26 20:34:55 2263

原创 Ceph 对象存储用ec pool,报错WARNING: Retrying failed request:/

Ceph对象存储所需要的pool如下,所有的pool都设置成了EC模式.rgw.buckets;.rgw;.rgw.root;.rgw.control;.rgw.gc;.log;.intent-log;.usage;.users;.users.email;.users.swift;.users.uuid;.users.uid;.rgw.buckets.extra;.rgw.buckets.i...

2018-02-09 15:32:04 1972

原创 另辟蹊径Ceph源码分析之2:min_size是怎么控制io是否能服务的

Ceph中,每个pool可以设置size以及min_size。Size是该pool的副本数,min_size是指当集群出现故障时,PG至少还有min_size副本正常时,可以服务io。那么min_size是怎么控制io是否能服务的呢?min_size控制io是否能服务主要是如下两步:1. 根据min_size设置PG的状态PG在peering状态结束后,也即在PG::RecoveryState::...

2017-11-25 10:07:03 1577

原创 另辟蹊径Ceph源码分析之1:前言

Ceph架构以及Ceph源码的分析网上已经有很多大牛做了相关介绍,并且现在市面上也有两本相当优秀的书去剖析,所以本系列文章不会重复前人的工作,本系列文章希望能够另辟蹊径说说自己所知道的一些小的知识点,写文章的目的也是为了整理自己思路的一个过程,同时也是为了与大家探讨的一个过程。  本系列文章每一小节试图从Ceph中最常见的一个小知识点出发,从而逐步进行分析。

2017-11-25 09:27:17 516 1

原创 TCP/IP协议栈之五---------总结

(1)发送流程1.在sock_sendmsg的上层函数中,会把用户数据拷贝到内核,构造成msghdr结构体。重要:在tcp_sendmsg函数中,会把msghdr结构体中的数据构造到sock的sk_buff队列中。 2.dev_queue_xmit子函数dev->hard_start_xmit用到的net_device是从skb->dev得到的,而skb->dev是在函数ip_fi

2016-10-22 16:04:37 565

原创 TCP/IP协议栈之四---------链路层

4.1接收帧 由硬件驱动在中断处理程序中直接调用netif_rx netif_rx(skb)★     (dev.c/core)----将接收到的消息挂在每CPU的输入队列中    if(netpoll_rx函数与把数据拿走)        return     __skb_queue_tail(把所有收到的数据保存起来)    netif_rx_schedule   

2016-10-22 16:03:02 501

原创 TCP/IP协议栈之三---------网络层

3.1IP发送 网络层中主要的发送函数有以下三个:ip_push_pending_frames,ip_queue_xmit,raw_send_hdrinc     (ip_output.c/ipv4) ip_push_pending_frames★ 将所有pending状态的IP分组组合成一个IP分组,并发送     ip_local_out   ip_queue_

2016-10-22 15:59:37 836

原创 TCP/IP协议栈之二---------运输层

2.1TCP 2.1.1   sys_connect系统调用sys_connect间接调用了tcp_v4_connect tcp_v4_connect  发送SYN (tcp_ipv4.c/ipv4)    ip_route_connect(寻找路由)     __ip_route_output_key     ip_route_output_flow★     t

2016-10-22 15:55:10 607

原创 TCP/IP协议栈之一----------系统调用层

1.1系统调用 send     sys_send(int fd, void __user * buff)         sys_sendto sendto     sys_sendto (intfd, void __user * buff )        sock_sendmsg sendmsg     sys_sendmsg        s

2016-10-22 15:49:49 516

原创 TCMalloc的使用与源码剖析之十--------TCMalloc与APR,ptmalloc的分析比较

一. tcmalloc与APR,ptmalloc的不同点(1)        1.  tcmalloc与APR初始化时都不会预先分配内存。但是tcmalloc申请一个小对象后(最开始时的申请,此时threadCache,CentralCache等结构中还没内存),便会向系统申请几个页面的内存,中央页堆,CentralCache,threadCache会分别标记属于他们的内存。然后再从thr

2016-10-22 11:22:22 1059

原创 TCMalloc的使用与源码剖析之九---------一些未解决的问题

1. 线程缓冲区的大小的确定Tcmallloc官方文档上说线程缓冲区的大小是慢启动的,在源码中找到了它的慢启动代码,但是还没有研究明白这个慢启动到底是一个什么逻辑。程序里有三处地方与该缓冲区大小确定有关,三处地方分别是FetchFromCentralCache,ListTooLong以及Scavenge。具体怎么确定的还没有研究,先做个备忘录而已。恰当线程缓冲区大小至关重要,如果缓冲区

2016-10-22 11:17:21 1124

原创 TCMalloc的使用与源码剖析之八---------TCMalloc内存分配与释放的管理之内存泄露检查

1. tcmalloc程序启动后会设置内存分配hook与内存释放hook(1)在HeapProfilerStart函数中设置了Hook,如下图:上面设置的是内存分配与释放时该调用的Hook,在HeapProfilerStart函数中还设置了其它几个Hook,如下图,暂时还没研究是干啥用的。(2)以AddNewHook为例,说明Hook的后续操作      该函数底层

2016-10-22 10:56:41 3330

原创 TCMalloc的使用与源码剖析之七---------TCMalloc中内存释放流程

2016-10-22 10:49:06 1645

原创 TCMalloc的使用与源码剖析之六---------TCMalloc中内存分配流程

内存分配流程图如上图,具体流程如下:1、 Tcmalloc首先判断malloc的size是否大于kMaxSize,如果小于这个值,那么将size转换为想的obj class,然后从当前thread私有的cache中Allocate,转至第2步。如果请求的size大于kMaxSize那么跳至第10。2、  首先判断当前的threadcache中obj calss对应的freelist

2016-10-22 10:47:03 1153

原创 TCMalloc的使用与源码剖析之五---------TCMalloc中涉及到的几个重要的数据结构

在initStaticVars()里面首先会调用SizeMap.init。SizeMap是一个非常关键的数据结构,SizeMap里面涉及到几个关键的数据结构class_array_,class_to_size_,class_to_pages_,num_objects_to_move_。        其中class_array将一个size映射成为一个class num,被映射的class

2016-10-22 10:43:34 738

原创 TCMalloc的使用与源码剖析之四---------内存在各层之间的传递

(1)ThreadCache与CentralCache内存传递1.ThreadCache内存不够时,要从CentralCache拿(RemoveRange),再把拿到的内存加入ThreadCache的list_[cl]链表队列。(PushRange)2.ThreadCache从CentralCache拿或者返还给CentralCache的内存,是一种什么逻辑?当拿内存时,如果申请的内存

2016-10-22 10:41:16 1166

原创 TCMalloc的使用与源码剖析之三---------TCMalloc的内存分配的主要层次

(1)第一层,线程局部分配,ThreadCache       ThreadCache包含了一个不同对象大小的空闲链表数组,其实现采用操作系统的线程局部存储功能。分配时几乎不需要用锁,除非触发CentralCache的操作。ThreadCache中的重要数据结构:pthread_t     tid_;   绑定线程,达到每个线程有个缓冲池的目的FreeList

2016-10-22 10:32:14 1251

原创 TCMalloc的使用与源码剖析之二---------TCMalloc内存分配与管理简述

TCMalloc给每个线程分配了一个线程局部缓存,小对象的分配是直接由线程局部缓存来完成的,这样就避免了多线程程序中的锁竞争情况。当线程局部缓存中的内存不够时,会将对象从中央数据结构移动到线程局部缓存中,同时定期的用垃圾收集器把内存从线程局部缓存迁移回中央数据结构中。         TCMalloc将尺寸小于等于256 * 1024字节的对象(“小”对象)和大对象区分开来。大对象直接使用页级

2016-10-22 10:24:59 1457

原创 TCMalloc的使用与源码剖析之一---------TCMalloc 安装和使用

前言        本文档包含了google开源内存管理模块tcmalloc的使用以及源码的剖析,有一些知识点可能理解得有问题,甚至是有可能有错误的地方,所以仅供参考。本文档借鉴了本文下方链接博客的知识点,在此表示感谢,没有你们的付出,就没有我的理解。1.下载google-perftools:http://code.google.com/p/google-perftoo

2016-10-22 10:02:10 6633

转载 应该知道的Linux技巧

转自酷壳网:这篇文章来源于Quroa的一个问答《What are some time-saving tips that every Linux user should know?》—— Linux用户有哪些应该知道的提高效率的技巧。我觉得挺好的,总结得比较好,把其转过来,并加了一些自己的理解。 首先,我想告诉大家,在Unix/Linux下,最有效率技巧的不是操作图形界面,而是命令行操作

2015-01-22 09:22:09 457

转载 简明vim练级攻略

转自酷壳网:http://coolshell.cn/articles/1901.htmlvim的学习曲线相当的大(参看各种文本编辑器的学习曲线),所以,如果你一开始看到的是一大堆VIM的命令分类,你一定会对这个编辑器失去兴趣的。下面的文章翻译自《Learn Vim Progressively》,我觉得这是给新手最好的VIM的升级教程了,没有列举所有的命令,只是列举了那些最有用的命令

2015-01-22 09:20:16 482

转载 网络层相关概念

网络层相关概念目录网络层特性划分为网络IP 地址表示方法最大传输单位(MTU)网关IP 多播虚拟专用网 VPN 和网络地址转换NAT网络层特性设计思路:功能:网络层向上只提供简单灵活的,无连接的,尽最大努力交付的数据报服务方法:网络在发送分组时不需要先建立连接.每一个分组(即IP数据报)独立发送,与其前后的分组无关

2014-08-22 20:54:55 602

转载 物理层

物理层目录用途表示数据的网络介质存在三种基本形式三个基本功能四个特性有关信号的几个基本概念信道复用宽度接入技术适用于介质的信号比特用途创建电信号、光信号或微波信号,以表示每个帧中的比特表示数据的网络介质存在三种基本形式铜缆同轴电缆优点:很好的抗干扰能力,广泛被用于传输高速率的数据双绞

2014-08-22 20:13:17 656

转载 计算机网络

看到一系列计算机网络概述目录因特网计算机网络性能指标网络中通信三种交换方式网络分层协议模型因特网组成:边缘部分由所有连接在因特网上的主机组成供用户直接使用,用来进行数据交换(传送数据、音频或视频)和资源共享核心部分功能:向网络边缘中的大量主机提供连通性,使边缘部分中的任何一个主机都能够向其他

2014-08-22 20:07:17 817

原创 STL中各容器之函数总结

一.序列和关联非共有函数所有标准库共有函数  (构造,相关属性,迭代器,插入与删除,比较,swap)其中operator>,operator>=,operator均不适用于priority_queue顺序容器和关联容器共有函数(1)   序列容器都提供5种相同的构造方法;关联容器都提供3种相同的构造方法(2)    还有insert插入函数(序列容器有3个相同版本的插入。关联容

2014-08-07 11:06:02 1501

原创 关于C++中的Const常量

一. 为什么需要常量 (1)如果不使用常量,直接在程序中填写数字或字符串,将会有什么麻烦:1. 程序的可读性(可理解性)变差。程序员自己会忘记那些数字或字符串是什么意思,用户则更加不知它们从何处来、表示什么。2. 在程序的很多地方输入同样的数字或字符串,难保不发生书写错误。3. 如果要修改数字或字符串,则会在很多地方改动,既麻烦又容易出错。 (2)尽量使用含义直观的常量

2014-07-20 10:13:19 1504

原创 怎样构造一个正确高效的C++的类的拷贝构造函数和赋值函数

拷贝构造 1.      了解C++编译器默默编写并调用了哪些函数,若不想使用编译器自动生成的函数,就该明确拒绝(effctive c++条款5,6)2.      拷贝构造函数的参数可以是一个或者多个,但做起的第一个参数必须是类的引用对象,需要注意的是:一旦定义了拷贝构造函数,        则隐式的默认拷贝构造函数便不再有效了,并且隐式的默认构造函数也不再有效了。3

2014-03-03 17:26:48 748

原创 若类中有指针型数据成员,类的几个函数的重写

当类中有指针成员变量时,类的构造函数,拷贝构造函数,赋值函数必须进行重写,以求为指针成员变量开辟独立的内存空间。 下面以赋值函数为例进行说明: (1)对于类的赋值导致的构造函数需要重写的原因     进行讨论一番,如下(C++教程242页):     Cname o1;     Cname o2(”ding”)//通过重载构造函数为该指针变量赋了初值     o1=

2014-03-03 17:14:54 2124

原创 怎样构造一个正确高效的C++的类的构造函数

类的构造函数看似简单,实则很有玄机,在构造一个类的构造函数时,只要遵循以下几步,便可以建立出一个正确的高效的构造函数:  1.了解C++编译器默默编写并调用了哪些函数,若不想使用编译器自动生成的函数,  就该明确拒绝(effctive c++条款5,6)  2.定义的构造函数不能指定其返回值的类型,也不能指定为void类型。   3.若要用类定义对象,则构造

2014-03-03 17:01:22 1551

精彩protel教程

protel精彩教程,简单易学的教程,希望大家能用得上..

2011-04-16

单片机c语言跑马灯程序

用c语言编写的单片机跑马灯程序。。。可以实现数码管显示

2011-04-14

空空如也

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

TA关注的人

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