一 了解dpdk准备知识

1 NAT

  NAT技术是为了缓解IPV4地址枯竭得问题,通过使用NAT技术,一个机构如学校可以只用单一得公网IP来范文互联网,在外界看来只有一台接入公网得设备。NAT分为两种技术,一种是NAT,一种是NAPT。NAT在网络地址转换得时候只是对IP地址进行映射,而NAPT技术对IP和端口进行了映射。NAT 在具体的应用场景中又分 NAT、DNAT 以及 FULLNAT。SNAT 是源地址转换,DNAT 是目的地址转换,FULLNA则对源地址和目的地址都进行了转换。NAT 是用来实现负载均衡的常见技术之一。

2 NUMA   

  NUMA即非统一内存访问架构。传统的SMP系统中,多处理器共享总线和存储。当处理器的数目越来越大的时候,多处理器对于存储的竞争容易使得总线成为系统的性能瓶颈,这样以来,NUMA出现了。

  NUMA将SMP分为多个节点,节点之间通过高速网络互连。每一个NUMA节点包含自己的CPU和本地内存,CPY既可以访问同一个节点的内存,也可以访问其他的内存。DPDK提供了对NUMA的支持。

3 HugePage

  在linux环境中,内存分配按照页为单位进行,通常的大小为4K。对于比较大的内存空间的分配,这种分配方式需要频繁的分配和管理。HP是对传统4K页的替代,通过它可以减少页表的大小,提高检索效率,从而提高系统性能。

4 绑核

  将线程或者进程与CPU核进行绑定,减少进程或者线程调度产生的开销。

二 负载均衡调度算法

  随着集群中服务器数目不断增多,机器性能差异对于系统的负载能力的影响越来越大。为了增强系统的稳定性,达到负载的目的,那就需要合适的调度算法来对请求进行分发。常见的有如下几种

(1) 轮询

  一般轮询:

    这种调度算法将请求均匀的分配到真实服务器中。要求各个服务器的配置得相同而且各个请求所消耗资源较为平均。

  进一步轮询:

    为集群中得服务器根据处理能力赋予权值,权值高得服务器相对处理更多的请求。

(2)源地址Hash

  根据源IP进行Hash计算,从hash表中选择一台真实服务器来处理请求。有个好处就是相同得IP会被映射到同一台服务器。缺点就是对于多人局域网共享同一个外网IP上网得方式,可能就存在大量得请求到同一台。

  x=hash(src_ip)mod N

(3)一致性Hash

  解决两个问题

    服务器处理能力得差异化

    真实服务器得增减会导致src_ip与处理请求得真实服务器之间得映射发生改变。

  这里推荐两篇文章,对一致性hash非常用心得讲解。

  http://www.zsythink.net/archives/1182

  https://www.cnblogs.com/lpfuture/p/5796398.html

  

三 DPDK基础

(1)EAL

  提供一种通用得接口,这种接口为应用和库在访问底层资源如硬件和内存得时候屏蔽了具体得环境细节。多线程为例,linux应用程序得EAL初始化如下图所使

(2)dpdk核心组件

  提供了一组涵盖开发高性能包处理工具所需要的全部要素的库,其中包括环形缓冲区管里,内存池管里,网络保温缓冲区管理,定时器管里,以太网轮询驱动架构,报文转发算法支持,网络协议库等,后面慢慢的再去学习各个模块的详细内容。核心组件如下图所示

就到这了,内容都是在学习dpdk的时候感觉需要所了解的内容。。。。

dpdk学习笔记2的更多相关文章

  1. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  2. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  3. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  4. 2014年暑假c#学习笔记目录

    2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...

  5. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

  6. seaJs学习笔记2 – seaJs组建库的使用

    原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...

  7. CSS学习笔记

    CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...

  8. HTML学习笔记

    HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...

  9. DirectX Graphics Infrastructure(DXGI):最佳范例 学习笔记

    今天要学习的这篇文章写的算是比较早的了,大概在DX11时代就写好了,当时龙书11版看得很潦草,并没有注意这篇文章,现在看12,觉得是跳不过去的一篇文章,地址如下: https://msdn.micro ...

随机推荐

  1. EntityFramwork 查询

    EntityFramwork 查询 1.简单查询: SQL: SELECT * FROM [Clients] WHERE Type=1 AND Deleted=0 ORDER BY ID EF: // ...

  2. 一步一步学ios UITextView(多行文本框)控件的用法详解(五5.8)

    本文转载至 http://wuchaorang.2008.blog.163.com/blog/static/48891852201232014813990/     1.创建并初始化 创建UIText ...

  3. WordPress用户角色及其权限管理编辑插件:User Role Editor汉化版

    如果Wordpress默认的用户角色及权限不能满足您的需求,又觉得修改代码编辑用户权限太麻烦.那不妨试试User Role Editor,Wordpress用户角色及其权限管理编辑插件. User R ...

  4. 用keytool创建Keystore和Trustsotre文件只需五步

    用keytool创建Keystore和Trustsotre文件 JSSE使用Truststore和Keystore文件来提供客户端和服务器之间的安全数据传输.keytool是一个工具可以用来创建包含公 ...

  5. myeclipse 安装flex插件后变为中文 修改配置文件切换到英文界面

    解决办法: 1. cmd 敲命令进入安装目录,运行myeclipse.exe -nl en后,启动为英文 在安装目录下新建txt,改名为myeclipse.bat,将上面那行命令写入保存,再发送快捷方 ...

  6. 经典数学问题<手电过河问题>的动态解法--问题规模扩展至任意大小

    非常有趣的一件事是今天在TopCoder的1000分题里面发现了这道经典数学问题. Notes           -                   In an optimal solution ...

  7. ZOJ - 3430 Detect the Virus —— AC自动机、解码

    题目链接:https://vjudge.net/problem/ZOJ-3430 Detect the Virus Time Limit: 2 Seconds      Memory Limit: 6 ...

  8. BZOJ 1201 [HNOI2005]数三角形:枚举 + 前缀和

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1201 题意: 有一个边长为n的正三角形网格,去掉其中一些线段,问你在这幅图中有多少个三角形 ...

  9. 时间序列数据库概览——基于文件(RRD)、K/V数据库(influxDB)、关系型数据库

    一般人们谈论时间序列数据库的时候指代的就是这一类存储.按照底层技术不同可以划分为三类. 直接基于文件的简单存储:RRD Tool,Graphite Whisper.这类工具附属于监控告警工具,底层没有 ...

  10. Unix环境编程之文件IO

    1.文件IO 2.文件与目录 3.进程 4.多线程编程 5.信号 6.进程间通信 学习linux编程,首先要学会使用shell,这里一些基础命令就不介绍了.这里唯一要提的一个shell命令就是man. ...