自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(153)
  • 资源 (1)
  • 收藏
  • 关注

原创 TCP三次握手和四次挥手以及TCP的11个状态

一、三个握手示意图二、四次挥手示意图。

2023-10-24 10:53:12 159

原创 M1 macbook上安装docker 编译内核 并使用qemu启动内核。

将initramfs-busybox-arm64.cpio.gz文件拷贝到/test/qemu-7.2.0-rc1/build/aarch64-softmmu/目录下。系统启动了,停留在了一个命令行界面,同时可以查看到系统内核是5.13.18版本,这样实现了在容器中使用qemu把内核5.13.18跑起来了。将之前编译好的内核镜像也拷贝到/test/qemu-7.2.0-rc1/build/aarch64-softmmu/目录下。编译成功后会在_install/bin/目录下生成busybox。

2023-06-27 17:41:57 965 1

原创 制作自己的镜像并且推送到docker hub上去。

docker tag centos8:cgdb(本地镜像)zhangyi0833/centos8:cgdb(新添加到远端的镜像)2、在本机上制作自己已经安装了自己想要的工具的镜像,比如我这里安装了cgdb在centos8上面。docker commit -m="提交的描述信息" -a="镜像作者" 正在运行的容器ID 新的镜像名字:新的镜像TAG。使用docker push 命令将新添加的镜像上传到docker hub。Username: rhl (docker hub上注册的账号)

2023-04-28 11:17:31 1030

原创 一些启动容器的脚本和命令

cat startecs.sh 启动一个容器。cat delecs.sh 删除一个容器。cat inecs.sh 进入一个容器。

2023-04-27 16:01:17 221

原创 升级GCC到11.2.0

Linux升级gcc到最新版本gcc-11.2.0_Dan淡淡的心的博客-CSDN博客

2023-04-26 17:23:39 237

原创 如何在Linux上通过cgroup限制一个进程使用CPU和内存

Cgroup 实现了对系统资源的细粒度控制和管理,可以将一组进程放入同一个 Cgroup 中,并对该 Control Group 中的所有进程共享相应的资源配额。这两行代码告诉内核同时运行的程序切换超时参数,即当前可占用 10ms 内核时间,然后必须让出时间,并等待 200ms 内核时间过后再占用,以达到限制CPU使用的目地。2. 创建一个名为 mycg 的控制组,以限制该组中的进程的 CPU 占用率和内存使用量。说明测试程序的CPU使用率已经被成功限制在10%以内,而内存占用不会超过50MB。

2023-04-26 17:10:31 3405

原创 一段代码简单说明container是什么

【代码】一段代码简单说明container是什么。

2023-04-26 16:52:05 80

原创 C语言制作一个linux程序按照进度条

基本操作

2022-10-08 17:41:17 204

原创 MAC book M1上安装docker,然后安装centos

背景:按照往常逻辑下载了virtualbox 但是在macbook M1 上安装时候发现报错,这个时候才恍然M1是arm CPU,目前virtual box不支持。于是想了另个办法,我在mac上安装docker然后再在通过docker拉取centos镜像包,然后通过docker启动centos容器当成对应的虚拟机,不一样能达到在一台mac上启动多个虚拟机的目的吗?于是在macbook上先安装docker.1、下载和安装dockerdocker下载链接如下:Docker Desktop for A..

2021-12-02 21:05:54 6323 8

原创 go语言hello world

vim hello_world.gopackage main //package main指明这个文件属于那个包,名为main的包比较特殊,他用来定一个独立的可执行程序。//import告诉编译器此源文件需要倒入哪些包,必须精确的倒入所需要的包,不能少导,这点和C语言不一样,倒入过多导致编译不过。import( "fmt")func main(){ //这个{必须和main在同一行否则爆错 fmt.Println("hello world!")}编译go文件:go bu

2021-09-15 10:36:12 280

原创 单个虚拟机部署三个etcd实例/一个ectd实例

