0. 前言

不知道有没有人跟我一样,看源码的时候如果想不清一个点总会特别难受,就盯着它不放。
bbr的源码最开始处就定义了这样的宏,并写了注释,可是我一开始想不通,就是想不通为什么取这个值,在网上还搜不到相关的解释。我奇怪这是不是一眼就该看懂的东西,可是我确实就是没懂吖。纠结之后选择问我老大,终于给解释明白了哈哈哈。整理以备忘,也分享给有需要的人。

/* Scale factor for rate in pkt/uSec unit to avoid truncation in bandwidth* estimation. The rate unit ~= (1500 bytes / 1 usec / 2^24) ~= 715 bps.* This handles bandwidths from 0.06pps (715bps) to 256Mpps (3Tbps) in a u32.* Since the minimum window is >=4 packets, the lower bound isn't* an issue. The upper bound isn't an issue with existing technologies.*/
#define BW_SCALE 24
#define BW_UNIT (1 << BW_SCALE)#define BBR_SCALE 8    /* scaling factor for fractions in BBR (e.g. gains) */
#define BBR_UNIT (1 << BBR_SCALE)

1. BW_UNIT

如它的名字所言,它就是一个单位,一个自定义单位,为什么需要它呢,就是方便表示罢了。比如 0.040s 可以这样表示,但如果数据都是几十秒以下的,那这时考虑换成 40ms 来表示会更方便,也不需要浮点数了。这个情况下,单位是熟知的ms,从s过来的缩放因子是1000。

搞清楚这个其实就明白了。我们最终要得到 pkt/uSec 为单位,但实际计算过程当中的数据会长什么样呢。定一包数据为1500字节好了。
1pkt/uSec = 1500B/us = 1500*8b/0.000001s = 1500*8*1000000 bps ~= 12G bps
这时我们就取pkt/uSec为单位的话,1就表示了这个速度了。要知道百兆带宽的网络,拉满了也就100Mbps啊。这个单位显然对于实际来说还太大了,我们需要更精确的。
如果定2^24为单位的话,那么 1从表示 12G可以降到 715,即
1500 bytes / 1 usec / 2^24 ~= 715 bps
这时一个u32的数可以表示的范围从[1,UINT_MAX]变成了 [715, 715*UINT_MAX],也是就是“0.06pps (715bps) to 256Mpps (3Tbps)”。这个范围对于实际运算来讲是合适的,所以可以取这个值。就是说,24只是一个合适的数,它并不是必须的或者精确的

2. BBR_UNIT

同理地,BBR_UNIT取的单位值是8,也是为了表示方便而加入缩放因子来调整数据表示范围。
比如有这样一个数组 {5/4,3/4,1,1,1,1,1,1 },我们可以选择定义成一个浮点数的类型来存放这些比例值,也可以选择加一个缩放因子,比如取4, 然后按这样子来定义数组,那么就可以直接用int类型来表示就可以了。

static const int bbr_pacing_gain[] = {BBR_UNIT * 5 / 4, /* probe for more available bw */BBR_UNIT * 3 / 4,  /* drain queue and/or yield bw to other flows */BBR_UNIT, BBR_UNIT, BBR_UNIT,   /* cruise at 1.0*bw to utilize pipe, */BBR_UNIT, BBR_UNIT, BBR_UNIT /* without creating excess queue... */
};

