自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 memcached 源码分析

1.Memcached概述memcached是一个高性能的分布式内存缓存服务器,memcached在Linux上可以通过yum命令安装,这样方便很多,在生产环境下建议用Linux系统,memcached使用libevent这个库在Linux系统上才能发挥它的高性能。它的分布式其实在服务端是不具有分布式的特征的,是依靠客户端的分布式算法进行了分布式,memcached是一个纯内存型的数据库,这样在读写速度上相对来说比较快。MemCache虽然被称为分布式缓存,但是MemCache本身完全.

2022-04-22 19:37:52 1877

原创 redis 常见问题

12 Redis 常见问题12.1 缓存击穿缓存在某个时间点过期的时候,恰好在这个时间点对这个Key有大量的并发请求过来,这些请求发现缓存过期一般都会从后端DB加载数据并回设到缓存,这个时候大并发的请求可能会瞬间把后端DB压垮。12.1.1 出现问题的原因1、Key过期:对于第一个原因是因为在Redis中,Key有过期时间,如果某一个时刻(假如商城做活动,零点开始)key失效,那么零点之后对某一个商品查询请求将全都压到数据库上,导致数据库崩。2、Key被页面置换淘汰:因为内存是有限的

2022-04-11 10:53:32 6132

原创 redis 实践笔记和源码分析

REDIS 学习笔记魏言华 联系方式:15313236435目录1. Redis主从部署... 21.1 配置文件方式搭建主从集群... 41.2 容灾处理... 61.3 主从架构特点... 91.4 主从复制原理... 91.5主从报活... 191.6主从常见问题... 212 哨兵部署... 242.1 哨兵的作用... 242.2 哨兵部署架构... 252.3 哨兵系统的部署方法... 262.4 哨兵的基本原理... 30...

2022-03-29 18:10:19 2467 1

原创 tc ebpf 实践

1. 用 tc 加载 BPF 程序给定一个为 tc 编译的 BPF 对象文件prog.o, 可以通过tc命令将其加载到一个网 络设备(netdevice)。但与 XDP 不同,设备是否支持 attach BPF 程序并不依赖驱动(即任何网络设备都支持 tc BPF)。下面的命令可以将程序 attach 到em1的ingress网络:$ tc qdisc add dev em1 clsact$ tc filter add dev em1 ingress bpf da obj pro...

2021-10-11 17:49:36 2231

原创 bcc安装和基本工具使用说明

目录0. bcc安装0.1 yum 安装0.2 源码安装1.cachestat2.cachetop3. funccount4. trace4.1 trace4.2 trace查看它的传入的参数bcc 提供的所有工具就都安装到 /usr/share/bcc/tools 这个目录中了。不过这里提醒你,bcc 软件包默认不会把这些工具配置到系统的 PATH 路径中,所以你得自己手动配置:$ export PATH=$PATH:/usr/share/bcc/too...

2021-10-11 17:30:39 4157

原创 XDP类型的BPF程序

经过上一节的内容,bpf程序和map已经加载到内核当中了。什么时候bpf程序才能发挥它的作用呢?这就需要bpf的应用系统把其挂载到适当的钩子上,当钩子所在点的路径被执行,钩子被触发,BPF程序得以执行。目前应用bpf的子系统分为两大类:tracing:kprobe、tracepoint、perf_event filter:sk_filter、sched_cls、sched_act、xdp、cg_skb接下来分析XDP类型的bpf程序的绑定和触发过程1.Loading via iprou..

2021-10-11 17:20:34 1158

原创 ebfp编程常用API介绍

目录1 用户态API1.1 加载prog1.2 查询prog的信息1.3 prog绑定到固定的dev上1.4 创建MAP1.5查询MAP1.6 Object Pinning(钉住对象)2 内核态API2.1 内核总体API2.2 bpf 加载2.2.1 prog 加载2.3 bpf map 操作2.3.1 map 创建2.3.2 map 查找2.3.3BPF_FUNC_map_lookup_elem2.4 obj pin(盯住对象)2...

2021-10-11 16:22:54 2355

原创 rdma网络介绍

2021-09-27 17:09:03 224

原创 rdma 编程详解

