tc命令学习

CBQ(Class Based Queueing)排队规则:

      为可进行分类的排队规则,文档说它是最复杂,难理解,但效果却不是很好。好奇心驱使,所以就了解了下。它的难点在于它的shaping,由于它是通过计算传送包请求之间的时间间隔来控制传输速度的,但这种间隔却又很难测量,于是就有了它的不准确性。下面讲下它的shaping 原理吧,没那么难理解。

      如何在一个10Mb/s的网卡上限速为1Mb/s呢?

      如果传输速度为1Mb/s时,那么网卡90%的时间处于空闲状态。CBQ的shaping就是如何确保网卡的空闲时间为90%。

      给定传输包的平均值avpkt,那么在1Mb/s情况下,传输一个包的时间为(calculated idle time)cit=avpkt/1Mb,所以只需要保证发送包的平均时间为cit时,即可将速度限制为1Mb/s。

     实际包发送时间可视为两个包传送请求的时间间隔,当前包发送的平均时间使用exponential weighted moving average (EWMA)计算,不要被这个算法吓到,只是一个指数加权平均值算法。公式如下:

       t > 1,\ \    S_{t} = \alpha \cdot Y_{t} + (1-\alpha) \cdot S_{t-1}

Yt为时刻t时,发送一个包时所花的时间(即两个包传送请求的间隔时间)。

St为时刻t的包平均传输时间。

1>a>0

由此可见,当前包发送时间对平均时间影响最大。

在设置1Mb/s时,平均空闲时间:avidle = St - cit

当avidle>0时,说明当前包传输速度小于1Mb/s

当avidle=0时,当前包传输速度等于于1Mb/s

当avidle<0时,当前包传输速度等于于1Mb/s。此时CBQ就要进行响应调节了,减慢包发送速度。


参数:

avpkt

包平均大小,Average size of a packet, measured in bytes. Needed for calculating maxidle, which is derived from maxburst, which is specified in packets.

bandwidth

物理网卡带宽,如100Mb/s。

cell

包传输时间与包大小成阶梯关系,而非连续。想想也对,计算机最小单位为1byte,传输800bit和806bit包所用字节数是一样的,网络传输,最小单位就cell。

maxburst

当长长时间不发包时,avidle会很大,为了避免avidle无限大,导致网络带宽出现超大峰值,所以设定该值。maxburst 加上avpkt / bandwidth 来计算出maxidle,即avidle的最大值

minburst

当超速时,每次最小发送包的个数,当个数增加,可以增大链路的空闲时间粒度,方便控制。

minidle

为防止由于avidle过小,导致包发送等待时间过长,特此设定minidle,以作avidle最小值。

mpu

最小包大小

rate          设定的限制速度。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
简单明了 oid sim_at_response(u8 mode) { if(USART2_RX_STA&0X8000) //接收到一次数据了 { USART2_RX_BUF[USART2_RX_STA&0X7FFF]=0;//添加结束符 printf("%s",USART2_RX_BUF); //发送到串口 if(mode)USART2_RX_STA=0; } } /////////////////////////////////////////////////////////////////////////////////////////////////////////// //ATK-SIM900A 各项测试(拨号测试、短信测试、GPRS测试)共用代码 //sim900a发送命令后,检测接收到的应答 //str:期待的应答结果 //返回值:0,没有得到期待的应答结果 // 其他,期待应答结果的位置(str的位置) u8* sim900a_check_cmd(u8 *str) { char *strx=0; if(USART2_RX_STA&0X8000) //接收到一次数据了 { USART2_RX_BUF[USART2_RX_STA&0X7FFF]=0;//添加结束符 strx=strstr((const char*)USART2_RX_BUF,(const char*)str); } return (u8*)strx; } //向sim900a发送命令 //cmd:发送的命令字符串(不需要添加回车了),当cmd<0XFF的时候,发送数字(比如发送0X1A),大于的时候发送字符串. //ack:期待的应答结果,如果为空,则表示不需要等待应答 //waittime:等待时间(单位:10ms) //返回值:0,发送成功(得到了期待的应答结果) // 1,发送失败 u8 sim900a_send_cmd(u8 *cmd,u8 *ack,u16 waittime) { u8 res=0; USART2_RX_STA=0; if((u32)cmd<=0XFF) { while(DMA1_Channel7->CNDTR!=0); //等待通道7传输完成 USART2->DR=(u32)cmd; }else u2_printf("%s\r\n",cmd);//发送命令 if(ack&&waittime) //需要等待应答 { while(--waittime) //等待倒计时 { delay_ms(10); if(USART2_RX_STA&0X8000)//接收到期待的应答结果 { if(sim900a_check_cmd(ack))break;//得到有效数据 USART2_RX_STA=0; } } if(waittime==0)res=1; } return res; } //将1个字符转换为16进制数字 //chr:字符,0~9/A~F/a~F //返回值:chr对应的16进制数值 u8 sim900a_chr2hex(u8 chr) { if(chr>='0'&&chr<='9')return chr-'0'; if(chr>='A'&&chr<='F')return (chr-'A'+10); if(chr>='a'&&chr<='f')return (chr-'a'+10); return 0; } //将1个16进制数字转换为字符 //hex:16进制数字,0~15; //返回值:字符 u8 sim900a_hex2chr(u8 hex) { if(hex<=9)return hex+'0'; if(hex>=10&&hex<=15)return (hex-10+'A'); return '0'; } //unicode gbk 转换函数 //src:输入字符串 //dst:输出(uni2gbk时为gbk内码,gbk2uni时,为unicode字符串) //mode:0,unicode到gbk转换; // 1,gbk到unicode转换; void sim900a_unigbk_exchange(u8 *src,u8 *dst,u8 mode) { u16 temp; u8 buf[2]; if(mode)//gbk 2 unicode { while(*src!=0) { if(*src<0X81) //非汉字 { temp=(u16)ff_convert((WCHAR)*src,1); src++; }else //汉字,占2个字节 { buf[1]=*src++; buf[0]=*src++; temp=(u16)ff_convert((WCHAR)*(u16*)buf,1); } *dst++=sim900a_hex2chr((temp>>12)&0X0F); *dst++=sim900a_hex2chr((temp>>8)&0X0F); *dst++=sim900a_hex2chr((temp>>4)&0X0F); *dst++=sim900a_hex2chr(temp&0X0F); } }else //unicode 2 gbk { while(*src!=0) { buf[1]=sim900a_chr2hex(*src++)*16; buf[1]+=sim900a_chr2hex(*src++); buf[0]=sim900a_chr2hex(*src++)*16; buf[0]+=sim900a_chr2hex(*src++); temp=(u16)ff_convert((WCHAR)*(u16*)buf,0); if(temp<0X80){*dst=temp;dst++;} else {*(u16*)dst=swap16(temp);dst+=2;} } }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值