1、安装etcd:yum install etcd2、查看etcd版本:etcd --version3、在一个目录下创建三个文件(etcd1_conf.yml,etcd2_conf.yml,etcd2_conf.yml)和三个文件夹(etcd1/data,etcd2/data,etcd3/data)分别存放三个etcd实例的配置文件和其对应的运行目录。etcd1_conf.yml内容name: etcd1data-dir: /home/test/etcd_conf/etcd1..

2021-09-14 18:45:25 960

原创 C/C++代码中调用golang的接口。

一、C代码调用go接口。1、前提是golang已经可以提供一些接口,此时需要在C代码中调用这些接口。或者第三方模块是golang写的,则需要把第三方编译成so文件,然后再C代码汇总访问其暴露出来的接口。比如这里我让golang代码提供函数功能,并且将自己编译成so动态链接库,在C代码中调用这个库中的接口。1.1、 golang提供的接口,文件名:autolibary.go,注意这里“//export Func”这句话一定要有,否则一会链接找不到接口。package mainimpor.

2021-09-13 18:20:41 3328

原创 启动一个docker并且将宿主机的目录挂在到docker内部的目录下

1、首先需要 从远处pull docker的启动镜像文件,这个一般放在了/var/lib/docker/目录下。如果想查看当前机器上有哪些镜像可以通过docker images命令查看比如这里我pull一个镜像名字叫opencurve/curvebuild,tag叫centos8。注意这两个东西后续启动docker时候会用到。2、现在镜像有了,则可以根据这个镜像启动docker了。可以将宿主机的目录和希望在docker中的目录进行关联从而达到共享的目的,需要通过命令:docker run -

2021-09-07 15:12:49 469

原创 一个c++ makefile

.SUFFIXES:.PHONY: all cleanCXX := g++CXXFLAGS := -Wall -g -std=c++11INCLUDES := -Iinclude#LIBS := -lmTARGET := demoSRCDIR := ./TESTDIR := ./SRCOBJS := $(patsubst %.cpp, %.o, $(wildcard $(SRCDIR)/*.cpp))TESTOBJS := $(patsubst %.cpp, %.o, $(wild.

2021-07-10 17:13:19 89

原创 grpc编译安装

1、如果国外网速不好,则可以使用国内镜像下载:git clone https://gitee.com/githubplus/grpc.git直接用master版本肯定有点多,所以这里按照网上的查询选择了一个版本,同时设置他们对应的submodule文件,也就是对应的版本进行下载。git checkout v1.20.02、因为编译grpc需要依赖很多第三方组件,如protobuf等,则也需要将他的submodule文件改为国内镜像,这样下载也要快一些。修改.gitmodules文件[submod

2021-07-04 09:11:29 1076 2

原创 Macbook安装vitualbox虚拟机(NAT)模式,Mac上通过SSH连接虚拟机。

正常情况下,MacBook以NAT方式(虚拟机属于宿主机,不能有单独的外网网络IP)安装vitualbox虚拟机时,虚拟机可以ping同宿主机,虚拟机能ping通外网的网址,如ping www.baidu.com.但是宿主机不能ping通虚拟机,也不能ssh虚拟机。如果用桥接模式(虚拟机和宿主机相当于两台独立的机器,独立的一个网段的IP)则可以相互访问。但是在宿主机有VPN的时候,需要在虚拟机中也要访问VPN的网址时候,如果用桥接的方式就不行,需要在虚拟机也要安装VPN才行。所以此时NAT模式就有用了。那么

2021-06-28 17:58:03 820 1

原创 一张画得很好的LSM tree图,记录下

2021-06-20 15:52:19 151

原创 virtualbox采用桥接模式不能ping通www.baidu.com解决方法

1、虚拟机可以ping通www.baidu.com的IP地址,但是不能直接ping通www.baidu.com网址,这个原因是由于DNS解析问题。2、增加文件/etc/resolv.conf,然后添加内容:nameserver 8.8.8.83、再次ping www.baidu.com成功了...

2021-05-10 10:39:28 2084 2