1.相关名词解释1.1 rdma-core指开源RDMA用户态软件协议栈,(用户空间的驱动)包含用户态框架、各厂商用户态驱动、API帮助手册以及开发自测试工具等。rdma-core在github上维护,我们的用户态Verbs API实际上就是它实现的。https://github.com/linux-rdma/rdma-core1.2kernel RDMA subsystem指开源的Linux内核中的RDMA子系统,(内核空间的驱动)包含RDMA内核框架及各厂商的驱动。RDMA..

2021-09-24 09:41:38 2895

原创 rdam 原理解析

1.rdma介绍在网络融合的大趋势下出现的RoCE,使高速、超低延时、极低cpu使用率的RDMA得以部署在目前使用最广泛的以太网上。对比传统DMA的内部总线IO,RDMA通过网络在两个端点的应用软件之间实现buffer的直接传递;而对比传统的网络传输,RDMA又无需操作系统和协议栈的介入。RDMA可以轻易实现端点间的超低延时、超高吞吐量传输,而且基本不需要CPU、OS的资源参与,在高速网络环境下,不必再为网络数据的处理和搬移耗费过多资源。一言概之,RDMA三大特性:CPU offload

2021-09-22 19:57:26 2370

原创 rdma 介绍

1. DMA和RDMA概念RDMA是Remote Direct Memory Access的缩写,通俗的说可以看成是远程的DMA技术,为了解决网络传输中服务器端数据处理的延迟而产生的。RDMA允许用户态的应用程序直接读取或写入远程内存,而无内核干预和内存拷贝发生。起初,只应用在高性能计算领域,最近,由于在大规模分布式系统和数据中心中网络瓶颈越来越突出,逐渐走进越来越多人的视野。1.1 DMA传统内存访问需要通过CPU进行数据copy来移动数据,通过CPU将内存中的Buffer1移动到Buff

2021-09-22 18:15:15 3319

转载 linux kernel log 整理

熟悉linux内核,或者看过linux内核源码的同学就会知道,在内核中,有一个类似于c语言的输出函数,叫做printk,使用它,我们可以打印各种我们想要的信息,比如内核当前的运行状态,又或者是我们自己的调试日志等,非常方便。那当我们调用printk函数后,这些输出的信息到哪里去了呢?我们又如何在linux下的用户态,查看这些信息呢?为了解答这些疑问,我画了一张printk全景图,放在了文章开始的部分,这张图既包含了printk在内核态的实现,又包含了其输出的信息在用户态如何查看。我们可...

2021-09-22 16:13:12 3252

原创 docker block资源限速

注:目前 Block IO 限额只对 direct IO(不使用文件缓存)有效。block IO 权重默认情况下,所有容器能平等地读写磁盘,可以通过设置--blkio-weight参数来改变容器 block IO 的优先级。--blkio-weight与--cpu-shares类似,设置的是相对权重值,默认为 500。在下面的例子中,container_A 读写磁盘的带宽是 container_B 的两倍。docker run -it --name container_A --bl...

2021-09-18 15:29:06 271

原创 ovs与ovs+dpdk架构分析

OVS内核态架构图内核态与用户态交互OVS的架構分成快速路徑(fast path)與慢速路徑(slow path)快速路徑是內核空間(kernel space)的openvswitch.ko慢速路徑是用戶空間(user space)的ovs-vswitchdOVS+DPDK架构dpif-netdev:用户态的快速通路,实现了基于netdev设备的dpif API。ofproto-dpif:实现了基于dpif层的ofproto API。netdev-dpdk:...

2021-09-14 16:54:24 1554

原创 基于DPDK实现VPC和IDC间互联互通的高性能网关

目录1 背景2 CLOUD-DPVS网关整体架构2.1 CLOUD-DPVS网关整体架构选型3 CLOUD-DPVS网关方案概述3.1 高可用方案的改进3.1.1 支持BFD探测3.2 负载均衡转发层适配3.2.1FULLNAT模式3.2.2 引入VPC的概念​3.2.3 cloud-dpvs转发原理3.2.3 增加VXLAN模块4 CLOUD-DPVS后续工作5 参考文章1 背景随着云计算和网络技术的不断发展,越来越多的业务有着上云的需求。...

2021-09-12 18:00:47 636

原创 DDOS攻击/防御介绍

