摘要:
FIO参数中,ioengine使用libaio,并发jobs数固定为1,通过iodepth来控制压力。分别测试随机读、随机写,作为读写的性能基准。不测试顺序读写,不测试混合读写。 1、测试IOPS峰值: iodepth=128, 块大小4k。随机读: ./fio -direct=1 -iodepth 阅读全文
摘要:
深入解析DC/OS 1.8 – 高可靠的微服务及大数据管理平台 大家好,欢迎大家参加这次DC/OS的技术分享。 先做个自我介绍,刘超,Linker Networks首席架构师,Open DC/OS社区贡献者,长期专注于OpenStack, Docker, Mesos等开源软件的企业级应用与产品化。 阅读全文
摘要:
Mesos源码分析(1): Mesos的启动过程总论 Mesos源码分析(2): Mesos Master的启动之一 Mesos源码分析(3): Mesos Master的启动之二 Mesos源码分析(4) Mesos Master的启动之三 Mesos源码分析(5): Mesos Master的启 阅读全文
摘要:
有时候我们需要自定义一些自己的action,根据包头里面的信息,做一些自己的操作。 例如添加一个action名为handle_example 第一、修改ofp-actions.c文件 首先在ofp-actions.c里面添加Openflow各个版本的这个action static const struct ofpact_map * get_ofp... 阅读全文
摘要:
添加一个flow,调用的命令为 ovs-ofctl add-flow hello "hard_timeout=0 idle_timeout=0 priority=1 table=21 pkt_mark=0x55 tun_id=0x55 actions=mod_nw_dst:192.168.56.101,output:2" 这里调用的是调用ovs/utilities/ovs-ofctl.c的命令行工... 阅读全文
摘要:
当内核无法查找到流表项的时候,则会通过upcall来调用用户态ovs-vswtichd中的flow table。 会调用ofproto-dpif-upcall.c中的udpif_upcall_handler函数。 static void * udpif_upcall_handler(void *arg) { struct handler *handler = ar... 阅读全文
摘要:
当一个数据包到达网卡的时候,首先要经过内核Openvswitch.ko,流表Flow Table在内核中有一份,通过key查找内核中的flow table,即可以得到action,然后执行action之后,直接发送这个包,只有在内核无法查找到流表项的时候,才会到用户态查找用户态的流表。仅仅查找内核中flow table的情况被称为fast path. 第一步:从数据包中提取出key... 阅读全文
摘要:
在上一节提到,Openvswitch的内核模块openvswitch.ko会在网卡上注册一个函数netdev_frame_hook,每当有网络包到达网卡的时候,这个函数就会被调用。 static struct sk_buff *netdev_frame_hook(struct sk_buff *skb) { if (unlikely(skb->pkt_type =... 阅读全文
摘要:
上一节我们讲了ovs-vswitchd,其中虚拟网桥初始化的时候,对调用内核模块来添加虚拟网卡。 我们从openvswitch内核模块的加载过程,来看这个过程。 在datapath/datapath.c中会调用module_init(dp_init);来初始化内核模块。 static int __init dp_init(void) { int err; ... 阅读全文
摘要:
ovs-vswitchd.c的main函数最终会进入一个while循环,在这个无限循环中,里面最重要的两个函数是bridge_run()和netdev_run()。 Openvswitch主要管理两种类型的设备,一个是创建的虚拟网桥,一个是连接到虚拟网桥上的设备。 其中bridge_run就是初始化数据库中已经创建的虚拟网桥。 一、虚拟网桥的初始化bridge_run b... 阅读全文