自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(74)
  • 收藏
  • 关注

原创 RPM包SPEC简易文件编写

RPMS、SPEC

2022-08-23 19:19:18 536 1

原创 裸金属服务器启动之PXE与IPXE实践

1、PXE是什么2、PXE有啥用?3、PXE怎么用图解裸金属服务器_裸金属服务器 BMS_产品介绍_华为云 (huaweicloud.com)裸金属服务器本质:裸金属服务器之所以有这么个奇怪的名字,主要是为了和虚拟化服务器划清界限。它可以说是物理服务器和云服务的结合,“裸金属”意味它不包括相应的操作系统和软件,主要提供CPU和内存,硬盘方面主要使用云盘,可以实现快速装机,镜像直接装机。并且裸金属服务器通常可以无缝对接和兼容云厂商提供的其它云服务,例如网络服务(例如VPC专有网络)、云数据库服务等裸金属服务器

2022-07-04 16:14:20 2776

原创 SPDK性能测试 + fio

1、下载编译好fioaxboe/fio: Flexible I/O Tester (github.com)在Linux环境编译生成可执行文件./configuremake2、编译支持fio的SPDK,在build/fio目录下,会生成spdk_nvme, spdk_bdev两个文件,用于fio测试spdk的性能(分别对裸盘和bdev的io性能进行测试)./configure --enable-debug --disable-tests --without-isal --withou

2022-05-27 14:31:20 1481

原创 SPDK笔记栏

SPDK NVMe Reservation(32条消息) SPDK NVMe Reservation使用简介_weixin_37097605的博客-CSDN博客SPDK RPC机制(32条消息) spdk探秘-----RPC_souy_c的博客-CSDN博客

2022-04-18 18:19:22 438

原创 kernel-nvmf

##ininvmf_dev_write nvmf_create_ctrl : ops->create_ctrl(dev, opts) nvme_rdma_create_ctrl reconnect_work : nvme_rdma_reconnect_ctrl_work // 初始化这些work err_work :nvme_rdma_error_recovery_work // 初始化这些work reset_work :nv...

2022-04-15 11:02:51 499

原创 NVMe over fabric 内核&SPDK实现比较

启动流程bdev_modules_init bdev_nvme_library_init spdk_nvme_connect create_ctrlr nvme_ctrlr_populate_namespaces spdk_nvme_probe spdk_bdev_nvme_set_hotplugspdk_nvme_connect 返回了一个spdk_nvme_ctrlrspdk_nvme_connect

2022-04-02 18:11:13 6870

原创 SPDK技术点

1、必要的驱动程序移到用户空间,避免系统调用,并允许从应用程序进行零拷贝访问2、通过轮询硬件状态而不是依赖中断3、避免I/O路径中的锁,依靠消息传递SPDK的基础是用户空间,轮询模式,异步,无锁的NVMe驱动程序。这提供了零拷贝,高度并行的访问,可从用户空间应用程序直接访问SSD。该驱动程序被编写为具有单个公共标头的C库参考博客:SPDK:存储性能开发套件(Storage Performance Development Kit)介绍 - 灰信网(软件开发博客聚合)...

2022-03-16 11:29:05 189

原创 学无止境----编程练习