bbr中的缩放因子BW_SCALE/BBR_SCALE相关推荐

  1. CVPR 2019 | 旷视提出超分辨率新方法Meta-SR:单一模型实现任意缩放因子

    点击我爱计算机视觉标星,更快获取CVML新技术 CV君按:图像超分辨率(Super-Resolution,SR )的研究由来已久,但近两年来随着深度学习在该领域的成功应用,工业界的研究突然火了起来,互 ...

  2. CVPR | 旷视提出Meta-SR:单一模型实现超分辨率任意缩放因子

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 编辑:Sophia 计算机视觉联盟  报道  | 公众号 CVLianMeng 转载于 :旷视 [人工智能资源(书籍 ...

  3. 求n!中含有质因子p的个数

    定理:  中含有质因子p的个数为  ,其中  int cal(int n, int p) {int ans = 0;while (n != 0) {ans += n / p;n /= p; //相当与 ...

  4. R语言使用pROC包绘制ROC曲线实战:roc函数计算AUC值、plot.roc函数绘制ROC曲线、添加置信区间、为回归模型中的每个因子绘制ROC曲线并在同一个图中显示出来

    R语言使用pROC包绘制ROC曲线实战:roc函数计算AUC值.plot.roc函数绘制ROC曲线.添加置信区间.为回归模型中的每个因子绘制ROC曲线并在同一个图中显示出来 目录

  5. 关于定点机中的比例因子

    计算机采用定点数表示时,对于既有整数又有小数的原始数据,需要设定一个比例因子,数据按比例因子缩小成定点小数或扩大成定点整数再参加运算,结果输出时再按比例折算成实际值. 比例因子必须选择恰当.选择不当, ...

  6. html 图片自由缩放_PS中的“缩放”

    大家好!今天我们来总结一下Photoshop中的缩放,主要有图像(图片)的缩放.选区缩放.图层样式缩放. 1.图像的缩放 选中图像-快捷键 Ctrl+T-选择变换点.单击鼠标拖动进行变换. 2.选区缩 ...

  7. 关于WPF中平移缩放问题的解决

    问题解决步骤 关于WPF中平移缩放问题的解决 图形缩放移动的实现 遇到的问题描述 问题解决 问题总结 关于WPF中平移缩放问题的解决 一直在研究WPF的绘图问题,其中需要用到图形的移动,以及图形的缩放 ...

  8. 在VirtualBox中退出缩放模式的快捷方式[关闭]

    本文翻译自:Shortcut to exit scale mode in VirtualBox [closed] 在Oracle VirtualBox,Windows 7主机中退出缩放模式的快捷方式是 ...

  9. 怎么在CAD看图中适时缩放CAD图纸

    在CAD工作中,在使用CAD看图进行查看图纸的时候,我们会遇到很多的问题,就比如说图纸有的大有的小,那么我们怎么将CAD图纸适时缩放到指定的位置呢?下面我们就一起来看看怎么解决方法吧! 步骤一:首先, ...

最新文章

  1. 多媒体指令(灰度像素最大值)
  2. php 应用宝支付,U8SDK——应用宝YSDK新的支付流程
  3. C++中的wchar_t(转)
  4. TCP/IP详解学习笔记(2)-数据链路层
  5. php里面没有mssql,为什么没有正确使用PHP / MSSQL的日期/时间?
  6. 带你认识数据库视图对象,下次不要再认成“表”了
  7. Xml序列化自引用/循环引用问题2
  8. 他在 Stack Overflow 提问如何黑掉Stack Overflow,结果成了
  9. 【C、C++】ctype.h、cctype中的isnumber()函数和isdigit()函数的区别
  10. 九大内置对象及四个域对象的总结
  11. C++总结学习(一)
  12. cadence allegro 绘制蛇形等长线
  13. 牛客网初阶练习(6)
  14. python2 与 python3 共存
  15. bzoj 4987 Tree - dp
  16. 前端优质网络内容(引用)
  17. 【视频】老外拍的阿里巴巴纪录片,讲述淘宝怎么打败eBay
  18. OSPF主流LSA及域内域间Vlink虚链路配置
  19. Qt添加.qrc文件和设置exe图标和控件图标
  20. c++ 因数分解(递归)

热门文章

  1. 流式计算、实时计算和离线计算
  2. 论文阅读20220523_Baidu Apollo EM Planner
  3. Camunda流程引擎 Modeler (二)
  4. 操作系统(四)——文件管理
  5. css像素px,物理像素(pt),设备像素比(dpr),1px边框问题,viewport自适应
  6. js 色卡 (javascript 色卡 hsv 色卡 hsb 色卡)
  7. 1.5万倍超高回报率、融合盲盒玩法背后,NFT仍是巨鲸乐园
  8. 算法总结——JS实现递归
  9. ESD静电保护二极管的优点有哪些?
  10. 优恩ESD静电防护二极管原理与作用