原创 MacBook上virtualbox虚拟机获得和主机一样的IP网段(作为一台独立的机器使用,可以上网可以和主机相互ping通)

1、首先将虚拟机的网卡配置为桥接方式的网卡。2、virtualbox安装好centos系统后,进入系统修改配置/etc/sysconfig/network-scripts/ifcfg-enp0s3修改ONBOOT=no为ONBOOT=yes3、service network restart4、ifconfig5、主机ping 虚拟机6、虚拟机ping主机7、虚拟机上网...

2021-05-06 16:54:24 937

原创 先了解网络基本基础知识

1、先了解网络分层架构:网络分层主要分为两个流派:OSI 7层模型和TCP/IP 5层模型,下面一张图可以简单描述他们的共同和不同。意思就是TCP/TP为实践的网络模型,他就是吧OSI的7层模型的表示层和会话层同应用层统一了,不搞那么多虚拟吧唧的,直接整了一个应用层出来。2、实际例子:一个数据信息(比如你的照片,你的用户名和密码)是怎么通过http协议发送从一台机器发送到另一台机器的呢?3、那些动作是网卡做的?那些动作是OS操作系统做的呢?...

2021-04-12 17:08:38 160

原创 存储需要考虑的事情

2021-02-23 13:59:40 122

原创 什么事json格式。

