SylixOS 的 QoS 实现原理和使用方法

SylixOS 的 QoS 实现原理和使用方法

QoS简介

QoSQuality of Service,服务质量)指一个网络能够利用各种基础技术,为指定的网络通信提供更好的服务能力,是网络的一种安全机制,是用来解决网络延迟和阻塞等问题的一种技术。在正常情况下,如果网络只用于特定的无时间限制的应用系统,并不需要QoS,比如Web应用,或E-mail设置等。但是对关键应用和多媒体应用就十分必要。当网络过载或拥塞时,QoS 能确保重要业务量不受延迟或丢弃,同时保证网络的高效运行。如提高QQ的所有数据报文优先级并设置dont_drop选项,保证QQ在网络环境较差时不掉线。

QoS操作方法

QoS相关的操作命令有三个,添加(qosruleadd)、删除(qosruledel)和查看(qoss)。

2.1 添加

如下是一条添加ip规则命令:

# qosruleadd  en1  ip  192.168.31.1  192.168.31.5  SRC  5  no

其中en1”表示网络接口,“ip”表示规则针对的数据包类型,后面紧跟IP地址范围。IP地址范围之后为方法及表示这条规则针对源地址(SRC)、目的地址(DEST)还是所有地址(BOTH)都有效。方法后是优先级,范围为17。最后是是否打开dont_drop选项及不丢包选项,yes”就表示此包不会被协议栈丢失。

若针对tcpudp的数据包类型,则需要加上对应的端口号范围,如下:

# qosruleadd  en1  tcp  192.168.31.1  192.168.31.5  1000  10010  BOTH  4  yes

2.2 查看

查看使用qoss命令,如 2.1所示。

 

2.1 qoss查看

2.3 删除

删除时需要使用到网卡名和对应的序列号,即使用qoss查看得出的序列号,如下:

# qosruledel  en1  0

QoS实现原理

3.1 QoS网络层次

QoS层处于TCP/IP协议栈与netjob之间,解析每一个提交给协议栈和从协议栈发出的数据包。并针对不同类型的数据包按照指定的规则操作,基本结构如 3.1所示。


3.1 QoS网络层次结构

3.2 QoS数据结构

QoS相关的数据主要有2类,规则结构和QoS接口结构。规则结构又分TCPUDPIP三种,共4种结构,如程序清单 3.1所示。

程序清单 3.1 QoS数据结构

typedef struct {

    LW_LIST_LINE            QOSRI_lineManage;                           /*  IP 规则管理链表             */

    INT                      QOSRI_iRule;

    INT                      QOSRI_iCmpMethod;                           /*  srouce, destination, both   */

    ip4_addr_t                 QOSRI_ipaddrHboS;                           /*  IP 段起始 IP 地址           */

    ip4_addr_t                 QOSRI_ipaddrHboE;                           /*  IP 段结束 IP 地址           */

    u8_t                      QOSRI_ucPrio;                               /*  QoS 优先级                  */

    u8_t                      QOSRI_ucDontDrop;                           /*  QoS 可靠服务                */

} __QOS_RULE_IP;

  1. typedef __QOS_RULE_IP      *__PQOS_RULE_IP;
  2.  
  3. typedef struct {
  4.     LW_LIST_LINE            QOSRU_lineManage;                           /*  UDP 规则管理链表            */
  5.     INT                      QOSRU_iRule;
  6.     INT                      QOSRU_iCmpMethod;                           /*  srouce, destination, both   */
  7.     ip4_addr_t                 QOSRU_ipaddrHboS;                           /*  IP 段起始 IP 地址           */
  8.     ip4_addr_t                 QOSRU_ipaddrHboE;                           /*  IP 段结束 IP 地址           */
  9.     u16_t                     QOSRU_usPortHboS;                           /*  端口起始 主机序             */
  10.     u16_t                     QOSRU_usPortHboE;                           /*  端口结束                    */
  11.     u8_t                      QOSRU_ucPrio;                               /*  QoS 优先级                  */
  12.     u8_t                      QOSRU_ucDontDrop;                           /*  QoS 可靠服务                */
  13. } __QOS_RULE_UDP;
  14. typedef __QOS_RULE_UDP     *__PQOS_RULE_UDP;
  15.  
  16. typedef struct {
  17.     LW_LIST_LINE            QOSRT_lineManage;                           /*  TCP 规则管理链表            */
  18.     INT                      QOSRT_iRule;
  19.     INT                      QOSRT_iCmpMethod;                           /*  srouce, destination, both   */
  20.     ip4_addr_t                 QOSRT_ipaddrHboS;                           /*  IP 段起始 IP 地址           */
  21.     ip4_addr_t                 QOSRT_ipaddrHboE;                           /*  IP 段结束 IP 地址           */
  22.     u16_t                     QOSRT_usPortHboS;                           /*  端口起始 主机序             */
  23.     u16_t                     QOSRT_usPortHboE;                           /*  端口结束                    */
  24.     u8_t                      QOSRT_ucPrio;                               /*  QoS 优先级                  */
  25.     u8_t                      QOSRT_ucDontDrop;                           /*  QoS 可靠服务                */
  26. } __QOS_RULE_TCP;
  27. typedef __QOS_RULE_TCP     *__PQOS_RULE_TCP;
  28.  
  29. /*********************************************************************************************************
  30.   QoS 网络接口结构
  31. *********************************************************************************************************/
  32. typedef struct {
  33.     LW_LIST_LINE            QOSNI_lineHash;                             /*  hash 表                     */
  34.     LW_LIST_LINE_HEADER   QOSNI_qosrnRule[__QOS_NETIF_RULE_MAX];  /*  规则表                      */
  35.     CHAR                    QOSNI_cName[IF_NAMESIZE];                 /*  网络接口名                  */
  36.     BOOL                    QOSNI_bAttached;                             /*  是否已经连接                */
  37. } __QOS_NETIF_CB;
  38. typedef __QOS_NETIF_CB     *__PQOS_NETIF_CB;

 

