- 论坛徽章:
- 3
|
本帖最后由 compare2000 于 2014-04-11 16:02 编辑
重要的不在于自己做过什么,做错了什么,而在不断的让自己明白不少道理,也知道自己错在哪里,好在哪里,尤其是能以淡定而务实的角度去看存在的一切。
----能够停下来看看自己走过的路,是非常重要的;而且还能平淡地看待得失,更是需要宽阔的胸襟!每个人都能够这样,将活的更有意义和充实!
子曰:“吾十有(1)五而志于学,三十而立(2),四十而不惑(3),五十而知天命(4),六十而耳顺(5),七十而从心所欲不逾矩(6)。”
QoS的CAR CAR (Committed Access Rate):承诺访问速率,与汽车的英文单词car同音。 限速!
首先,CAR是用来限速的,将进入网络某一流量的速率限制在约定的范围之内。
没有超速,奖励绿卡,可畅通无阻(转发) 。
稍微超速,黄牌警告,一般降级(remark后再发 )。
过分超速,红牌罚下,禁止通行(丢弃)。
红灯停,绿灯行,黄灯等一等。
知道为啥叫“CAR”吗?那是因为,过分超速,就咔咔咔(Cut)~~~,将超速的那部分报文卡掉。
那如何判定是不是超速呢? 使用令牌桶
令牌桶有三种测速方法,对应三种机制:
单速单桶
单速双桶
双速双桶
先介绍最简单的单速单桶吧。
首先以CIR的恒定速率往令牌桶放令牌。
CIR(Committed Information Rate):承诺信息速率。
接着,规定报文要从令牌桶领到令牌才能转发。就像车要进入高速公路,需要在入口领张通行卡。
想象一下:在高速入口没有收费员,而是设台自动出卡机,出卡口下放个桶,称之为C桶吧。出卡机以恒定速率往C桶放通行卡,过路司机自己取通行卡。
为了保持100米车距,间隔3.6秒以上才能放行一辆车,因此出卡机每3.6秒出一个通行卡。
《道路交通安全法》规定,高速公路行驶的车辆,车速超过每小时100公里时,应与同车道前车保持100米以上距离。
如果平均每3.6秒来了不止1辆车,通行卡很快就耗光,触发红灯亮,新到的车禁止进入高速。这就起到了限速作用,将速率限制在放卡速率范围内。
如果平均每3.6秒来了不到1辆车,桶里就可以累积一些通行卡。
累积通行卡的好处是,可以应付这种突发情况:某时刻突然来了长车(几百米长,有很多节车厢)。
不过需要规定,有几百米就拿几个通行卡。因为通常每100米最多一辆车,而长车长几百米,相当于一下子来了几辆车。
高速路上每100米最多一辆车,那一辆300米的车,相当于3辆普通车
假设某时刻来了600米的长车,C桶里只有5个卡,那得等积累到6个卡才能过。
那么,能通行的长车,长度最多是几百米呢? 那取决于C桶里最多一次能容纳几个卡。C桶的容量称为CBS
CBS(Committed Burst Size):承诺突发尺寸。
如果一直没有来车,桶满了,但出卡机一直在出卡,岂不浪费?嗯哪,单速单桶就是这么浪费。其实可以拿个大桶来接溢出来的卡,单速双桶就是这么设计的,这样就不那么浪费了。
既然讲到单速双桶,那接下来就介绍单速双桶吧。
设想,有个高速路系统,设置了2个桶(C桶和E桶)接通行卡,C桶在出卡口下接通行卡,等C桶接满,溢出的放E桶。
并规定,必须先拿C桶的,C桶不够把卡放回C桶再拿E桶的,不能同时拿两个桶的:
如果C桶足够,绿灯亮,通行,不扣分;
如果C桶不够E桶够,黄灯亮,罚扣1分,从C桶拿的令牌要归还;
如果C桶不够E桶也不够,红灯亮,罚扣12分,并禁止通行,通行卡要归还。
车来了之后,司机先拿C桶的;如果不够,就全放下,重新拿E桶的。
车有几百米长,就拿几个卡。
那E桶多大,跟C桶一样 非也。E桶的容量是EBS。 EBS(Extended Burst Size):超额突发尺寸。
E桶不能无限大。E桶太大的话,允许通过的车太长、太重,惯性就会太大,车距100米,刹车刹不住,是要追尾的,后果很严重!!
CBS也不能太大,否则允许通过的车太长,同样也会追尾?
不过,报文是不会追尾的。
对于报文,CBS设置太大,起不到限速作用。
例如,本想限速为100bit/s。假设CBS设置为3600MBytes,某个时间点,令牌桶已充满令牌。这时突然哗哗哗,1小时之内来了各种长度的报文,共3600MBytes,这些报文都能得到令牌,都被转发了。那么这1小时的报文速率为1MByte/s=8000000bit/s,而不是100bit/s。
1小时=3600s,1MByte=8000000bit。
CBS也不能设置太小。
例如,本想限速为100bit/s。假设CBS设置为1000Bytes。某个时间点,令牌桶已充满令牌,这时突然哗哗哗,1小时之内来了各种长报文,都比1000Bytes长,那这些报文谁都没有获得足够令牌,因此都被丢弃。那么这1小时,一个报文都没转发,报文速率为0,而不是100bit/s。
设备执行CAR的时候,流量是逐包转发的。
CBS不能太小,又不能太大,到底怎么设呢?
首先,CBS不能小于MTU,其次, CBS不能小于网络的正常突发量。但网络正常突发量不好确定,因此有人总结了一些经验公式
华为路由器的经验公式
CIR<=100Mbps时,CBS(Bytes)=CIR(kbps) × 1.5(s) ÷ 8
CIR >100Mbps时,CBS(Bytes)=100,000(kbps) × 1.5(s) ÷ 8
CIR的设置有什么讲究吗?
用户购买多大带宽, CIR就设多大。运营商和用户之间签订的SLA就有CIR、CBS、PIR、PBS等参数。
SLA(Service Level Agreements):服务水平协议。指用户和服务提供商签署的关于业务流在网络中传递时所应当获得的待遇。
双速双桶就好比是高速入口的那台出卡机有两个出卡口,分别以CIR和PIR的速率出卡,在每个出卡口下都放一个桶。这两个桶分别叫C桶和P桶,C桶的是通行卡,P桶的是纪念卡。
并规定,
先拿纪念卡,看是否足够。如果不够,把卡放回P桶,红灯亮,禁止通行,罚款1000元;
如果纪念卡足够,可以接着拿通行卡,如果通行卡足够,绿灯亮,通行,把纪念卡和通行卡都拿走。
如果通行卡不够,则黄灯亮,回去整改,罚扣1分,纪念卡可以拿走,通行卡放回C桶。
总结:
双速双桶 单速双桶
先P桶后C桶 先C桶后E桶
绿灯 两桶都拿 只拿C桶
黄灯 只拿P桶 只拿E桶
红灯 两桶都没拿 两桶都没拿
双速双桶不仅可以测量出是否超速,而且还可以测出超速的程度是否超出法律允许范围。P桶的出卡速率就是法律允许的最高车速。
那允许超长车通过吗? 允许。P桶的容量PBS跟EBS是一样的功能。所以有了P桶就不用E桶啦。PBS(Peak Burst Size):峰值突发尺寸。
应用CAR时,如何
选用三种令牌桶?
- 只限速,用单速单桶;
- 限速+区分突发量,用单速双桶;
- 限速+区分突发量+区分带宽是否超出峰值,用双速双桶。
@echo on
@rem 准备工作,清屏,设置颜色。。。
@cls
@color 74
@rem 设置变量
set TP_CUR_DIR=%cd%
@rem set TP_RELEASE_DIR=%TP_CUR_DIR%\build_result
set TP_RELEASE_DIR=%TP_CUR_DIR%\external\internal\drv\bsp\release
set TP_ICAN_BSP_DIR=%TP_CUR_DIR%\Ican_bsp
set BACKUP_PATH=%PATH%
@rem 记录个日志
@if exist build_bsp.log del build_bsp.log
@rem if not exist build_result mkdir build_result
call :build_icanbsp
call :build_bsp
call :packet_efs
goto end
@rem 编译ican_bsp
:build_icanbsp
set PATH=%BACKUP_PATH%
call :build_sd5103_ppc8306_ppc8321_bootrom %TP_RELEASE_DIR%\ar_vx55_sd5103 %TP_RELEASE_DIR%\ar_vx64_ppc8306 %TP_RELEASE_DIR%\ar_vx64_ppc8321
set PATH=%BACKUP_PATH%
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: DEFINE LISTS OF LEGAL COMMAND LINE PARAMETER VALUES
:::::::::::::::::::::::::::::::::::::::::::::::::::::::
SET CPU_LIST=ARM5181,ARM5281,ARM78200,ARM78200_BE,ARM78200RD,ARM78200RD_BE,ARM_EV,PPC603,PPC85XX,XCAT,XCAT_BE,VC,VC8,VC10,BC,PPC85XX_LION_RD,MIPS64
SET PP_TYPE_LIST=DX_ALL,EX,EX_ALL,EX_TG,EX_RD,EXMXPM,EX_DX_ALL,EXMXPM_DX_CH
SET TOOLKIT_LIST=WB26,WB26_DIAB
SET CROSSBAR_LIST=FOX,DUNE
SET PRODUCT_LIST=CPSS_ENABLER
SET UT_LIST=UTF_NO
SET LUA_LIST=NOLUA
SET GM_LIST=GM_LION,GM_XCAT2,GM_LION2,GM_PUMA3
SET ADDITIONAL_OPTION_LIST=SUB20
SET SCRIPT_MODE_OPTION_LIST=DEV,CUST,ENVBASE,UNZIP
set PRODUCT_DEFAULT=CPSS_ENABLER
::::::::::::::::::::::::::::::::::::::::::::::
:: set local variable RUN_COMPILE_CMD allowing
:: to run CMD for CPSS compiling
::::::::::::::::::::::::::::::::::::::::::::::
IF NOT DEFINED RUN_COMPILE_CMD SET RUN_COMPILE_CMD=YES
::::::::::::::::::::::::::::::::
:: check comand line arguments
::::::::::::::::::::::::::::::::
FOR %%i IN (%1 %2 %3 %4 %5) DO (
FOR %%j IN (%CPU_LIST%) DO (
IF %%i == %%j set CPU=%%j
)
FOR %%j IN (%PP_TYPE_LIST%) DO (
IF %%i == %%j SET PP_TYPE=%%j
)
FOR %%j IN (%TOOLKIT_LIST%) DO (
IF %%i == %%j SET TOOLKIT=%%j
)
FOR %%j IN (%CROSSBAR_LIST%) DO (
IF %%i == %%j SET CROSSBAR=%%j
)
FOR %%j IN (%PRODUCT_LIST%) DO (
IF %%i == %%j SET PRODUCT=%%j
)
FOR %%j IN (%UT_LIST%) DO (
IF %%i == %%j SET UT=%%j
)
FOR %%j IN (%LUA_LIST%) DO (
IF %%i == %%j SET LUA_MODE=%%j
)
FOR %%j IN (%GM_LIST%) DO (
IF %%i == %%j SET GM_MODE=%%j
)
FOR %%j IN (%SCRIPT_MODE_OPTION_LIST%) DO (
IF %%i == %%j SET SCRIPT_MODE=%%j
)
FOR %%j IN (%ADDITIONAL_OPTION_LIST%) DO (
IF %%i == %%j SET ADD_OPT_MODE=%%j
)
)
IF "%CPU%" == "" (echo CPU required
goto:EOF)
IF "%PP_TYPE%" == "EX" (
SET PP_TYPE=EX_ALL
)
IF "%PP_TYPE%" == "" (echo PP_TYPE required
goto:EOF)
:::::::::::::::::::::::::::::::
:: set UT option
:::::::::::::::::::::::::::::::
IF "%UT%" == "UTF_YES" (SET UT_OPTION=-uUTF_YES)
IF "%UT%" == "UTF_NO" (SET UT_OPTION=-uUTF_NO)
::::::::::::::::::::::::::::::::::::::::::::
:: UNZIP MODE
::::::::::::::::::::::::::::::::::::::::::::
IF "%SCRIPT_MODE%" == "CUST" (
SET HOST_OPTION=win32
GOTO DO_CUST
)
IF "%SCRIPT_MODE%" == "UNZIP" (
SET HOST_OPTION=win32
GOTO DO_UNZIP
) ELSE (
SET HOST_OPTION=win32_marvell_cpss_dev
GOTO RUN_BUILD)
O_UNZIP |
|