1、首先他是一种数据传输格式,并且定义了自己基本类型,以及信息表达,比如怎么第一个对象,怎么定义一个数组2、基本类型定义及其格式字符串类型:需要双引号来表示,比如;"zhangyi","www.baidu.com","我是中国人" 数字类型:直接数字表示,可以是整数也可以是小数,比如:100,200,34.3,400 bool类型:直接true和false表示 空类型:null3、描述一个事物,用对象表示,对象用双括号表示:{},对象的属性用健值对的方式表示,比如描述一个人{"nam

2021-02-20 11:30:15 109

原创 简单理解RDMA RoCE

对啊RDMA RoCE理解:就是说RDMA网卡已经把协议栈(UDP/TCP) 这些协议栈全部offload到RDMA网卡的ASIC芯片上来实现了(硬化)。而且在本机上用户buffer到网卡buffer也是直接通过的DMA方式把数据搬到网卡中,然后网卡通过网络协议UDP(RoCE)的方式将数据传送到对端去,对端收到数据后也直接在网卡上把数据接收下来,并且直接DMA到用户的buffer中。这样整个过程都没有CPU和内存拷贝的参与。但是RDMA也存在问题:就是不能大规模使用,以及需要环境很干净,否则就会因

2020-11-26 20:16:50 1730

原创 编译运行ceph遇到的问题

1、centos7升级8.3.1yum install centos-release-scl scl-utils-buildyum install -y devtoolset-8-toolchainscl enable devtoolset-8 bashgcc --version2、出现*** Error in `/usr/bin/python3.6’: free(): invalid pointer: 0x00007f33710257c0 ***

2020-09-16 22:08:18 612 1

原创 条件变量使用

#include <fcntl.h>pthread_cond_t wakeup_cond;pthread_mutex_t tlock;pthread_t tid1;pthread_t tid2;int a = 100;static void *smr_thread_handler(void *arg){ printf("my name is :p

2020-08-18 10:42:00 65

原创 SAS理解

一、常见的SCSI命令命令用途Test unit ready查询设备是否已经准备好进行传输Inquiry请求设备基本信息Request sense请求之前命令的错误信息Read capacity请求存储容量信息Read从设备读取数据Write向设备写入数据二、内核中SCSI命令字,错误码,状态定义文件在:/usr/include/scsi/scsi.h/* * SCSI opcodes */#define TEST_

2020-08-08 17:35:58 2976

原创 Mysql 索引简单理解和整理

Mysql:1、什么是索引?为什么要索引?就是另一种外在的数据结构比如二叉树,来表示和记录数据库表的数据的信息的结构体。而这个结构体本身和数据库表没有必然关系,只是他以某种形式来反应整张表的数据,从而通过和这个外在的数据结构能快速并且少量访问盘(降低IO成本)的方式找到我们想要的数据。如果没有这个索引表的话,要在数据库表中查找某个数据,则需要全量遍历整张表信息,一是速度慢,而是IO访问很多。2、索引带来的问题:2.1、所以索引是数据库除了表之后的另外的数据,这部分数据如果表示的表很大的话,则索引信息

2020-07-21 21:56:37 169

原创 什么是Hadoop以及Hadoop集群

####一、简单理解一个hadoop集群主要包含三个主要的模块:Mapreduce,hdfs,yarn。mapreduce是一个分离在合并的计算框架,注意他不是一个集群,而是一个编程框架。hdfs是一个分布式文件系统,是一个分布式集群,用于存放数据。yarn集群是负责集群任务调度和运算资源管理的分布式集群。...

2020-07-19 15:52:25 5194

原创 Kubernete集群搭建简单理解

一、Kubernetes集群就张这个样参考如下进行理解。一、Kubernetes搭建过程主要分为几个过程1、Kubernete集群的meter节点初始化,只有有了master节点才能为后后面的整个集群的创建提供基础。这步骤就是通过kubeadmin来初始化master节点的信息。2、配置master节点和将需要加入到整个Kubernete集群的其他节点(称之为node的节点)之间的网络通信为Kubernete支持的flannel网络,也即是整个Kubernete集群内部pod之间通信的网络。3、

2020-07-17 18:23:33 277

原创 macbook上使用hexo搭建个人网站博客

1、安装node.jshttps://nodejs.org/en/#download 在这个网站上下载node.js安装在macbook上2、测试安装结果:node -v和npm -vzhangyi@ali-186590ce64cf:~$ node -vzhangyi@ali-186590ce64cf:~$ npm -v3、切换到sudo模式下,进行安装hexo:npm install hexo-cli -gbash-3.2# npm install hexo-cli -g4、安装h

2020-07-14 23:33:08 620 1

原创 rocksdb compaction流程理解

1、首先通过每层的分数score来决定那个level可以进行compaction操作。2、然后启动这个compaction放在独立中等待线程调度处理3、rocksdb对一个大的compaciton进行了切分,切分成了多个subcompation,然后多个subcompaction会通过子线程进行处理。多个线程会并发处理subcompation。4、每个subcompation处理就是将这个subcompation包含的哪些两个level中的文件放在input数组中,然后通过一个mergeIter

2020-06-29 22:56:28 1105

原创 O_Direct O_sync参数意思

一、O_Direct O_sync sync参数意思参考:https://my.oschina.net/fileoptions/blog/3061997O_Direct:表示的是数据从用户态文件下发,通过VFS文件系统,数据直接从文件系统提交到下面的块设备层,也就是通过submit_bio提交到块设备层。然后该请求可能会在块设备层排队合并等,就返回了。此时不能不保证数据已经持久化化到盘上。因此O_Direct只是说明这个请求不会经过PageCache而已,不代表会持久化到盘上。O_sync:表示数据

2020-06-29 16:23:59 803

原创 什么是工厂类

当定义多个类,且他们之间相互有关系时候,比如一个Base A 类,派生了很多子类B,C,D,当每个子类进行对象实例化时候,我们一般的做法就是通过new B,new C,new D这样的方式产生对应的对象。这样当然是可以的,但是我们在C++中希望的是通过一个工厂类,去产生我们想要的对象。而工厂类就做到了一个提供接口(设计模式的目的,提供接口而不提供代码)的目的。同时这个工厂类的create接口实现也可以对我们理解代码有很大的帮助。其实简单一点理解就是工厂类有点类似一个函数接口,铜鼓传入不同的参数在工厂类内部区

2020-06-26 08:32:16 3497

原创 Epoll为什么比select高效

1、select的原理首先select在处理多客户端接受数据的问题上是这样处理的的,首先将要坚挺的socket添加到一个fs_set[]数组中,然后将在select时候将这些监听的socket传递给内核(这些socket在内核中表示为一个文件,这个文件对应有他的socket buffer用于存放接收发送数据),如果此时这些监听的socket上有数据了,则直接返回.否则则会将这个进程后者线程阻塞(这里阻塞的实现是将这个进程或者线程添加到这个socket(文件或者设备)的等待队列中,也就是将这个进程从CPU的

2020-06-15 09:52:05 261

原创 n&(n-1)表示什么?n&(-n)表示什么?

1、n&(n-1)(注意这里是X&Y不是X*Y)表示将一个数据比如7按照二进制表示后,将最右边的1变成0,比如将0111变成0110. 这个公式有两个左右,一个作用是可以用来统计一个数1的个数,也可以用于判断一个数据是否为2的幂。判断1的个数while(n&(n-1))方式统计次数,判断是否为2的幂则直接判断n&(n-1)是否==0,等于0则是否则不是。因为2的幂二进制数只会包含一个1.2、n&(-n)表示什么,这个表示将一个数只是保留二进制下最右边的1的位,而其

2020-06-10 07:22:23 5813 1

原创 SPDK NVME

SPDK NVME1、SPDK(APP)在启动时候会让指定绑定在那些core上运行,这样在每个core上会创建一个线程(他叫reactor),这个线程不停的做polling操作,而如果你要在这个线程上做事情,则需要注册poller( 可以理解为一个poller就是SPDK中一个事情的thread入口函数,但是),这个线程就不停的调用poller的机型函数执行你要执行的动作。2、一个NVME的开始和结束的过程是:2.1、probe NVME设备也就是prob发现ctrlloer.然后在给这个con

2020-06-01 22:59:38 1576

原创 从hash到二叉树到红黑树到B树到B+树

要搞清这个几个数据结构的问题,需要搞清楚他们的原理,并且有什么问题,然后每一个新的结构能解决什么问题。为什么会出现?为什么就用他了。hash表:首先hash表查序你很快,通过hash函数可以在O(1)的时间就能找到key值,且都是在内存中操作。hash表的内部实现可以已有两种方式解决hash冲突问题。一个是顺序找新地方放,一个是通过链表的方式记录冲突的key值。顺序防止有占用bucket空间的问题和bucket key清楚后的特殊标记问题。同时还带有空间扩容问题。所以一般采用链表的方式解决冲突,但是

2020-05-24 22:34:06 256

原创 数据结构知识分类

2020-05-24 17:57:15 104

原创 Hash表理解

Hash表:1、hash表就是通过hash函数将需要保存在hash表中的key值翻译成hash bucket(也就是hash数组,是一个按照序列的数组)。然后查询时候也是通过hash函数计算出bucket的index值,也就是计算出可以在hash桶的第几个位置,这样就能通过访问数组的方式直接访问到需要值,bucket上记录index对应的key值。但是存在一个问题就是可能存在多个key计算出来的bucket index值相同,这样就叫hash冲突,解决hash冲突的办法有两个:一个是如果先hash. bu

2020-05-24 17:16:28 425

原创 spinlock理解

锁理解:1、比如自旋锁,如果一个CPU的情况:他是指的线程运行的主体CPU或者对应的线程core在在某个线程或者进程已开始进来加锁成功后,然后CPU就在时间片内一直执行锁内部的代码操作,在时间片结束的最后一个CPU指令是中断处理,也就是需要切换CPU到其他进程或者线程,如果此时是加的自旋锁,则被切换的线程2执行到加锁位置,此时因为锁在线程1上还没有被释放,所以线程2让这个CPU继续忙等待什么都不做,拜拜浪费CPU,直到这个时间片到达过去,切换到下一个线程,同样也是白白浪费到下一个线程CPU执行周期,最终

2020-05-24 16:16:18 862

ceph github上下载的代码,否则国外直接下载太慢了。

ceph github上下载的代码,否则国外直接下载太慢了。ceph github上下载的代码,否则国外直接下载太慢了。

2020-12-13

空空如也

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

TA关注的人

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