3.3 QoS插入规则流程

插入一个新规则时会根据网络接口名创建对应的QoS接口结构并放入QoS哈希表中,同样将此QoS接口保存到对应的网络接口结构中,以便此网络接口有数据交换时可以查找对应的规则。如 3.2所示。


3.2 QoS哈希表结构框图

然后将对应的规则保存到QoS接口结构的规则链表中,若之后需加入相同网络接口名的规则则添加到此链表中,如 3.3所示。


3.3 QoS规则链表


    • Related Articles

    • SylixOS 功能介绍及版本差异

      SylixOS功能介绍及版本差异 SylixOS 标准版 SylixOS 标准版是 SylixOS 的基础版本,具备如下功能: 兼容 IEEE 1003(ISO/IEC 9945)操作系统接口规范; 兼容 POSIX 1003.1b(ISO/IEC 9945-1)实时编程标准; 支持国军标 GJB7714-2012 操作系统接口规范; 优秀的实时性能(任务调度与切换算法时间复杂度为 O(1)); 支持无限多任务; 抢占式调度支持 256 个优先级; 支持虚拟进程; ...
    • SylixOS lite 版—基于 STM32F767 资源使用情况

      1、基本概念     代码段(text):顾名思义,代码存放的位置,在 STM32 中代码段一般存放于内置 FLASH 中; 已初始化数据段(data):已初始化数据段会分别体现在 FlASH 中和 RAM 中。因为是全局变量,运行过程中需要进行读写操作,因此占用一段 RAM 空间。又因为有初始值,其初始值需要占用 FlASH 空间。   未初始化的数据段(bss):bss 与 data 相同的地方时它也是全局变量,运行过程中需要进行读写操作,因此占用一段 RAM ...
    • 手动修改 SylixOS 工程类型的方法

       问题描述:        当我们想要通过 IDE 重新选择已有 SylixOS Project 的 base 时,如果 base 的类型需要变化,会遇到如下图所示的问题"SylixOS Base project invalid",导致无法选择想要的base。 问题原因:        当base类型变化了,创建SylixOS Project时,工程设置里设定了base的类型。 解决方法一:       ...
    • error: xxx-sylixos-elf-lzocom.exe

      Q:IDE 在编译工程时出现:xxxx-sylixos-elf-lzocom.exe  应用程序出错。 应用程序无法正常启动(0xc000007b)。请单击“确定”关闭应用程序。信息如下图所示。 安装 vc2010_redist_x86.exe 即可解决此问题, 此文件在 IDE 软件安装包的 Tools 目录下(如 SylixOS IDE 3.9.11_professional\Tools) 。
    • SylixOS 动态库更新 version 不一致的问题

      Q:SylixOS 动态库更新 version 不一致的问题 首先 SylixOS 是允许多个进程对共享库文件进行代码段共享的(默认是共享打开的,可以使用 dlconfig share dis 命令进行关闭),代码段共享会出现一个问题:当 A  进程 使用一个 share.so 共享库的时候,B 进程也使用 该 share.so 的共享库,share.so 共享库因为 B 的原因需要修改,修改后,更新share.so文件,然后重启 B 进程,一般来说会出现错误,错误如下: ...