自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

烟云的计算

若抽象才是美之定义,追求明确性的我们是否象征着丑陋。

  • 博客(62)
  • 资源 (3)
  • 论坛 (2)
  • 问答 (1)
  • 收藏
  • 关注

原创 C 语言编程 — 使用 assert 断言进行程序设计

目录文章目录目录断言利用断言来提高代码的可测试性自定义断言来满足需求尽量在函数中使用断言来检查参数的合法性避免在断言表达式中使用改变环境的语句避免使用断言去检查程序错误在防错性程序设计中使用断言来进行错误报警用断言保证没有定义的特性或功能不被使用谨慎使用断言对程序开发环境中的假设进行检查参考文档断言在 C 语言中,断言被定义为宏的形式,而不是函数,其原型定义在 assert.h 文件中。其中,assert 将通过检查表达式 expression 的值来决定是否需要终止执行程序。例如:assert(ex

2020-05-31 22:23:31 957

原创 C 语言编程 — uint8_t / uint16_t / uint32_t /uint64_t

目录文章目录目录uint8_t\uint_16_t\uint32_t\uint64_t格式化输出uint8_t\uint_16_t\uint32_t\uint64_t在 C99 标准(ISO C99: 7.18 Integer types)的 stdint.h 头文件中通过 typedef 定义了这些数据类型:#ifndef __int8_t_defined # define __int8_t_defined typedef signed char int8_t;

2020-05-31 11:14:15 1286

原创 Redis Python 客户端

目录文章目录目录Python Redis连接池管道String 操作List 操作Hash 操作Set 操作ZSet 操作常规操作Python Redis>>> import redis>>> r = redis.Redis(host='localhost', port=6379, db=0)>>> r.set('foo', 'bar')True>>> r.get('foo')'bar'连接池redis-py 使用

2020-05-27 14:41:19 854

原创 hiredis — Redis 的 C 语言客户端

目录文章目录目录Redis 客户端HIREDIS安装验证Synchronous APIredisConnectredisCommandfreeReplyObjectredisFreeRedis 客户端Redis 拥有几乎所有主流编程语言的客户端(https://redis.io/clients),其中 C 语言的客户端推荐使用:hiredis:https://github.com/redis/hiredishiredis-vip:https://github.com/vipshop/hiredi

2020-05-27 00:18:21 1611

原创 DPDK — PDUMP 抓包工具

目录文章目录目录前文列表DPDK PDUMP安装部署运行原理操作步骤dpdk-pdump 指令前文列表《DPDK — 安装部署》《DPDK — TestPMD》DPDK PDUMPpdump 库是在 DPDK 16.07 版本引入的一个 DPDK 数据包捕获框架(抓包工具)。因为 DPDK App 是完全内核旁路的用户态网络协议栈,所以无法使用 tcpdump 工具来进行抓包。使用 DPDK pdump 可以用于抓取被 DPDK App 接管的指定接口、队列的数据包。安装部署DPDK pdu

2020-05-26 17:11:30 9663

原创 5G NGC — UDM 统一数据管理,UDR 统一数据存储库,UDSF 非结构化数据存储功能

目录文章目录目录前文列表计算与存储分离参考文章前文列表《简述移动通信网络的演进之路》《5G 第五代移动通信网络》《5GC 关键技术之 SBA(基于服务的软件架构)》《5GC 关键技术之 CUPS(控制与用户面分离)》《5GC 关键技术之网络切片》计算与存储分离在移动通信网络中计算和存储体现在对终端用户信息的处理上,计算表示对用户信息的运算和分发,存储表示对用户信息的持久化。在核心网中,数据被分为两大类:一类是 用户签约信息,与用户信息身份对应,单独存储在后端数据库中,我们称这类数据为

2020-05-19 10:44:17 2050

原创 C 语言编程 — 管道(Pipe)

目录文章目录目录Linux 的管道指令C 语言的匿名管道命名管道匿名管道和命名管道的区别参考文档Linux 的管道指令如果你熟悉 Linux,那么你对管道应该不会感到陌生,我们经常会使用 “|” 来使用管道。但是管道的真正定义是什么呢?管道是一个进程连接数据流到另一个进程的通道,它通常用作把一个进程的输出通过管道连接到另一个进程的输入。例如:ls -l | grep string。C 语言的匿名管道C 语言的匿名管道 pipe() 定义在头文件 unistd.h 中。int pipe(f

2020-05-16 00:22:27 2153 1

原创 C 语言编程 — size_t 的意义与作用

目录文章目录目录size_t 的作用size_t 的使用size_t 的作用在 C 语言程序中使用 size_t(size_type)可以提高代码的可移植性、有效性、可读性。实际上,在 K&D C 中并没有提供 size_t 类型,而是 C 标准委员会为了解决程序的可移植性问题将 size_t 引入的。在 C 标准库中,许多函数的参数或返回值都是用字节(Byte)来表示对象的大小。例如:malloc(n):n 指明了需要申请的内存大小。memcpy(s1, s2, n):n 表明了需要

2020-05-15 00:16:23 1257

原创 C 语言编程 — 线程安全与线程非安全

目录文章目录目录线程安全与线程非安全C 语言的线程非安全函数(不可重入函数)线程安全与线程非安全多线程程序中,线程安全是必须要考虑的因素。线程安全(Thread Safe)就是在多线程环境中,多个线程在同一时刻对同一份资源(e.g. 寄存器、内存空间、全局变量、静态变量 etc.)进行写操作(读操作不会涉及线程安全的问题)时,不会出现数据不一致。反正,则是线程非安全(None-Thread Safe)的。为了确保在多线程环境中的线程安全,就要确保数据的一致性,即:线程安全检查。这是一种对资源写操作

2020-05-14 23:33:06 1445

原创 DPDK — DPDK APP 的指令行参数

目录文章目录目录DPDK APP 的指令行参数Lcore-related options(逻辑线程相关参数)Device-related options(设备相关参数)Multiprocessing-related options(多进程相关参数)Memory-related options(存储相关参数)Debugging options指定 DPDK App 使用的大页内存隔离 DPDK App 使用 lcore使用基于 Intel VT-d 的 Linux IOMMU Pass-Through 来运

2020-05-12 14:58:45 75420 2

原创 DPDK — EAL 环境抽象层

目录文章目录目录EAL 环境适配层Linux 环境下的 EALDPDK App 的初始化和运行内存分配Structure: malloc_heapStructure: malloc_elem申请内存释放内存多线程支持用户态中断处理EAL 环境适配层EAL(Environment Abstraction Layer,环境抽象层)对 DPDK 的运行环境(e.g. Linux 操作系统)进行初始化,并为上层应用(用户态 DPDK App)提供了一个通用接口,隐藏了与底层库与设备打交道的相关细节。EAL 主

2020-05-12 13:03:24 1568

原创 Linux 操作系统原理 — 内存 — mmap 进程虚拟内存映射

目录文章目录目录mmap()mmap 与 read/write 的性能比较mmap 优点总结mmap()mmap() 是一个系统调用函数,本质是一种进程虚拟内存的映射方法,可以将一个文件、一段物理内存或者其它对象映射到进程的虚拟内存地址空间。实现这样的映射关系后,进程就可以采用指针的方式来读写操作这一段内存,进而完成对文件的操作,而不必再调用 read/write 等系统调用函数了。函数原型:void *mmap(void *adrr, size_t length, int prot, int

2020-05-10 14:51:17 1365

原创 5G NR — 天线技术演进

目录文章目录目录MIMOMIMOMIMO(Multiple Input Multiple Output,多进多出)是为极大地提高信道容量,在发送端和接收端都使用多根天线,在收发之间构成多个信道的天线系统。MIMO 系统的一个明显特点就是具有极高的频谱利用效率,在对现有频谱资源充分利用的基础上通过利用空间资源来获取可靠性与有效性两方面增益,其代价是增加了发送端与接收端的处理复杂度。大规模 MIMO 技术采用大量天线来服务数量相对较少的用户,可以有效提高频谱效率。显然,针对无线通信网络,可以多来几根

2020-05-10 14:00:16 2009

原创 移动通信网络中的数字基带

目录文章目录目录数字基带数字基带在数字通信系统中,未经调制的数字信号所占据的频谱是从零频或很低频率开始的,称为数字基带信号。数字基带信号是数字信息的电波形表示,它可以用不同的电平或脉冲来表示相应的消息代码。数字基带信号的类型有很多。以矩形脉冲为例:单极性不归零波形双极性不归零波形单极性归零波形双极性归零波形差分波形多电平波形在某些具有低通特性的有线信道中,特别是在传输距离不太远的情况下,基带信号可以不经过载波调制而直接进行传输,这样的传输系统,称为数字基带传输系统。原理

2020-05-10 13:56:52 809

原创 GSM 第二代移动通信网络

目录文章目录目录GSMGSM 与 SIM 卡GSMGSM(Global System for Mobile Communications,全球移动通讯系统),即 2G(语言通话及短信服务)。GSM 较之它以前的标准(1G)最大的不同是他的信令和语音信道都是数字的,因此 GSM 被看作是第二代(2G)移动电话系统。GSM 标准的广泛使用使得在移动电话运营商之间签署 “漫游协定” 后用户的国际漫游变得很平常。GSM 标准当前由 3GPP 组织负责制定和维护。1999 年,WAP 协议使得用户可以通过手

2020-05-10 13:55:45 1238

原创 DPDK — TestPMD

目录文章目录目录前文列表DPDK APP 的指令行参数指定 DPDK App 使用的 lcore(逻辑核)指定 DPDK App 使用的大页内存隔离 DPDK App 使用 lcore使用基于 Intel VT-d 的 Linux IOMMU Pass-Through 来运行 DPDK App前文列表《DPDK — 安装部署》DPDK APP 的指令行参数DPDK App 都是可以接受输入指令行参数的,如下:./rte-app -c COREMASK [-n NUM] [-b <domai

2020-05-09 22:53:05 4157

原创 DPDK — PMD,DPDK 的核心优化

目录文章目录目录前文列表PMD,DPDK 的核心优化PMD 与 UIP 的交互实现PMD 的应用层实现参考文章前文列表《DPDK — 安装部署》《DPDK — 数据平面开发技术》《DPDK — 架构解析》《DPDK — IGB_UIO,与 UIO Framework 进行交互的内核模块》PMD,DPDK 的核心优化我们知道,Linux 内核在收包时有两种方式可供选择,一种是中断方式,另外一种是轮询方式。从哲学的角度来说,中断是外界强加给你的信号,你必须被动应对,而轮询则是你主动地处理事情。

2020-05-09 11:47:03 2233 1

原创 DPDK — IGB_UIO,与 UIO Framework 进行交互的内核模块

目录文章目录目录前文列表IGB_UIO前文列表《DPDK — 安装部署》《DPDK — 数据平面开发技术》《DPDK — 架构解析》IGB_UIO虽然 PMD 是在用户态实现的网卡驱动程序,但实际上还是会依赖于内核提供的策略。其中 UIO 内核模块,是内核提供的用户态驱动框架,而 IGB_UIO(igb_uio.ko)是 DPDK 用于与 UIO 交互的内核模块,通过 igb_uio 来 bind 指定的 PCI 网卡设备到 DPDK 使用。IGB_UIO 借助 UIO 技术来截获中断,并重设

2020-05-08 22:28:17 3792 3

原创 DPDK — 安装部署

目录文章目录目录环境软件依赖安装测试hellowroldPMD 测试环境Intel x86CentOS7NUMA node >= 1Memory >= 4GBNICs >= 2Kernel >= 2.6.33(支持 UIO、HUGETLBFS、PROC_PAGE_MONITOR)HPET(High Precision Event Timer...

2020-05-08 00:45:57 3997 2

原创 DPDK — 数据平台优化技术

目录文章目录目录DPDK 优化技术DPDK 性能影响因素硬件结构的影响OS 版本及其内核的影响OVS 性能问题内存管理CPU 核间无锁通信设置正确的目标 CPU 类型与模式优化方案应用 NUMA 亲和性技术减少跨 NUMA 内存访问应用 CPU 绑核技术减少上下文切换损耗应用大页内存技术减少 TLB missDPDK 优化技术DPDK 优化技术指在 DPDK 应用过程中,为进一步提高各类用户...

2020-05-06 15:24:31 1664 1

原创 DPDK — 架构解析

目录文章目录目录DPDK 基本技术DPDK 实现原理DPDK 架构UIO,DPDK 的基石PMD,DPDK 的核心优化IGB_UIOKNI核心部件库核心部件库对应的 DPDK 核心组件实现平台相关模块几个关键 API 的使用举例DPDK 基本技术DPDK 技术分为基本技术和优化技术两类。其中,前者指标准的 DPDK 数据平面开发包和 I/O 转发实现技术。DPDK 实现原理内核协议栈...

2020-05-06 15:23:38 4335

原创 DPDK — 在 NFV 中的应用

目录文章目录目录DPDK 在 NFV 中的应用DPDK 在 NFV 中的应用NFV 通过在通用 x86 架构硬件上运行的虚拟化网络功能(VNF),为电信运营商和互联网服务商提供了一种灵活的业务部署手段和高效的组网方案,可以支持固/移网络和 IDC 中 NAT、DPI、EPC、FW 等各类业务功能的灵活部署与弹性扩展。不同于典型数据中心业务和企业网业务,电信广域网业务要求网元(如 BNG、D...

2020-05-06 15:22:31 828

原创 计算机组成原理 — ARM 体系结构

目录文章目录目录ARMARM 的架构x86 架构与 ARM 架构的区别ARM 的技术实现ARMARM 架构过去称作进阶精简指令集机器(Advanced RISC Machine,更早称作:Acorn RISC Machine),是一个 32 位精简指令集(RISC)处理器架构,其广泛地使用在许多嵌入式系统设计。由于节能的特点,ARM 处理器非常适用于移动通讯领域,符合其主要设计目标为低耗电的...

2020-05-05 13:30:58 2313

转载 Linux 操作系统原理 — 文件系统 — 管理与优化

目录文章目录目录磁盘空间管理磁盘配额文件系统备份文件系统的一致性文件系统性能高速缓存块提前读减少磁盘臂运动磁盘碎片整理磁盘空间管理文件通常存在磁盘中,所以如何管理磁盘空间是一个操作系统的设计者需要考虑的问题。在文件上进行存有两种策略:分配 n 个字节的连续磁盘空间;或者把文件拆分成多个并不一定连续的块。在存储管理系统中,主要有分段管理和 分页管理 两种方式。正如我们所看到的,按连续字节序列...

2020-05-05 12:55:49 914

转载 Linux 操作系统原理 — 文件系统 — 实现原理

目录文章目录目录文件的实现连续分配链表分配索引分配文件系统在内核中的实现参考文档文件的实现最重要的问题是记录各个文件分别用到了哪些磁盘块。不同的系统采用了不同的方法。下面我们会探讨一下这些方式。分配背后的主要思想是有效利用文件空间和快速访问文件 ,主要有三种分配方案:连续分配链表分配索引分配连续分配最简单的分配方案是把每个文件作为一连串连续数据块存储在磁盘上。因此,在具有 1K...

2020-05-05 12:30:10 1059

原创 Linux 操作系统原理 — 文件系统 — 存储布局

目录文章目录目录文件系统的布局MBR 与分区表磁盘分区创建 MBR 分区创建 GPT 分区分区的格式化分区特性引导块空闲空间块inode 区块、data block 区块与超级块LVM 与 RAIDLVM 逻辑卷管理RAID 磁盘阵列RAID 类型文件系统的布局MBR 与分区表磁盘的 0 号分区称为主引导记录(Master Boot Record,MBR),用来引导(Boot)计算机。在 ...

2020-05-05 11:48:50 940

原创 Linux 操作系统原理 — 文件系统 —文件

目录文章目录目录文件文件的构造文件的类型常规文件ASCII 码文件二进制文件设备文件字符设备文件块设备文件目录文件其他文件文件的属性文件的操作目录的操作文件文件的构造文件的构造有多种方式。上图列出了常用的三种构造方式:上图中的 a 是一种无结构的字节序列,操作系统不关心序列的内容是什么,操作系统能看到的就是字节(Bytes)。其文件内容的任何含义只在用户程序中进行解释。UNIX 和...

2020-05-05 10:37:57 998

原创 C 语言面试题 — int i [ 4 ]={ i [ 2 ]=2 }

目录文章目录目录题目题目#include <stdio.h>int main(void) { int i[4] = {i[2] = 2}; printf("%d %d %d %d\n", i[0], i[1], i[2], i[3]); return 0;}本题考察的是 Sequence Point(序列点)问题。即 int i[4] = {i[...

2020-05-04 22:59:34 854

原创 数据结构 — 堆

目录文章目录目录堆堆的应用堆的基本操作往堆中插入元素删除堆顶元素堆的排序参考文章堆堆可以是一个完全二叉树,这样实现的堆也被称为二叉堆。完全二叉树,它的叶子节点都在最后一层,并且这些叶子节点都是靠左排序的。堆中节点的值都 >=(或 <=)其子节点的值,堆中如果节点的值都 >= 其子节点的值,我们把它称为大顶堆,如果都 <= 其子节点的值,我们将其称为小顶堆。从堆的特...

2020-05-04 22:42:51 762

原创 数据结构 — B+ 树

目录文章目录目录B+ 树B+ 树B+ 树是平衡二叉查找树、双向链表、跳表的结合体。所有的节点值都在最后叶节点上用双向链表连接在了一起,仔细和跳表对比一下,现在如果我们要找 15 ~ 27 这个区间的数只要先找到 15 这个节点(时间复杂度 logn = 3 次)再从前往后遍历直到 27 这个节点即可,即可找到这区间的节点,这样它完美地支持了 MySQL 索引查询的三个需求:快速查找值...

2020-05-04 15:34:29 649

原创 数据结构 — 平衡二叉树

目录文章目录目录平衡二叉树平衡二叉树平衡二叉查找树具有如下性质:若左子树不空,则左子树上所有节点的值均小于它的根节点的值;若右子树不空,则右子树上所有节点的值均大于或等于它的根节点的值;每个非叶子节点的左右子树的高度之差的绝对值(平衡因子)最多为 1。从其特性就可以看到平衡二叉查找树查找节点的时间复杂度是 O(log2n)。...

2020-05-04 15:28:48 629

原创 数据结构 — 双向链表

目录文章目录目录双向链表跳表双向链表双向链表支持顺序查找和逆序查找,如下图:所以双向链表也常被称之为环(Ring),常见于处理网络数据包的内存缓存空间的组织。双向链表的缺点是不支持按某个值或区间的快速查找,也不支持数据的快速插入。跳表跳表是在链表之上加上多层索引构成的,相对于双向链表,支持快速查找,更新,删除。假设我们现在要查找区间 7- 13 的记录,就不用从头开始查找了,只要...

2020-05-04 15:27:10 799

原创 数据结构 — 哈希表

目录文章目录目录哈希表哈希表哈希表,又称为散列表,是根据键值对(Key/Value)进行访问的数据结构,它让 Value 经过哈希函数的转换映射到哈希表对应的位置上,查找效率非常高。哈希索引就是基于哈希表实现的,假设我们对 name 建立了哈希索引,则查找过程如下图所示:对于每一行数据,存储引擎都会对所有的索引列(上图中的 name 列)计算一个哈希码(上图散列表的位置),散列表里的每个...

2020-05-04 15:22:14 807

原创 Linux 操作系统原理 — 网络硬件卸载

目录文章目录目录网络 Offload交换 Offload网络 Offload网络 Offload,主要是指将原本在内核网络协议栈中进行的 IP 分片、TCP 分段、重组、checksum 校验等操作,转移到网卡硬件中进行,使得 CPU 的发包路径更短,消耗更低,从而提高处理性能。一开始这些 Offload 功能都是在网卡上针对特定功能设计一个专门的电路并且带有很小的缓存,去做专门的事情。后...

2020-05-04 15:10:22 1436

原创 QEMU 和 Ceph 的 I/O QoS 实现

目录文章目录目录令牌桶算法漏桶算法前端 QoS:通过 QEMU 的块设备 IO 限速机制进行限速后端 QoS:通过 librbd 的镜像 IO 限速机制进行限速总结参考文章令牌桶算法令牌桶算法是一个非常老牌的 I/O 控制算法,在网络、存储 I/O 上都有着广泛的应用。即:一个固定容量的桶装着一定数量的令牌,桶的容量即令牌数量上限。桶里的令牌每隔固定间隔补充一个,直到桶被装满。一个 IO 请...

2020-05-04 14:57:37 1126

原创 Linux 操作系统原理 — IO 模型

目录文章目录目录基本概念同步与异步阻塞与非阻塞五种 IO 模型阻塞 IO非阻塞 IO同步 IO(信号驱动)异步 IOIO 多路复用selectpollepoll基本概念同步与异步同步是指一个任务的完成需要依赖另外一个任务时,只有等待被依赖的任务完成后,依赖的任务才能算完成。异步是指不需要等待被依赖的任务完成,只是通知被依赖的任务要完成什么工作,依赖的任务也立即执行,只要自己完成了...

2020-05-04 13:18:13 3232

原创 计算机组成原理 — PCIe 总线

目录文章目录目录PCIe 设备的枚举过程PCIe 设备的信息查询PCIe 设备的 Memory 空间访问参考文章PCIe 设备的枚举过程作为 x86 体系重要的一环,PCIe 标准历经了 PCI,PCI-X 和 PCIe,走过了近 30 年时光。下图是一个 PCIe 的拓扑结构示意,PCIe 协议支持 256 个 Bus,每条 Bus 最多支持 32 个 Device,每个 Device 最...

2020-05-03 11:39:03 4811 3

原创 虚拟化技术实现 — KVM 的 I/O 虚拟化

目录文章目录目录前文列表VirtIO为什么需要 VirtIO?VirtIO 的架构VirtIO 的网络实现virtio-net 驱动与设备vhost-net 处于内核态的后端vhost-user 使用 DPDK 加速的后端vDPA 使用硬件加速数据面前文列表《虚拟化技术实现 — 虚拟化技术发展编年史》《虚拟化技术实现 — QEMU-KVM》《虚拟化技术实现 — KVM 的 CPU 虚拟化...

2020-05-03 10:58:54 2531

原创 Linux 操作系统原理 — I/O 系统

目录文章目录目录Linux I/O 读写方式I/O 中断原理DMA 传输原理传统 I/O 方式传统读操作传统写操作参考文章Linux I/O 读写方式Linux 提供了轮询、I/O 中断以及 DMA 传输这 3 种磁盘与主存之间的数据传输机制。其中轮询方式是基于死循环对 I/O 端口进行不断检测。I/O 中断方式是指当数据到达时,磁盘主动向 CPU 发起中断请求,由 CPU 自身负责数据的...

2020-05-03 00:18:38 1966 3

原创 Python GIL 对线程并发性能的影响

目录文章目录目录Python GIL 对线程并发性能的影响Python 的线程安全问题Python 的原子性操作Python 的线程库锁Python GIL 对线程并发性能的影响说到这里,不妨继续引入 Python GIL 的问题。在多处理器时代,程序要想充分的利用计算平台的性能,就必须按照并发方式进行设计。但是很遗憾,对于 Python 程序而言,不管你的服务器拥有多少个处理器,任何时候...

2020-05-02 23:34:00 747

中国联通智能MEC技术白皮书.pdf

中国联通智能MEC技术白皮书.pdf

2020-04-30

5G 核心网关键技术和对业务的支撑.pdf

5G 核心网关键技术和对业务的支撑.pdf

2020-04-30

H3C_CAS安装指导V1.0.docx

H3C_CAS安装指导V1.0.docx

2017-02-15

范桂飓的留言板

发表于 2020-01-02 最后回复 2020-04-09

AWS与Openstack

发表于 2016-09-13 最后回复 2016-09-13

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

TA关注的人 TA的粉丝

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