我们讲了QOS的理论知识,了解了它是做什么用的,以及设计模式,下面就以tc的应用的更深入的理解qos.

Linux采用了基于对象的实现方法,qos还能保证对不同接口采用不同的策略,TC QOS有很多拥塞控制的机制默认的是FIFo还有其他PQ、CQ、WFQ等.

策略类 用结构体:Qdisc_ops表示。每个设备可以采用不同的策略对象,在设备和对象的关联需要到Qdisc结构体

通过上面的描述,整个TC的架构也就出来了,发送数据包的流程应该是这样的:

(1) 上层协议开始发送数据包

(2) 获得当前设备所采用的策略对象

(3) 调用此对象的enqueue方法把数据包压入队列

(4) 调用此对象的dequeue方法从队列中取出数据包

(5) 调用网卡驱动的发送函数发送

并且在上一节我们已经讲了tc的三级树型组织.这里不再贴图. 还有一点注意的就是tc控发不空收.

下面就从tc的命令说起:

命令格式:

tc qdisc [ add | change | replace | link ] dev DEV [ parent qdisc-id | root ] [ handle qdisc-id ] qdisc [ qdisc specific parameters ]

tc class [ add | change | replace ] dev DEV parent qdisc-id [ classid class-id ] qdisc [ qdisc specific parameters ]

tc filter [ add | change | replace ] dev DEV [ parent qdisc-id | root ] protocol protocol prio priority filtertype [ filtertype specific parameters ] flowid flow-id

tc [-s | -d ] qdisc show [ dev DEV ]

tc [-s | -d ] class show dev DEV tc filter show dev DEV

具体的配置流程如下:

Linux流量控制主要分为建立队列、建立分类和建立过滤器三个方面。

基本实现步骤

(1) 针对网络物理设备(如以太网卡eth0)绑定一个队列QDisc;

(2) 在该队列上建立分类class;

(3) 为每一分类建立一个基于路由的过滤器filter;

(4) 最后与过滤器相配合,建立特定的路由表等

1. tc 命令的基本用法

查看tc help 或者man tc

2. 针对不同算法的不同配置 (为什么这说,不同的策略算法,它的参数不一样需要根据实际情况实际分析)

3. 无分类qdisc 和分类qdisc

(1) 无分类:

[p|b]fifo

使用最简单的qdisc,纯粹的先进先出。只有一个参数:limit,用来设置队列的长度,pfifo是以数据包的个数为单位;bfifo是以字节数为单位。

pfifo_fast

在 编译内核时,如果打开了高级路由器(AdvancedRouter)编译选项,pfifo_fast就是系统的标准QDISC。它的队列包括三个波段(band)。在每个波段里面,使用先进先出规则。而三个波段(band)的优先级也不相同,band 0的优先级最高,band 2的最低。如果band里面有数据包,系统就不会处理band1里面的数据包,band 1和band 2之间也是一样。数据包是按照服务类型(Type ofService,TOS)被分配多三个波段(band)里面的

red

red是Random Early Detection(随机早期探测)的简写。如果使用这种QDISC,当带宽的占用接近于规定的带宽时,系统会随机地丢弃一些数据包。它非常适合高带宽应用。

sfq

sfq是Stochastic Fairness Queueing的简写。它按照会话(session–对应于每个TCP连接或者UDP流)为流量进行排序,然后循环发送每个会话的数据包

tbf

tbf是Token Bucket Filter的简写,适合于把流速降低到某个值 。

如果没有可分类QDisc,不可分类QDisc只能附属于设备的根。它们的用法如下:

tc qdisc add dev DEV root QDISC QDISC-PARAMETERS

要删除一个不可分类QDisc,需要使用如下命令:

tc qdisc del dev DEV root

一个网络接口上如果没有设置QDisc,pfifo_fast就作为缺省的QDisc。

(2) 分类:

CBQ

CBQ 是Class Based

Queueing(基于类别排队)的缩写。它实现了一个丰富的连接共享类别结构,既有限制(shaping)带宽的能力,也具有带宽优先级管理的能力。带宽限制是通过计算连接的空闲时间完成的。空闲时间的计算标准是数据包离队事件的频率和下层连接(数据链路层)的带宽

HTB

HTB是 Hierarchy Token

Bucket的缩写。通过在实践基础上的改进,它实现了一个丰富的连接共享类别体系。使用HTB可以很容易地保证每个类别的带宽,虽然它也允许特定的类可以突破带宽上限,占用别的类的带宽。HTB可以通过TBF(Token Bucket Filter)实现带宽限制,也能够划分类别的优先级。

PRIO

PRIO QDisc不能限制带宽,因为属于不同类别的数据包是顺序离队的。使用PRIO QDisc可以很容易对流量进行优先级管理,只有属于高优先级类别的数据包全部发送完毕,才会发送属于低优先级类别的数据包。为了方便管理,需要使用iptables或者ipchains处理数据包的服务类型(Type Of Service,ToS)

