自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

何进的博客

海纳百川

  • 博客(47)
  • 收藏
  • 关注

转载 LBaas之(六)python-neutronclient架构分析

python-neutronclient架构分析命令执行流程图 1 命令执行流程         当执行neutron命令时,Python-neutronclient实际执行shell.py中的main函数。在main函数中,构造一个NeutronShell对象,然后调用该对象的run()函数。在run()函数中,进行log配置、参数解析、等操作,然后调用run_subco

2017-05-30 22:01:57 1202

转载 LBaas之(五) Liberty版本Neutron LBaas实现分析

架构模块示意图 这里参考的是lbaasv2的driver,neutron_lbaas.conf中的service_provider即为lbaasv2的driver: service_provider=LOADBALANCERV2:Haproxy:neutron_lbaas.drivers.haproxy.plugin_driver.HaproxyOnHostPluginDriver

2017-05-30 21:56:20 1855

转载 LBaas之(四)Neutron/LBaaS/API

目录1OpenStack LBaaS API 1.01.1Overview1.1.1Intended Audience1.1.2Document Change History1.1.3Resources1.2Chapter 1. Overview1.2.1High-Level Task Flow1.2.2Concepts

2017-05-27 08:50:05 1110

转载 LBass之(三)Neutron LBaaS Service基本知识

在OpenStack Grizzly版本中,Quantum组件引入了一个新的网络服务:LoadBalancer(LBaaS),服务的架构遵从Service Insertion框架。LoadBalancer为租户提供到一组虚拟机的流量的负载均衡,其基本实现为:在neutron-lbaas-agent中生成Haproxy的配置文件然后启动Haproxy。Neutron LBaaS Service

2017-05-27 08:45:51 1561

转载 LBaas只(二) Neutron中的L4/L7高级服务框架与LBaaS

