![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
云计算
文章平均质量分 86
庾志辉
这个作者很懒,什么都没留下…
展开
-
openVswitch(OVS)源代码分析之简介
云计算是个全世界的话题,所以也有全世界的能人异士来为实现这个云计算而奋斗。我现阶段遇到的有关云计算的技术就是openVswitch和docker技术。那就先从openVswitch开始介绍起,我会用一系列blog来分析openVswitch的相关数据结构和工作流程,以及各个重要模块的分析。所有的介绍都是基于源码的分析,希望对初学着有点用。 openVswitch,根据其名就可以知道这是一个开放的虚拟交换机(open virtual switch);它是实现网络虚拟化SDN的基础,它是在开源的Apache原创 2014-09-09 23:39:52 · 16825 阅读 · 9 评论 -
vim编译器中多行注释方法(尤其对python代码注释)
在vim命令下编写python程序时,有时候要进行多行注释,比较麻烦。因为python不像c语言那样可以用/*xxxx*/进行多行注释,只能每一行用#来注释,如果有几百行那得注释到什么时候。除了老老实实的一行一行注释外,这里再分享几种方法: 第一种:把要注释的内容当作字符串,用‘xxx’注释掉;不过不建议用这种方法。 第二种:用函数把要注释的内容放到其中,不调用这个函数,那么这些要注释的内容就没有用了,这个比第一种好些。 第三种:这是我比较推荐的,也是今天同事原创 2014-12-05 14:46:00 · 5775 阅读 · 0 评论 -
openVswitch(OVS)源代码分析 upcall调用(之linux中的NetLink通信机制)
如果看了前面的源码分析的就会知道,在什么情况下会调用upcall函数呢?就是在一个数据包查找不到相应的流表项时,才会调用upcall函数(比如一个数据包第一次进入这个内核,里面没有为这个数据包设定相应的流表规则)。upcall函数的调用其实就是把数据包的信息下发到用户 空间去,而由内核空间到用户空间的通信则要用到linux中的NetLink机制。所以熟悉下NetLink通信可以知道upcall函数调用需要什么样的参数以及整个函数的作用和功能。原创 2014-11-04 19:13:12 · 4600 阅读 · 0 评论 -
openVswitch(OVS)源代码分析 upcall调用(一)
看了下upcall()函数的大体实现,其中主线是用Linux内核中的NetLink通信机制。而其中涉及到一些其他知识点,大部分在前面已经分析过了,除了vlan知识。现在来想下为什么有upcall()函数?因为比如当第一个数据包过来时(前期没有和这个数据包的ip主机通信过),ovs中没有任何有关于该主机的信息,更没有设置一些规则来处理接受到该主机的数据包。所以当第一次接受到这个数据包时,就要提取出数据包中一些信息,下发到用户空间去,让用户空间做些规则用来处理下次接收到的该类数据包。原创 2014-11-27 15:07:34 · 6124 阅读 · 4 评论 -
sk_buff整理笔记(二、操作函数)
sk_buff整理笔记(一、数据结构)这一篇要讲的是内核为sk_buff结构提供的一些操作函数:(a)skb_put(), (b)skb_push(), (c)skb_pull(), and (d)skb_reserve(); 四大指针分别是:head、data、tail、end;这四个指针都是指向了数据区的,数据区中存放的是协议头和数据。head和end指针是每个数据包一样的,也是有这两个指针来确定数据区的大小的。最开始的时候head、data、tail三个指针都是指向一起的,当有协议数据加进来时才更原创 2014-08-20 23:21:05 · 8696 阅读 · 1 评论 -
制作各种docker镜像
制作各种docker镜像及命令原创 2014-11-14 23:27:48 · 38648 阅读 · 0 评论 -
Linux下的网络配置命令
Linux下的网络结构是非常复杂的,但是基本的用户空间网络配置还是不怎么难的。如果你的Linux还是没有网络的话或者连接网络有问题的话,那么赶紧跟着一起配置下或者一步步来查看下有什么问题。当然我的Linux是centos6.5版本的,没有桌面,全终端命令操作。如果每次重启网络后都会还原/etc/resolv.conf。则需要关闭NetworkManager,cd/etc/init.d到目录中执行命令:原创 2014-11-29 14:04:56 · 10900 阅读 · 0 评论 -
父进程为1号进程(ppid=1)的僵尸进程处理和分析
但是,父进程为1号进程的进程 其实也是有可能成为僵尸进程的。下面说几种情况:1、进程还在被其它进程使用,退出;2、进程的子线程还在执行任务,但主线程已经死掉了(可能主线程已经被杀了,systemd停止服务时会发SIGTERM信号);3、进程阻塞在某一IO请求上,这时控制权已交到内核手上,这时如果子进程被KILL掉, 那么就成为父进程ID为1的僵尸进程,这个进程不会退出,会一直阻塞直到IO请求被满足;原创 2016-11-02 21:02:10 · 35201 阅读 · 0 评论 -
qemu-kvm内存虚拟化原理
关系:客户机虚拟地址---> 哈希表 ---> 影子页表 ---> 虚拟地址--->宿主物理地址; 哈希表之所以用物理地址映射(到影子页表是用虚拟机地址的)是因为每个客户机只有一个哈希表,而虚拟地址每个客户机有多个进程对应的虚拟机地址,也有多个影子表。而物理地址只有一个;以通过物理地址唯一来对应哈希表唯一,并且影子页表也是通过cr3来确定唯一;原创 2017-03-20 11:59:18 · 1633 阅读 · 0 评论 -
openVswitch(OVS)源代码之linux RCU锁机制分析
RCU是read copy udate的缩写,按照单词意思就知道这是一种针对数据的读、复制、修改的保护锁机制。锁机制原理: 第一、写数据的时候,不需要像读写锁那样等待所有锁的释放。而是会拷贝一份数据区的副本,然后在副本中修改,等待修改完后。用这个副本替换原来的数据区,替换的时候就要像读写锁中上写锁那样,等到原数据区上所有访问者都退出后,才进行数据的替换;根据这种特性可以推断出,用RCU锁可以有多个写者,拷贝了多份数据区数据,修改后各个写着陆续的替换掉原数据区内容。 第二、读数原创 2014-10-15 19:07:11 · 4815 阅读 · 9 评论 -
openVswitch(OVS)源代码分析之数据结构
记得Pascal之父、结构化程序设计的先驱Niklaus Wirth最著名的一本书,书名叫作《算法 + 数据结构 = 程序》。还有位传奇的软件工程师Frederick P. Brooks曾经说过:“给我看你的数据”。因此可见数据结构对于一个程序来说是多么的重要,如果你不了解程序中的数据结构,你根本就无法去理解整个程序的工作流程。所以在分析openVswitch(OVS)源代码之前先来了解下openVswitch中一些重要的数据结构,这将对你分析后面的源代码起着至关重要的作用。 下面是整个openVswit原创 2014-09-10 22:18:45 · 15739 阅读 · 7 评论 -
一致性hash算法 - consistent hashing
consistent hashing 算法早在 1997 年就在论文 Consistent hashing and random trees 中被提出,目前在cache 系统中应用越来越广泛;1 基本场景比如你有 N 个 cache 服务器(后面简称 cache ),那么如何将一个对象 object 映射到 N 个 cache 上呢,你很可能会采用类似下面的通用方法计算 object 的转载 2014-08-25 17:27:52 · 1421 阅读 · 0 评论 -
sk_buff 整理笔记(一、数据结构)
对sk_buff结构体以及相关的sk_buff_head结构体、sk_buff结构体数据区、sk_shared_info分片结构体、分片结构体的数据区的常用成员字段进行透彻的分析。以及分析这几个结构体的关系与一个sk_buff数据包的形成和其data指针的变化。 (1)sk_buff->data_len:只计算分片中数据的长度,即是分片结构体中page指向的数据区长度。这个在分片结构体中会再详细讲解下。 (2)sk_buff->len:表示当前缓冲区中数据块的大小的总长度。它包括主缓冲中(即是sk_原创 2014-08-18 21:47:11 · 30572 阅读 · 23 评论 -
体验云计算的成果----亚马逊免费云计算服务
亚马逊云计算服务推出对mazon EC2 Micro Instance进行免费使用一年,其实在2011年11月就可以免费注册使用了(我是因为工作需要最近才关注它)。不过免费的主机中配置都相对来说比较低的,内存为0.613G,硬盘为10G,系统有多种:Ubuntu、suce、RedHat、Amazon、还有windows等等,支持32位和64位。下面就来看下怎么申请它的免费服务。体验云计算的成果----亚马逊免费云计算服务。亚马逊(本blog要说的就是怎么使用亚马逊免费云计算服务)是全球云计算公司最成熟的,最原创 2014-10-11 21:18:06 · 2454 阅读 · 0 评论 -
openVswitch(OVS)源代码分析之工作流程(哈希桶结构体的解释)
需要的流表项链表头结点比较少(total_nr_elements < 1024),那么不需要分配一个parts指针(一个parts数组指针元素有一个页大小的空间)来存储,如果total_nr_elements不大于1020,就没必要分配parts指针了,直接在flex_array结构体(该结构体的大小为一个页,有3个int型和1个u32成员,所以剩下的就是1020 * 4个字节了)中存储就得了。来分析调用了static inline int elements_fit_in_base(struct flex_原创 2014-10-09 21:31:01 · 4838 阅读 · 3 评论 -
openVswitch(OVS)源代码的分析技巧(哈希桶结构体为例)
于是在整个项目中进行搜索得,也可以理性的去分析下哪个函数会调用下面的flex_array申请函数,其实就是buckets内存申请函数(alloc_buckets)了;在该函数中有行代码为:buckets = flex_array_alloc(sizeof(struct hlist_head *),n_buckets, GFP_KERNEL); 至此已经找到了 element_size的含义了,即:哈希头指针的大小。那么就剩下total参数了。 继续往上个查找,看看哪个函数调用了alloc_bu原创 2014-09-25 21:37:01 · 5293 阅读 · 0 评论 -
openVswitch(OVS)源代码分析之工作流程(key值得提取)
我依然去简单分析key值得提取函数,有两个原因:第一、key值作为数据结构在openVswitch中是非常重要的,后期的一些流表查询和匹配都要用到key值;第二、想借机复习下内核网络协议栈的各层协议信息;原创 2014-09-22 20:53:40 · 6195 阅读 · 2 评论 -
openVswitch(OVS)源代码分析之工作流程(收发数据包)
加载网卡时把网卡绑定到openVswitch端口上(ovs-vsctl add-port br0 eth0),绑定后每当有数据包过来时,都会调用该函数,把数据包传送给这个函数去处理。而不是像开始那样(未绑定前)把数据包往内核网络协议栈中发送,让内核协议栈去处理。openVswitch中数据包接受函数为:void ovs_vport_receive(struct vport *vport, struct sk_buff *skb);函数,该函数所在位置为:datapath/vport.c中。数据包进入open原创 2014-09-16 22:52:23 · 13668 阅读 · 7 评论 -
openVswitch(OVS)源代码分析之工作流程(flow流表查询)
本文分析了openVswitch中的核心部分flow流表查询(flow_lookup),从流表查询的大体框架或者说理论开始一步一步的结合openVswitch中的数据结构图示(openVswitch的整体框架图)分析了flow查询步骤;最后又分析了openVswitch的源代码,以ovs_flow_lookup()函数为主线,一层一层深入的分析了流表查询的源代码实现。根据这个指针遍历整个流表项节点元素(就是struct sw_flow结构体元素),每遍历得到一个流表项sw_flow结构体元素,就把流表项中原创 2014-09-23 21:03:35 · 15098 阅读 · 5 评论 -
openVswitch(OVS)源代码分析之工作流程(数据包处理)
在openVswitch中数据包的处理是其核心技术,该技术分为三部分来实现:第一、根据skb数据包提取相关信息封装成key值;第二、根据提取到key值和skb数据包进行流表的匹配;第三、根据匹配到的流表做相应的action操作(若没匹配到则调用函数往用户空间传递数据包)。函数为: void ovs_dp_process_received_packet(struct vport *p, struct sk_buff *skb);当接受到一个数据包后,自然而然的就应该是开始对其进行处理了。上篇的接受数据包函数:原创 2014-09-18 20:51:17 · 11137 阅读 · 14 评论 -
多线程中使用fork()导致分页
最近和同事一起处理了一个 fuse 的大bug;首先看堆栈:Core was generated by `/sf/cluster/bin/pmxcfs'.Program terminated with signal SIGABRT, Aborted.#0 0x00007f2debdcc475 in raise () from /lib/x86_64-linux-gnu/libc.so.6(gdb...原创 2018-04-28 17:41:18 · 1202 阅读 · 0 评论