1.防御流程图 1 检测中心分析防护网络的分光或者镜像流量 2 检测中心发现流量异常,上报受攻击IP地址到管理中心 3 管理中心向清洗中心下发引流策略 4 通过BGP路由通告,清洗中心将被攻击IP的流量重定向到自身,实现流量牵引 5 清洗中心通过多层过滤的防御技术,丢弃攻击流量,转发正常流量 .

2021-09-12 17:46:20 6135 3

原创 openvswitch vlan网络实践

1.建立ovs接口连接两个namespace组成二层网络 br0 +--------------------------------------+ +--+ +--+ +---+ | tap1 tap2| +---+ | +--+ +--+

2021-09-10 13:11:13 1461

原创 openvswitch 编译安装

前面几个章节主要分析了内核中的datapath,后续章节重点分析下用户态的Vswitchd1 openvswitch的安装yum install openvswitchsystemctl start openvswitchovsdb-server /etc/openvswitch/conf.db -vconsole:emer -vsyslog:err -vfile:info --remote=punix:/var/run/openvswitch/db.sock --private-ke

2021-09-09 18:19:20 1435

原创 linux wa%过高,iostat查看io状况

用户反馈一台虚机监控ssh失败,其top指标中wa搞到87.2%Cpu(s): 0.1%us, 0.1%sy, 0.0%ni, 12.5%id, 87.2%wa, 0.0%hi, 0.0%si, 0.0%st使用top命令的时候会看到这么一行us:用户态使用的cpu时间比sy:系统态使用的cpu时间比ni:用做nice加权的进程分配的用户态cpu时间比id:空闲的cpu时间比wa:cpu等待磁盘写入完成时间hi:硬中断消耗时间si:软中断消耗时间st:...

2021-09-09 15:20:51 2995

原创 virtio 与vhost_net介绍

1. virtio基本构建模块virtio是一种I/O半虚拟化解决方案,是一套通用I/O设备虚拟化的程序,是对半虚拟化Hypervisior中的一组通用I/O设备的抽象。是标准化的的开放接口,以使得VM能够访问简化的设备,如块设备和网络设备等。一个guest VM或者guest指的是在物理计算机上安装、执行和托管的VM。托管guest VM的计算机称之为host,它为guest VM提供资源。Guest VM通过hypervisor在host OS之上运行独立的OS。例如,host将为guest提供

2021-09-07 20:27:06 3905 1

原创 kvm简单介绍

X86 操作系统是设计在直接运行在裸硬件设备上的,因此它们自动认为它们完全占有计算机硬件。x86 架构提供四个特权级别给操作系统和应用程序来访问硬件。Ring 是指 CPU 的运行级别,Ring 0是最高级别,Ring1次之,Ring2更次之……就 Linux+x86 来说,操作系统(内核)需要直接访问硬件和内存,因此它的代码需要运行在最高运行级别 Ring0上,这样它可以使用特权指令,控制中断、修改页表、访问设备等等。 应用程序的代码运行在最低运行级别上ring3上,不能做受控操作。如果要...

2021-09-07 17:30:33 1411

原创 linux skb 结构和相关操作函数分析

sk_buff是Linux网络中最核心的结构体,它用来管理和控制接收或发送数据包的信息。各层协议都依赖于sk_buff而存在。内核中sk_buff结构体在各层协议之间传输不是用拷贝sk_buff结构体,而是通过增加协议头和移动指针来操作的。如果是从L4传输到L2,则是通过往sk_buff结构体中增加该层协议头来操作;如果是从L2到L4,则是通过移动sk_buff结构体中的data指针来实现,不会删除各层协议头。这样做是为了提高CPU的工作效率。1.skb_buff关键结构成员struct sk_b

2021-09-06 10:36:56 5831

原创 openvswitch datapath路径的actions处理流程分析