反转链表:struct ListNode { int val; struct ListNode *next;};struct ListNode* ReverseList(struct ListNode* pHead ) { struct ListNode *tmp = pHead->next; struct ListNode *out = pHead; out->next = NULL; while (tmp) { pH

2021-09-10 01:18:16 92

转载 开发必备技能

1、Makefile教程https://blog.csdn.net/weixin_38391755/article/details/80380786/

2021-07-27 15:24:02 52

原创 ISCSI介绍

在Linux内核中SCSI驱动应该是最为复杂的驱动,没有之一。因为对于整个SCSI系统来说,不只包含一种类型的设备,而是一类设备。前面文章我们简单介绍了Linux操作系统内核中SCSI子系统的整体架构,我们这里简单回忆一下。在Linux内核中抽象了一个称谓SCSI总线的虚拟总线。而在SCSI总线上又包含SCSI的驱动和设备。图1 SCSI体系结构Linux操作系统中的SCSI整个架...

2019-12-05 07:26:20 1020

转载 OFED简介

OPED简介目录简介Mellanox OFED栈的架构mlx4 VPI Drivermlx5 Driver上层协议(ULP)Mellanox OFED是一个单独的VPI(Virtual Protocol Interconnect,虚拟协议互联)软件栈。文档地址:https://docs.mellanox.com/display/MLNXOFEDv461000/Intro...

2019-12-05 06:32:33 2836

原创 希尔排序,堆排序,快速排序

希尔排序://  最优情况下  时间复杂度为 o(n^1.3) ; 最差的情况下为 o(n^2) ,增量序列的最后一个增量值必须等于1 Shell_sort(vector<int> &v1){ int i, j , incre = v1.size() ; do{ incre = incre/3+1 ; for( i=incre+1; i<v1.siz...

2018-07-30 16:10:08 753

原创 冒泡,选择,直接插入排序

冒泡:// 最好情况是已经有序,比较 n-1次  0(n)。//  最坏情况是逆序了,比较n(n-1)/2 交换同等次数,  0(n^2) // 可做的优化是   { 2 , 1  ,3 ,4 ,5,6,7} 当第一轮循环完以后 已经有序了。//  优化方式是  设置标志位。  flag = TRUE, 外循环判断 。  内循环里若有交换则还在排序置flag为true,若无交换则循环会停...

2018-07-30 10:04:08 124

转载 未定义行为---转自https://blog.csdn.net/qq_29169813/article/details/51416281

什么是未定义行为简单地说,未定义行为是指C语言标准未做规定的行为。编译器可能不会报错,但是这些行为编译器会自行处理,所以不同的编译器会出现不同的结果,什么都有可能发生,这是一个极大的隐患,所以我们应该尽量避免这种情况的发生。特征包含多个不确定的副作用的代码的行为总是被认为未定义。(简单而言, “多 个不确定副作用” 是指在同一个表达式中使用导致同一对象修改两次或修改以后 又被引用的自增, 自减和赋...

2018-07-16 09:58:05 204

原创 深信服笔试题

第一行输入整数n, 继续输入n行 (每行输入一个整数表示ID)取前10个不重复的ID为中奖用户输出结果:  3\n   1\n 2\n 5\n  #include <map>#include <iostream> using namespace std;int main( ){ int n , size_m ,tmp ; map<int,int> m...

2018-06-21 21:59:00 3026 1

转载 ftp服务器开发笔记

TCP/IP协议中,FTP标准命令TCP端口号为21,Port方式数据端口为20。FTP协议的任务是从一台计算机将文件传送到另一台计算机,它与这两台计算机所处的位置、联接的方式、甚至是是否使用相同的操作系统无关。假设两台计算机通过ftp协议对话,并且能访问Internet, 你可以用ftp命令来传输文件。每种操作系统使用上有某一些细微差别,但是每种协议基本的命令结构是相同的。   FTP的传输有两...

2018-06-12 19:57:29 1532

原创 git、gdb、makefile等工具使用

版本控制系统:CVS、SVN均是集中式的版本控制系统,而Git是分不式版本控制系统集中式版本控制系统:版本库是集中存放在中央服务器的,工作时客户端先连到服务器,取出最新的文件或者提交最新分不式版本控制系统:每个人电脑都有完整的版本库git  clone   项目URL  将项目下载到本地。本地创建一个目录,在该目录下,git init , 就会在该目录下创建一个git版本仓库。git  confi...

2018-06-11 16:07:37 866

原创 正则表达式基础

正则表达式:用来描述或者匹配一系列符合某个句法规则的字符串| 表示选择   ;  +  表示前面的字符必须出现至少一次  ; ? 表示前面的字符最多出现1次 ;  * 表示前面的字符可以出现任意次() 用来定义优先级和范围^匹配输入字符串的开始位置   grep  ^123 匹配以123开头的..., $ 匹配输入字符串的结束位置。grep  123$  匹配以123结尾的{ n }  匹配n次 ...

2018-06-10 17:23:00 252

原创 Linux基础3

文本处理命令  tr ,对标准输入进行处理tr  -d   'str1'   将标准输入中所有在str中出现的字符删除tr   -s    'char1'  将标准输入中连续重复的char1改写为只剩1个col  -x  将 tab转换为空格 , col  -h  将空格转换为tabjoin file1 file2  将文件每行相同部分不写(写一次),不同部分组合 ,-t 指定字段分隔符   -a...

2018-06-10 13:58:35 131

原创 Linux基础学习2

du 查看目录容量df  查看磁盘容量创建虚拟磁盘从/dev/zero设备创建容量为256M的空文件     dd if=/dev/zero  of=virtual.img  bs=1M count=256创建后再将虚拟磁盘镜像格式化       mkfs.ext4  virtual.img 挂载磁盘分区mount     /dev/*****               要挂载的分区umount...

2018-06-09 15:30:20 128

原创 Linux基本命令1

alt+backspace  向前删除一个单词touch   lc_{1..10}.txt  创建 名为 lc_1.txt .... lc_10.txt个文件。创建多级目录    mkdir  -p    dir1/dir2/dir3  复制一个目录到另一目录   需要加参数 -r 或-R    cp  dir1 dir2  -r   ,表示递归复制文件或目录重命名用  mv  (单个文件或目录)...

2018-06-09 10:42:13 128

原创 函数对象,一元谓词,二元谓词,预定义函数对象

find_if , sort , for_each 的使用 for_each(v1.begin(), v1.end(), ShowElemt<int>() ) ; 要使用预定义函数对象需要包含 functional 头文件vector<int>::iterator it = find_if(v1.begin(), v1.end(), myint ) sort(v3...

2018-03-24 13:04:38 1552

原创 stl之map、multimap

map默认实现形式  map<T a   T b > 即存在两个域,一个是键值,一个值域,其与set一样,元素只能唯一。map插入元素的三种形式:    map <int ,string> mapStu ;        mapStu.insert(  pair<int ,string>(3 , "哈哈") ) ;        mapStu.insert(  ...

2018-03-11 17:09:45 156

原创 stl之List 、priority_queue、set:仿函数,pair查返回值、multiset

list 不能随机访问 即其迭代器  it不能跨度不能大于1.   只能it++ it--等list <int> l1 ;  可用 push_back  push_front ....插入元素    l1.insert(pos , var )   pos位置变成var .删除元素   l1.clear() ; 清除所有元素。  l1.erase(beg , end)  删除从beg到e...

2018-03-10 17:29:39 184

原创 stl--vector容器,deque,stack,queue

定义容器:    vector< int >   v1 ; 将数据装入容器:    v1.push_back(1) ;返回容器元素个数:v1.size()  取头部元素:v1.front();取尾部元素:  v1.back()头部赋值 v1.front() = 11 ,   尾部赋值  v1.back() = 13 ;  它们可以作为“左值 ”是因为函数返回的是引用。删除容器尾部元素:...

2018-03-07 22:53:20 219

原创 stl入门 --string类

主要有:vector  , algorithm容器    ,可以存储基本数据类型,也可以存储指针,类  vector<int> v1 ,  v1.push_back(1)  v1.push_back(1) v1.push_back(1) 把 1.2.3 存储进容器。vector<int>::iterator  it  = v1.begin();定义一个迭代器(一个指针)。 ...

2018-03-07 22:02:32 135

原创 C++中的IO流

iostream 四种流对象: cin  标准输入流对象     cout 标准输出流对象     cerr 标准错误流对象     clog 标准错误流对象clog与cerr均是在显示器上显示出错信息,区别是cerr是不经过缓冲区,直接向显示器上输出有关信息,而clog中的信息存放在缓冲区中,缓冲区满后或遇endl时向显示器输出。cout 对象遇到endl时会立即取出缓冲区的数据,加上一个换行符...

2018-02-02 22:43:45 214

原创 C++中的异常处理

程序异常: 需要定义一个抛掷异常的程序段。void Fun(){ ……throw 表达式 ;……} 其次,在主程序中,将可能出错的程序段放入try中,try{ Fun(……)}接着在try后对异常进行捕获和处理 catch (……) ……catch (……)……如果在catch中匹配不到所抛出的异常,将会运行terminate函数调用abort终止程序。当然也可以自己设置匹配不到异常时的默认处理:...

2018-02-01 22:45:28 156

原创 C语言中的异常

C语言中setjmp 实例化一个处理程序,而longjmp引发一个异常。assert(expression);assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。

2017-11-27 22:43:49 443

原创 前导码,时域测量和频域测量

数据帧的第一项为前导码,其主要完成两个功能:空中码元时钟同步,第二为支持多信道扫描的信道定位。

2017-11-15 10:28:20 1778

原创 信道参数

SISO信道测量系统(基于滑动相关方法)(只能测量静态信道或者极低速运动信道)1信道测量方法与系统架构。2该频段信号产生与接收 。3宽带信号生成与采集。 4测量数据存储与流盘。 5信道参数估计算法。6系统同步与校准。 信道测量技术大致有三类: 宽带信号相关方法、滑动相关方法、扫频方法。宽带相关方法是对整个带宽内的系电脑冲击响应(CIR)进行测量在支持多天线的技术上,出于测量

2017-11-09 21:04:57 4440

原创 窄带,宽带,频率选择性衰落,时间选择性衰落,相干带宽,以及大尺度衰落和小尺度衰落的定义

窄带:信号带宽小于多径信道的相关带宽。宽带:信道带宽大于多径信道的相关带宽。相干带宽是表征多径信道特性的一个重要参数,它是指某一特定的频率范围,在该频率范围内的任意两个频率分量都具有很强的幅度相关性,即在相干带宽范围内,多径信道具有恒定的增益和线性相位。通常,相干带宽近似等于最大多径时延的倒数。宽带通信系统指信道带宽大于多径信道的相干带宽,接收机可以将多径分离出来,信道呈现频率

2017-11-06 17:23:54 11402 2

原创 文件操作,及文件操作时的权限设置,快速实现文件拷贝,C语言常用IO函数

定义一个文件类型指针。用于保存打开文件后的指针。C语言中可以用 gets(char *str) 来输入一行(包括空格)。FILE *p = fopen("文件名",“打开的权限”);其中权限可以是w ,此时如果文件不存在会自动创建,如果存在就会自动覆盖(内容);权限也可以 r ,可以对文件中的内容进行读取。fputs(*str, FILE);   将字符串写入文件中。fge

2017-11-02 22:08:01 1471

原创 内存管理,malloc,calloc,realloc的使用

通常变量放在内存中,如果使用register,则会将变量放在CPU的寄存器中,这样会提高执行效率。对于寄存器变量不能执行取地址操作。static 变量,静态变量(代码块内定义),只初始化一次,而且程序运行期间,静态变量一直存在。 代码块外的静态变量

2017-11-02 18:54:49 270

原创 数组逆序,数组中最大值和次大值的查找

1数组逆序: char str[100] = "123456789" ; char * start =str ; char * end = &str[strlen(str)-1]; while(start<end) { int temp ; temp = *start ; *start = *end; *end = temp ; start++; end--

2017-11-02 17:30:54 380

原创 指针数组,数组指针,函数指针,指针函数,多级指针

int *  a[10] ; 定义一个指针数组,该数组共有10个元素,每个元素均是一个int型指针。int  (*a)[10]  ; 定义一个数组指针。该指针指向一个含有10个元素的数组的地址。 即指向二维数组的指针。通常如果要修改一个二维数组的值时,需要定义一个数组指针作为函数参数。或者 int  a[][10]作为形参。int  b[10] = {……};a = b ;  编译时此

2017-11-02 14:55:41 191

原创 野指针,指向常量的指针,指针常量

计算内存的最小单位是 BYTE,每个BYTE都对应有唯一一个编号。在32位系统中,每个编号是一个32位的整数。64位系统中,每个编号是占64位。指向NULL的指针为空指针。野指针:具体没有指向任何变量地址的指针叫野指针。int * p *p =1 ;  语法上没错,但是出现了野指针。假设运气好,p可能指向一个程序的有效地址。否则程序将崩溃。进行相应的语法屏蔽: #p

2017-11-02 09:21:21 222

原创 二叉树的存储结构及遍历算法

二叉树的顺序存储:用一块连续的空间存储二叉树的节点,存储的顺序按从上到下,从左至右的顺序。顺序存储一般适合存储 : 满二叉树和完全二叉树。 对于一般二叉树,如果用顺序存储,且需要反映出一定的逻辑关系(即能用数组元素下标值反映元素在二叉树中的位置),此时可能会需要定义一些虚结点。即存储时,存储虚结点的空间即存储0值。(弊端是浪费了太多空间)所以,对于一般二叉树不适合用顺序存储结构。

2017-10-31 21:18:26 912

原创 二叉树的性质

结点的度:结点的子树棵数。(二叉树中任意节点的度不大于2)。叶结点:度为0的结点,或者称为终端节点。分支结点:二叉树度不为0的结点,即二叉树中除了叶结点的所有结点。树的深度:二叉树中所有结点的最大层号称为树的深度或者二叉树的高度。满二叉树:所有的分支结点都存在左子树和右子树,并且所有叶子结点都在同一层上,则该二叉树称为满二叉树。完全二叉树:对二叉树从上到下,从左

2017-10-31 21:13:28 1996

原创 串的匹配算法:BF以及KMP

串的模式匹配,即在给定主串S中找到等于子串T的过程称为模式匹配。T称为模式。串的匹配算法有两种:简单匹配算法和KMP匹配算法。

2017-10-31 10:56:24 347

空空如也

空空如也

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

TA关注的人

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