多线程中使用fork()导致分页

最近和同事一起处理了一个 fuse 的大bug;首先看堆栈:Core was generated by `/sf/cluster/bin/pmxcfs'.Program terminated with signal SIGABRT, Aborted.#0  0x00007f2debdcc475 i...

2018-04-28 17:41:18

阅读数:111

评论数:0

qemu-kvm内存虚拟化原理

关系:客户机虚拟地址---> 哈希表 ---> 影子页表 ---> 虚拟地址--->宿主物理地址; 哈希表之所以用物理地址映射(到影子页表是用虚拟机地址的)是因为每个客户机只有一个哈希表,而虚拟地址每个客户机有多个进程对应的虚拟机地址,也有多个影子表。而物理地址只有一...

2017-03-20 11:59:18

阅读数:425

评论数:0

父进程为1号进程(ppid=1)的僵尸进程处理和分析

但是,父进程为1号进程的进程 其实也是有可能成为僵尸进程的。下面说几种情况: 1、进程还在被其它进程使用,退出; 2、进程的子线程还在执行任务,但主线程已经死掉了(可能主线程已经被杀了,systemd停止服务时会发SIGTERM信号); 3、进程阻塞在某一IO请求上,这时控制权已交到内核手上,这...

2016-11-02 21:02:10

阅读数:8737

评论数:0

vim编译器中多行注释方法(尤其对python代码注释)

在vim命令下编写python程序时,有时候要进行多行注释,比较麻烦。因为python不像c语言那样可以用/*xxxx*/进行多行注释,只能每一行用#来注释,如果有几百行那得注释到什么时候。除了老老实实的一行一行注释外,这里再分享几种方法: 第一种:把要注释的内容当作字符串,用‘x...

2014-12-05 14:46:00

阅读数:3985

评论数:0

Linux下的网络配置命令

Linux下的网络结构是非常复杂的,但是基本的用户空间网络配置还是不怎么难的。如果你的Linux还是没有网络的话或者连接网络有问题的话,那么赶紧跟着一起配置下或者一步步来查看下有什么问题。当然我的Linux是centos6.5版本的,没有桌面,全终端命令操作。如果每次重启网络后都会还原/etc/r...

2014-11-29 14:04:56

阅读数:7351

评论数:0

openVswitch(OVS)源代码分析 upcall调用(一)

看了下upcall()函数的大体实现,其中主线是用Linux内核中的NetLink通信机制。而其中涉及到一些其他知识点,大部分在前面已经分析过了,除了vlan知识。现在来想下为什么有upcall()函数?因为比如当第一个数据包过来时(前期没有和这个数据包的ip主机通信过),ovs中没有任何有关于该...

2014-11-27 15:07:34

阅读数:4203

评论数:3

制作各种docker镜像

制作各种docker镜像及命令

2014-11-14 23:27:48

阅读数:31369

评论数:0

openVswitch(OVS)源代码分析 upcall调用(之linux中的NetLink通信机制)

如果看了前面的源码分析的就会知道,在什么情况下会调用upcall函数呢?就是在一个数据包查找不到相应的流表项时,才会调用upcall函数(比如一个数据包第一次进入这个内核,里面没有为这个数据包设定相应的流表规则)。upcall函数的调用其实就是把数据包的信息下发到用户 空间去,而由内核空间到用户空...

2014-11-04 19:13:12

阅读数:3072

评论数:0

openVswitch(OVS)源代码之linux RCU锁机制分析

RCU是read copy udate的缩写,按照单词意思就知道这是一种针对数据的读、复制、修改的保护锁机制。锁机制原理: 第一、写数据的时候,不需要像读写锁那样等待所有锁的释放。而是会拷贝一份数据区的副本,然后在副本中修改,等待修改完后。用这个副本替换原来的数据区,替换的时候就要...

2014-10-15 19:07:11

阅读数:3269

评论数:9

体验云计算的成果----亚马逊免费云计算服务

亚马逊云计算服务推出对mazon EC2 Micro Instance进行免费使用一年,其实在2011年11月就可以免费注册使用了(我是因为工作需要最近才关注它)。不过免费的主机中配置都相对来说比较低的,内存为0.613G,硬盘为10G,系统有多种:Ubuntu、suce、RedHat、Amazo...

2014-10-11 21:18:06

阅读数:1884

评论数:0

openVswitch(OVS)源代码分析之工作流程(哈希桶结构体的解释)

需要的流表项链表头结点比较少(total_nr_elements < 1024),那么不需要分配一个parts指针(一个parts数组指针元素有一个页大小的空间)来存储,如果total_nr_elements不大于1020,就没必要分配parts指针了,直接在flex_array结构体(该结...

2014-10-09 21:31:01

阅读数:3971

评论数:3

openVswitch(OVS)源代码的分析技巧(哈希桶结构体为例)

于是在整个项目中进行搜索得,也可以理性的去分析下哪个函数会调用下面的flex_array申请函数,其实就是buckets内存申请函数(alloc_buckets)了;在该函数中有行代码为:buckets = flex_array_alloc(sizeof(struct hlist_head *),...

2014-09-25 21:37:01

阅读数:3979

评论数:0

openVswitch(OVS)源代码分析之工作流程(flow流表查询)

本文分析了openVswitch中的核心部分flow流表查询(flow_lookup),从流表查询的大体框架或者说理论开始一步一步的结合openVswitch中的数据结构图示(openVswitch的整体框架图)分析了flow查询步骤;最后又分析了openVswitch的源代码,以ovs_flow...

2014-09-23 21:03:35

阅读数:9680

评论数:2

openVswitch(OVS)源代码分析之工作流程(key值得提取)

我依然去简单分析key值得提取函数,有两个原因:第一、key值作为数据结构在openVswitch中是非常重要的,后期的一些流表查询和匹配都要用到key值;第二、想借机复习下内核网络协议栈的各层协议信息;

2014-09-22 20:53:40

阅读数:4891

评论数:2

openVswitch(OVS)源代码分析之工作流程(数据包处理)

在openVswitch中数据包的处理是其核心技术,该技术分为三部分来实现:第一、根据skb数据包提取相关信息封装成key值;第二、根据提取到key值和skb数据包进行流表的匹配;第三、根据匹配到的流表做相应的action操作(若没匹配到则调用函数往用户空间传递数据包)。函数为: void ovs...

2014-09-18 20:51:17

阅读数:8020

评论数:15

openVswitch(OVS)源代码分析之工作流程(收发数据包)

加载网卡时把网卡绑定到openVswitch端口上(ovs-vsctl add-port br0 eth0),绑定后每当有数据包过来时,都会调用该函数,把数据包传送给这个函数去处理。而不是像开始那样(未绑定前)把数据包往内核网络协议栈中发送,让内核协议栈去处理。openVswitch中数据包接受函...

2014-09-16 22:52:23

阅读数:9462

评论数:7

openVswitch(OVS)源代码分析之数据结构

记得Pascal之父、结构化程序设计的先驱Niklaus Wirth最著名的一本书,书名叫作《算法 + 数据结构 = 程序》。还有位传奇的软件工程师Frederick P. Brooks曾经说过:“给我看你的数据”。因此可见数据结构对于一个程序来说是多么的重要,如果你不了解程序中的数据结构,你根本...

2014-09-10 22:18:45

阅读数:10683

评论数:7

openVswitch(OVS)源代码分析之简介

云计算是个全世界的话题,所以也有全世界的能人异士来为实现这个云计算而奋斗。我现阶段遇到的有关云计算的技术就是openVswitch和docker技术。那就先从openVswitch开始介绍起,我会用一系列blog来分析openVswitch的相关数据结构和工作流程,以及各个重要模块的分析。所有的介...

2014-09-09 23:39:52

阅读数:12270

评论数:7

一致性hash算法 - consistent hashing

consistent hashing 算法早在 1997 年就在论文 Consistent hashing and random trees 中被提出,目前在cache 系统中应用越来越广泛; 1 基本场景 比如你有 N 个 cache 服务器(后面简称 cache ),那么如何将一个对象 o...

2014-08-25 17:27:52

阅读数:1190

评论数:0

sk_buff整理笔记(二、操作函数)

sk_buff整理笔记(一、数据结构)这一篇要讲的是内核为sk_buff结构提供的一些操作函数:(a)skb_put(), (b)skb_push(), (c)skb_pull(), and (d)skb_reserve(); 四大指针分别是:head、data、tail、end;这四个指针都...

2014-08-20 23:21:05

阅读数:4175

评论数:1

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