上一章节分析了datapatch中的流表匹配,根据匹配结果会有两个流程,如果匹配成功会执行actions动作,如果没有匹配的流量,会通过upcall流程上送用户态ovs,本章重点分析流表匹配成功时,ovs的actions处理流程。void ovs_dp_process_packet(struct sk_buff *skb, struct sw_flow_key *key){ const struct vport *p = OVS_CB(skb)->input_vport; struct d

2021-09-02 20:52:35 697

原创 openvswitch的转发数据面datapath中的流表源码分析

1.datapath的底层数据结构关系流表采用hash的方式排列存放,流表的hash头结点存储数据结构如下该hash 桶的初始化函数alloc_buckets (),生成的数据格式可参考如下2 流表创建流程分析2.1 flow table数据结构1> flow_table流表结构, 每个datapath都有一个流表2> table_instance流表实例, 其中的buckets用来存放具体的flow条目,存储方式参见FlexArray...

2021-08-30 18:32:51 730

原创 openvswitch的数据转发面datapath 收发包源码分析

上一章节分析了dp和vport的创建流程以及与内核的交互接口,本章重点分析下datapath的收发包流程1.收包处理流程以netdev类型接口为例进行源码分析,前面章节提到了在把dev加入到ovs时,注册了rx_handler收发包函数netdev_frame_hook|---netdev_port_receive |---ovs_netdev_get_vport(skb->dev) 通过skb->dev获取vport,在注册rx_handler时,附带了一个参数,...

2021-08-27 14:06:59 325

原创 OVS与datapath交互源码分析

前面章节分析了ovs与datapath通过netlink通信机制,本章节重点分析下ovs与datapath的具体交互流程。1.交互消息分类datapath在初始时注册6类消息,用于ovs与datapath消息传递。MODULE_ALIAS_GENL_FAMILY(OVS_DATAPATH_FAMILY);MODULE_ALIAS_GENL_FAMILY(OVS_VPORT_FAMILY);MODULE_ALIAS_GENL_FAMILY(OVS_FLOW_FAMILY);MODULE_AL

2021-08-26 18:02:59 683

原创 openvswitch 的patch端口与datapath类型

1.patch端口ovs的patch端口,用于连接两个网桥,命令如下ovs-vsctl add-port br10 patch3 -- set interface patch3 type=patch options:peer=patch4ovs-vsctl add-port br12 patch4 -- set interface patch4 type=patch options:peer=patch3patch类型端口,不会将其添加到datapath中,在port_add函数中有

2021-08-24 20:47:51 1355

原创 vswitch 与内核datapath通信机制 Generic Netlink介绍

1.netlink介绍netlink socket是一种用于用户态进程和内核态进程之间的通信机制。它通过为内核模块提供一组特殊的API,并为用户程序提供了一组标准的socket接口的方式,实现了全双工的通讯连接。netlink仅支持32种协议类型,目前内核中已经使用其中21个,对于用户需要定制特殊的协议类型略显不够,为此Linux设计了这种通用Netlink协议簇,用户可在此之上定义更多类型的子协议。#define NETLINK_ROUTE 0 /* Routing/device hook

2021-08-24 11:22:22 526

原创 ovs datapath 源码分析(一) internal/netdev/vxlan三类端口的注册创建

1 datapath数据结构表datapath为 ovs内核模块,负责执行数据交换,也就是把从接收端口收到的数据包在流表中进行匹配,并执行匹配到的动作。一个datapath可以对应多个vport,一个vport类似物理交换机的端口概念。一个datapth关联一个flow table,一个flow table包含多个条目,每个条目包括两个内容:一个match/key和一个action2数据流向一般的数据包在 Linux 网络协议中的流向为上图中的蓝色箭头流向:网卡eth0 收到数据..

2021-08-20 17:34:00 1409

转载 openstack ovs-vswitch收包流程

数据包从物理网卡进入虚拟机的流程物理网卡处理NIC 收到数据包,会先将高低电信号转换到网卡 FIFO 存储器。NIC 首先申请 Ring buffer 的描述,根据描述找到具体的物理地址,NIC 会使用 DMA 将数据包从 FIFO 队列写到该物理地址指向的空间,其实就是 skb_buffer 中。 此时数据包已经被转移到 skb_buffer 中,因为是 DMA 写入,所以内核并没有监控数据包写入情况,这时候 NIC 触发一个硬中断,每一个硬件中断会对应一个中断号,且指...

2021-08-19 15:29:12 2099

原创 linux 内核vxlan收发包流程

1.vxlan口收包处理流程前面几章详细介绍了vxlan接口的使用,而且已经知道vxlan是 MAC IN UDP中的封装,因此,在解封装之前,一切按照原有流程走,在此复习一下内核收发包流程(驱动层的数据处理这次不再解析,直接从__netif_receive_skb_core开始)#物理网卡处理中断,触发softirqi40e_intr └─napi_schedule_irqoff#i40e softirq把包放到per cpu backlog,触发softirqi40e_napi_p

2021-08-16 19:44:38 2721

原创 openvswitch 架构介绍

OVS架构用户空间主要组件有数据库服务ovsdb-server和守护进程ovs-vswitchd。kernel中是datapath内核模块。最上面的Controller表示OpenFlow控制器,控制器与OVS是通过OpenFlow协议进行连接,控制器不一定位于OVS主机上,下面分别介绍图中各组件ovs-vswitchdovs-vswitchd守护进程是OVS的核心部件,它和datapath内核模块一起实现OVS基于流的数据交换。作为核心组件,它使用openflow协议与上层OpenFlo.

2021-08-13 15:21:09 2137

原创 openvswitch实践四 mirror 端口镜像

镜像源select_all:布尔类型(true,false)。设置为 true 时,表示此网桥上的所有流量。 select_dst_port:字符串(端口名称)。表示此端口接收的所有流量。 select_src_port:字符串(端口名称)。表示此端口发送的所有流量。 select_vlan:整形(1-4096)。表示携带此VLAN标签的流量。镜像目的output_port:字符串(端口名称)。接收流量报文的观察端口。 output_vlan:整形(1-4096)。表示只修改VLAN标签,

2021-08-12 10:29:34 2823

原创 openvswitch实践三 vxlan内核态实现与openvswitch实现对比

1.vxlan内核态实现1.1 测试环境1.2 试验配置host 172.16.0.100brctl addbr br0ip addr add 10.1.1.2/24 dev br0ip link set dev br0 upip link add vxlan0 type vxlan id 1 group 239.1.1.1 dev eth1 dstport 4789brctl addif br0 vxlan0ip link set dev vxlan0 up..

2021-08-11 21:20:39 579

原创 openvswitch实践二 vxlan隧道互联互通

1.试验环境2.试验配置2.1 host 172.16.0.100 配置ovs-vsctl add-br br1ovs-vsctl add-br br2ovs-vsctl add-port br1 tap1 -- set Interface tap1 type=internalovs-vsctl add-port br2 tap2 -- set Interface tap2 type=internalip netns add ns1ip netns add ns2i.

2021-08-11 14:11:41 1528

原创 openvswitch 实践一 创建patch port连接ovs两个桥

实验环境配置ovs桥ovs-vsctl add-br br1ovs-vsctl add-br br2ovs-vsctl add-port br1 tap1 -- set Interface tap1 type=internalovs-vsctl add-port br2 tap2 -- set Interface tap2 type=internalip netns add ns1ip netns add ns2ip link set tap1 ...

2021-08-11 11:55:41 1470

原创 虚拟化网络

2021-07-26 21:01:54 241

原创 xdp 原理介绍

2020-12-09 18:34:52 2071

原创 VXLAN介绍

 1背景1.1云计算成为企业IT建设新形态云计算,凭借其在系统利用率高、人力/管理成本低、灵活性/可扩展性强等方面表现出的优势,已经成为目前企业IT建设的新形态;而在云计算中,大量的采用和部署虚拟化是一个基本的技术模式。服务器虚拟化技术的广泛部署,极大地增加了数据中心的计算密度;同时为了实现业务的灵活变更,虚拟机VM(Virtual Machine)需要能够在网络中不受限制的迁移(如图1-1所示)...

2018-05-30 08:19:28 58323 3

原创 spider分布式引擎

 一、Spider引擎简介1、spider 引擎是什么Spider引擎是一个内置的支持数据分片特性的存储引擎,支持分区和XA事务,该引擎可以在服务器上建立和远程数据库表之间的链接,操作起来就像操作本地的表一样。并且对后台数据库的引擎没有任何限制。目前spider引擎已经集成到了MariaDB中,最新的版本是spider3.2.37.2、spider架构图 3、spider优劣势分析优势分析 1 ...

2018-05-29 08:08:34 11162

redis 详细实践笔记

redis 实践笔记,集群搭建,源码分析

2022-03-29

空空如也

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

TA关注的人

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