21/212>

linux qos 内核配置,Linux下QOS:应用篇相关推荐

  1. 嵌入式linux中内核,嵌入式Linux研究-对几种典型的系统的内核配置方案

    摘要 本文主要介绍了几种减裁Linux核心的方法,可以用于.嵌入式服务器的核心配置. By iamafan 1.对于一般PC的普通内核配置 对于一般的用户而言,对于Linux内核的效率和大小的要求 ...

  2. 【realtime】红帽 RedHat Linux实时内核配置要点全面分析

    CentOS Linux实时性配置要点 rtoax 2021年2月 1. 概要 1.1. 实时性补丁 补丁地址:CentOS 7 - RealTime for x86_64: RealTime: ke ...

  3. arm linux 内核配置,Linux + ARM驱动开发环境配置(内核配置与编译)

    要想编写驱动,首先是建立内核目录树. ** 1.查看ARM开发板的内核版本 ** uname -a 我的arm开发板的版本是3.4.39 ** 2.安装必要的软件包 ** sudo apt-get i ...

  4. linux追加内核参数,Linux设置内核参数的方法

    1 内核参数的查看方法 使用"sysctl -a"命令可以查看所有正在使用的内核参数.内核参数比较多(一般多达500项),按照前缀主要分为以下几大类:net.ipv4.net.ip ...

  5. linux 禁用 内核 驱动程序,Linux设备驱动程序学习----5.模块的初始化和关闭

    模块的初始化和关闭 1. 初始化函数 模块的初始化函数负责注册模块所提供的任何设施,即可以被应用程序访问的新功能,可能是一个完整的驱动程序或者仅仅是一个新的软件抽象.初始化函数的定义通常如下所示: s ...

  6. linux pae内核安装,Linux 安装PAE内核

    客户软件是部署在32位的CentOS5服务器当中,CentOS5目前只能识别4G内存,需要安装PAE内核,让系统支持PAE物理地址扩展. 1.安装PAE内核 yum -y install kernel ...

  7. linux升级内核ivh,Linux内核升级

    当前的系统版本为rhel7.2,内核版本为"Linux 3.10.0-327.el7.x86_64" [root@rhel7_2 ~]# hostnamectl Static ho ...

  8. linux中内核4c,Linux内核编译

    年纪大了,记性不好,这篇文档作为自学笔记,也算是积累,给自己一个交待. Linux内核编译的大致流程如下: 一.获取内核代码:编译内核代码之前一定要获取到内核代码,到http://www.kernel ...

  9. linux 驱动 内核模式,Linux内核模块和驱动的编写

    Linux内核是一个整体是结构,因此向内核添加任何东西,或者删除某些功能,都十分困难.为了解决这个问题引入了内核机制.从而可以动态的想内核中添加或者删除模块. 模块不被编译在内核中,因而控制了内核的大 ...

最新文章

  1. 关于UNION和UNION ALL的区别
  2. SpringMVC的文件上传和拦截器
  3. 原始jdbc操作的分析
  4. C#做的一个加密/解密的类
  5. 计算机的关机键,怎么让电脑按关机键后不关机?让电脑主机上关机键失效的方法...
  6. 蓝桥杯 ADV-111 算法提高 Quadratic Equation
  7. Oblivion Sound Lab Hex Drum Mac - 虚拟鼓声乐器
  8. GridView中如何使用CommandField删除时,弹出确认框
  9. 苹果cms怎么添加百度统计代码
  10. CrossApp 0.3.8 发布,跨平台移动App开发引擎
  11. Hexo next主题修改背景报 failed to locate @import file F:\blog\source\_data\styles.styl
  12. from scipy.misc import comb ImportError: cannot import name ‘comb‘
  13. wifi网络为什么总是断线 (by quqi99)
  14. 跳一跳改分php源码,小游戏“跳一跳”居然可改分,微信小程序现漏洞
  15. 硬盘坏了可以修复吗?硬盘数据恢复方法来了
  16. JSON和XML的区别
  17. 数据分析——R语言中ggplot2用法(1)
  18. 重读《大数据时代》:关于大数据的再认识
  19. 数字IC设计实现hierarchical flow之物理验证篇
  20. 如何上好计算机应用基础,浅谈如何上好计算机应用基础课

热门文章

  1. Visual Studio 2010 更换皮肤
  2. 关于Div的宽度与高度的100%设定
  3. 5G工业路由器在无人机行业的应用
  4. java nio servlet_java nio http服务器(3)简单的Servlet容器
  5. Python如何除去NaN
  6. 当你问ChatGPT一些奇奇怪怪的问题
  7. 网易的基本盘稳住了?
  8. 跨域和跨域的解决方案
  9. Ghost技巧 几秒钟格式化120G硬盘
  10. day01 - java基础语法