Service InsertionService Insertion是Neutron中实现L4/L7层服务的框架。Neutron以前只有一级插件结构用于实现各种L2层技术(如LinuxBridge,OVS等,部署时分两块:用于和数据库打交道的NeutronPlugin+用于干实际事情的L2Agent),对于L3层的路由和dhcp是采用单独的agent(l3-agent,dhcp-agent

2017-05-27 08:43:57 544

转载 LBaas之(一)官网配置

ContentsLBaaS v1LBaaS v2Configuring LBaaS v2 with an agentConfiguring LBaaS v2 with OctaviaAdd LBaaS panels to DashboardLBaaS v2 operationsBuilding an LBaaS v2 load balancerAdding an

2017-05-27 08:41:39 1234

转载 openstack plugin 之(九)怎样修改 Openstack Horizon(Dashboard)的显示界面

上一篇文章介绍了 Dashboard 的基本结构框架,那接下来的问题就是如何在这个框架中加入我们自己想要的内容了。在真正动手之前,让我们先来看看官方的页面是怎么做出来的。首先我们进入 /usr/share/openstack-dashboard/openstack_dashboard/dashboards/admin/networks 文件夹下面,可以看到有这几个文件和子文件夹:../netw

2017-05-25 15:55:05 1796 1

转载 openstack plugin 之(八)怎样修改 Openstack Horizon(Dashboard)的显示界面

Openstack 有很多项目,比如 nova 是虚拟机管理,neutron 是虚拟网络管理, glance 是存储管理,而 horizon 是负责 Openstack 的统一界面。horizon 的源代码和 neutron 的不太一样,分布在两个地方,一个是 /usr/lib/python2.7/dist-packages/horizon 下面,这里放的是一些最基本的、可以共享的类、表格和模板等

2017-05-25 15:54:04 2585

转载 openstack plugin 之(七)怎怎样写 OpenStack Neutron 的 Extension

上文说到需要在 /neutronclient/v2_0/myextension/extension.py 中分别定义五个 class:List/Show/Create/Delete/UpdateExtension。具体形式如下:import argparseimport loggingfrom neutronclient.neutron import v2_0 as neut

2017-05-25 15:52:55 482

转载 openstack plugin 之(六)怎样写 OpenStack Neutron 的 Extension

通过上几章的介绍,我们现在的 myplugin 文件夹看上去应该是这样的:- neutron/  - plugins/    - myplugin/      - __init__.py      - plugin.py      - extensions/        - __init__.py        - myextension.py      -

2017-05-25 15:51:46 426

转载 openstack plugin 之(五)怎样写 OpenStack Neutron 的 Extension

接着之前一篇文章,再来谈谈 Extension 的具体实现问题。我使用的是本地数据库加远程API调用的方法,所以先要定义一下数据库中 myextension 如何存储。首先,我们可以在自己的 plugin 根目录下新建一个 db 文件夹,以及三个文件:- neutron/  - plugins/    - myplugin/      - __init__.py      -

2017-05-25 15:47:04 382

转载 openstack plugin 之(四)如何区分 OpenStack Neutron Extension 和 Plugin

原文链接:https://www.cnblogs.com/zhutianshi/p/3902315.htmlNeutron 里面的 extension 和 plugin 是非常相似的两个概念,我花了好久才貌似搞懂了两者的区别,还不一定完全正确。在OpenStack 的官网wiki中,可以找到它们两个的定义:Plugin:Neutron exposes a logical API ...

2017-05-25 15:45:45 536 3

转载 openstack plugin 之(三)怎样写 OpenStack Neutron 的 Extension

前两篇文章讨论了怎么写一个 Neutron 的插件。但是最基本的插件只包括 Network, Port,和 Subnet 三种资源。如果需要引入新的资源,比如一个二层的 gateway 的话,就需要在插件的基础上再写一个 extension, 也就是扩展。Neutron 已经预定义了很多扩展,可以参看 neutron/extensions 下面的文件,我在这里就不一一列举了。如果正好有一种是你

2017-05-25 15:44:32 549

转载 openstack plugin 之(二)怎样写 OpenStack Neutron 的 Plugin

其实上一篇博文中的内容已经涵盖了大部分写Neutron插件的技术问题,这里主要还遗留了一些有关插件的具体实现的问题。首先,Neutron对最基本的三个资源:Network, Port 和 Subnet 的基本调用都已经定义好了API接口。如果你的插件也需要用到这些资源,最好直接实现它们的接口。API接口的定义可以再 neutron/neutron_plugin_base_v2.py 这个文件中

2017-05-25 15:42:27 520

转载 openstack plugin 之(一)怎样写 OpenStack Neutron 的 Plugin

鉴于不知道Neutron的人也不会看这篇文章,而知道的人也不用我再啰嗦Neutron是什么东西,我决定跳过Neutron简介,直接爆料。首先要介绍一下我的开发环境。我没有使用DevStack,而是直接在电脑上安装了三个Virtual Box,然后根据OpenStack的Ubuntu 安装指南部署了一个环境:一个控制节点,一个网络节点和一个计算节点。接下来我会直接在控制节点上修改 /neutro

2017-05-25 15:41:09 755 1

转载 NAPI 之(三)——技术在 Linux 网络驱动上的应用和完善

前言:NAPI 是 Linux 上采用的一种提高网络处理效率的技术,它的核心概念就是不采用中断的方式读取数据,而代之以首先采用中断唤醒数据接收的服务程序,然后 POLL 的方法来轮询数据,(类似于底半(bottom-half)处理模式);从我们在实验中所得到的数据来看,在随着网络的接收速度的增加,NIC 触发的中断能做到不断减少,目前 NAPI 技术已经在网卡驱动层和网络层得到了广泛的应用,驱

2017-05-25 10:05:52 759

转载 NAPI之(二)——机制分析

NAPI 的核心在于:在一个繁忙网络,每次有网络数据包到达时,不需要都引发中断,因为高频率的中断可能会影响系统的整体效率,假象一个场景,我们此时使用标准的 100M 网卡,可能实际达到的接收速率为 80MBits/s,而此时数据包平均长度为 1500Bytes,则每秒产生的中断数目为:  80M bits/s / (8 Bits/Byte * 1500 Byte) = 6667 个中断 /s

2017-05-25 10:03:38 756

转载 NAPI之(一)——原理和实现

概述 NAPI是Linux新的网卡数据处理API,据说是由于找不到更好的名字,所以就叫NAPI(New API),在2.5之后引入。简单来说,NAPI是综合中断方式与轮询方式的技术。中断的好处是响应及时,如果数据量较小,则不会占用太多的CPU事件;缺点是数据量大时,会产生过多中断,而每个中断都要消耗不少的CPU时间,从而导致效率反而不如轮询高。轮询方式与中断方式相反,它更适合处

2017-05-25 09:54:51 12715

转载 经典KVM详解,太详细太深入了

KVM 介绍(1):简介及安装http://www.cnblogs.com/sammyliu/p/4543110.html学习 KVM 的系列文章: (1)介绍和安装(2)CPU 和 内存虚拟化(3)I/O QEMU 全虚拟化和准虚拟化(Para-virtulizaiton)(4)I/O PCI/PCIe设备直接分配和 SR-IOV(5)libvirt

2017-05-24 09:22:31 18436

转载 DPDK之(十一)——内存管理---rte_mbuf

本文主要介绍rte_mbuf与rte_mempool数据结构之间的组织关系、以及网卡接收到的数据是如何存储在rte_mbuf中的。 一、rte_mbuf、rte_mempool及网卡收到的数据包在内存中的组织结构      调用rte_mempool_create()函数创建rte_mempool的时候,指定申请多少个rte_mbuff及每个rte_mbuf中elt_size的大小

2017-05-18 16:25:29 2275 1

转载 dpdk之(十)——基础模块之rte_mbuf详解

Rte_mbuf本文假定报文的长度不超过rte_mbuf->buf_len的长度。内存结构分配操作Mbuf由缓冲池rte_mempool管理,rte_mempool在初始化时一次申请多个mbuf,申请的mbuf个数和长度都由用户指定。宏MBUF_SIZE是例子程序中使用的mbuf长度:#define MBUF_SIZE (2048 + sizeof(struct rte_m

2017-05-18 16:16:37 5727

转载 DPDK之(九)——收发包分析

前言:DPDK收发包是基础核心模块,从网卡收到包到驱动把包拷贝到系统内存中,再到系统对这块数据包的内存管理,由于在处理过程中实现了零拷贝,数据包从接收到发送始终只有一份,对这个报文的管理在前面的mempool内存池中有过介绍。这篇主要介绍收发包的过程。一、收发包分解收发包过程大致可以分为2个部分1.收发包的配置和初始化,主要是配置收发队列等。2.数据包的获取和发送,主要是从队列中获

2017-05-17 16:56:17 10204

转载 DPDK之(八)——vhost库

转:http://www.cnblogs.com/danxi/p/6652725.htmlvhost库实现了一个用户空间的virtio net server,允许用户直接处理virtio ring队列。换句话说,它让用户可以从VM virtio网络设备读取或写入数据包,为了达到这个目的,vhost库应该可以:访问客户虚拟机内存,对于QEMU,这个是通过设置 -objec

2017-05-15 17:19:12 1791

转载 DPDK之(七)—— support for vhost-user学习笔记

转地址:http://www.lai18.com/content/1851237.htmlX86体系早期没有在硬件设计上对虚拟化提供支持,因此虚拟化完全通过软件实现。一个典型的做法是通过优先级压缩(Ring Compression)和二进制代码翻译(Binary Translation)相结合,VMM在特权级ring 0, Guest操作系统在非特权级ring 1, Guest应用

2017-05-15 17:18:15 3925

转载 DPDK之(六)——内存管理

(一)初始化1 前言 DPDK通过使用hugetlbfs,减少CPU TLB表的Miss次数,提高性能。2 初始化DPDK的内存初始化工作,主要是将hugetlbfs的配置的大内存页,根据其映射的物理地址是否连续、属于哪个Socket等,有效的组织起来,为后续管理提供便利。2.1 eal_hugepage_info_init()eal_hugepage_in

2017-05-15 14:41:06 4098

转载 DPDK之(五)——多核多线程机制简析

DPDK通过在多核设备上,创建多个线程,每个线程绑定到单独的核上,减少线程调度的开销,以提高性能。DPDK的线程分为控制线程和数据线程,控制线程一般绑定到MASTER核上,主要是接受用户配置,并传递配置参数给数据线程等;数据线程主要是处理数据包。一、初始化1、rte_eal_cpu_init()函数中,通过读取/sys/devices/system/cpu/cpuX/下的相关信息,确定

2017-05-15 14:35:29 1581

转载 DPDK之(四)——中断机制简析

DPDK通过在线程中使用epoll模型,监听UIO设备的事件,来模拟操作系统的中断处理。 一、中断初始化在rte_eal_intr_init()函数中初始化中断。具体如下:1、首先初始化intr_sources链表。所有UIO设备的中断都挂在这个链表上,中断处理线程通过遍历这个链表,来执行设备的中断。2、创建intr_pipe管道,用于epoll模型的消息通知。3、创建线程

2017-05-15 14:34:20 868

转载 DPDK之(三)——收发包处理流程--网卡初始化

本文基于DPDK-1.8.0分析。网卡驱动模型一般包含三层,即,PCI总线设备、网卡设备以及网卡设备的私有数据结构,即将设备的共性一层层的抽象,PCI总线设备包含网卡设备,网卡设备又包含其私有数据结构。在DPDK中,首先会注册设备驱动,然后查找当前系统有哪些PCI设备,并通过PCI_ID为PCI设备找到对应的驱动,最后调用驱动初始化设备。一、网卡驱动注册以e1000网卡驱动为例说明。

2017-05-15 14:33:33 2518

转载 DPDK之(二)——如何利用 mTCP 和 DPDK 构造千万百万并发TCP连接

在F5 Networks Seattle 总部从事大型企业网络应用交付使用的维护支持经历中, 经常碰到客户应用达到百万至千万级TCP连接时BIGIP可能会遇到的各种瓶劲,如内存分配使用状态,CPU 负荷, TCP 协议栈性能. TCP software syncookie 和 TCP hardware (FPGA) assisted syncookie accelearation 协同工作性能

2017-05-15 14:30:10 4844

转载 dpdk 之(一)——代码分析 内存初始化

一  前言http://www.dpdk.org/  dpdk 是 intel 开发的x86芯片上用于高性能网络处理的基础库,业内比较常用的模式是linux-app模式,即利用该基础库,在用户层空间做数据包处理,有了这个基础库,可以方便地在写应用层的网络包处理高性能程序,目前该库已经开源。Main librariesmulticore framework   多核框架,dpdk

2017-05-15 14:25:51 1970

转载 云安全之OpenStack 高可用和灾备方案 [OpenStack HA and DR]

1. 基础知识1.1 高可用 (High Availability,简称 HA)    高可用性是指提供在本地系统单个组件故障情况下,能继续访问应用的能力,无论这个故障是业务流程、物理设施、IT软/硬件的故障。最好的可用性, 就是你的一台机器宕机了,但是使用你的服务的用户完全感觉不到。你的机器宕机了,在该机器上运行的服务肯定得做故障切换(failover),切换有两个维度的成本:RTO (

2017-05-12 15:24:38 1180

转载 云安全之Neutron 是如何实现虚机防火墙的 [How Neutron Implements Security Group]

1. 基础知识1.1 防火墙(firewall)    防火墙是依照特定的规则来控制进出它的网络流量的网络安全系统。一个典型的场景是在一个受信任的内网和不受信任的外网比如 Internet 之间建立一个屏障。防火墙可以是电脑上运行的软件,也可以是独立的硬件设备。  与负载均衡器类似,按照其工作的网络层次,防火墙可以分为:网络层防火墙(四层):网络层防火墙可视为一种

2017-05-12 15:22:28 2350

转载 云安全之 Neutron 网络 和 Nova虚机 防火墙的 [How Nova Implements Security Group and How Neutron Impleme

本文的基础知识和所用到的技术和实现和 Neutron 理解 (8): Neutron 是如何实现虚机防火墙的 [How Netruon Implements Security Group] 非常类似,因此会省去相同的部分。1. Nova 安全组1.1 配置节点配置文件配置项说明controller /etc/nova/nova.confsec

2017-05-12 15:20:52 1924

转载 云安全之Neutron 是如何实现负载均衡器虚拟化的 [LBaaS V1 in Juno]

1. 基础知识1.1 负载均衡的概念  负载均衡(Load Balancing)是将来访的网络流量在运行相同应用的多个服务器之间进行分发的一种核心网络服务。它的功能由负载均衡器(load balancer)提供。负载均衡器可以是一个硬件设备,也可以由软件实现。它充当反向代理,在多个服务器之间分发网络或者应用流量。它常用来增加应用的访问容量(并发用户数)和可靠性,它也会通过降低服务器的负载来

2017-05-12 15:17:19 917

转载 GRE and VXLAN with Open vSwitch

因为在OpenStack的Neutron中比较常用,所以参考别人的博客试了下OVS的一些隧道封装功能(GRE,VXLAN)。实验:实现两个host的Networknamespace之间的通信,NS可以理解为host里的VM(VM通过NS隔离,参考资料里涉及到了VM,KVM还不熟悉,这里就略掉了),如下图所示:and VXLAN with Open vSwitch" title="GRE a

2017-05-12 14:49:03 534

转载 openvswitch处理upcall过程分析

处理upcall的整体框架是:1.由函数handle_upcalls()批量处理(in batches)的是由内核传上来的dpif_upcalls,会解析出upcall的类型。这里主要看在内核中匹配流表失败的MISS_UPCALL。处理完成后会得到多个flow_miss。结构体dpif_upcall代表的是由内核传到用户空间的一个包,包括上传原因,p

2017-05-12 11:19:05 770

转载 open vswitch研究: action (四)

ovs的action,都是预定义好的行为,也可以用nlattr结构来定义,enum ovs_action_attr {    OVS_ACTION_ATTR_UNSPEC,    OVS_ACTION_ATTR_OUTPUT,       /* u32 port number. */    OVS_ACTION_ATTR_USERSPACE,    /* Nested OVS_US

2017-05-10 15:51:18 807

转载 open vswitch研究:vswitchd (三)

vswitchd是用户态的daemon进程,其核心是执行ofproto的逻辑。我们知道ovs是遵从openflow交换机的规范实现的,就拿二层包转发为例,传统交换机(包括Linux bridge的实现)是通过查找cam表,找到dst mac对应的port;而open vswitch的实现则是根据入包skb,查找是否有对应的flow。如果有flow,说明这个skb不是流的第一个包了,那么可以在f

2017-05-10 15:49:39 1913

转载 ovs vswitchd的启动(二)

vswitchd启动代码可参考ovs-vswitchd.c的main函数,其中最重要的两个函数是bridge_run以及netdev_runbridge_runvoid bridge_run() { ... /* Initialize the ofproto library. This only needs to run once, but * it must

2017-05-10 15:43:21 586

转载 网络命名空间(内核源码实现)

LXC文章中关于网络的设置是从用户空间配置的,从该文章可以知道网络命名空间的一些基本概念和其提供的功能。而《linuxnamespace-之使用》包括了网络命名空间管理、配置以及使用,这比LXC译文更接近网络命名空间的实现,但是都是基于用户空间的,这章是关于Linux网络命名空间内核源码。在Linux中,每一个网络空间都使用struct net表示。13.1 命名空间创建在当前Li

2017-05-09 17:07:38 1354

空空如也

空空如也

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

TA关注的人

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