在哪个网站申请建设资质,北京搬家公司哪个好,wordpress是开源,网站建设可以一次性进损益吗Little 定律就能反算系统容量#xff0c;但我这篇文章要正着算。
假想一个理发店场景。李大爷拥有一家占地 50 平米的理发店#xff0c;经理到店里理发如果已经有经理在理发#xff0c;就要拿个券等待#xff0c;请问李大爷需要印多少等待券#xff1f;
这是个系统容量问…Little 定律就能反算系统容量但我这篇文章要正着算。
假想一个理发店场景。李大爷拥有一家占地 50 平米的理发店经理到店里理发如果已经有经理在理发就要拿个券等待请问李大爷需要印多少等待券
这是个系统容量问题答案在 “方法 1按理发店容纳的经理数” 和 “方法 2李大爷 10 分钟最多理多少头” 之间。
方法 1如果李大爷 10 分钟最多 10 个头房屋能装 60 个经理理完 60 个头就要 60 分钟最后一位经理就要等待 60 分钟时间。方法 2不管李大爷 10 分钟最多理几个头最多印 1 张券无论何时到达的经理都只需要最多等几分几秒钟。
不管哪种方法系统都是稳定的采用方法 1如果有经理觉得等待时间太久他大概下次要么早点来要么不会再来了平均而言李大爷的顾客会维持在一个稳定的量取决于店里装多少经理采用方法 2几乎来了就能理顾客也会维持在一个稳定的量取决于李大爷 10 分钟理几个头。
人们倾向于方法 1包括公立医院银行饭店在内只要在营业就会一直发号这其实是一种错误的方法。
我先把方法 1 和方法 2 画个图
说回自己行业当需要做容量规划或确定自己系统的容量时很简单不需要做基准测试只需不断增加负载并观测时延变化当时延开始明显增加时的负载就是系统的容量。实践中就是采集一组数据拟合画图看图说话。
结论是要按照处理能力规划容量而不是按照 buffer 能力规划容量。但很少有人真正理解这一点下面我来建模分析一下同时说明这也是 bbr 的操作点是最佳操作点的一个证明然后给出一个简短说明说一下为什么方法 1 不好我仍然会用拥塞控制领域的 aimd 说方法 1。
设 f(x) 为系统能力函数g(x) 为处理时间函数x 为负载。一个最大能力恒定的处理系统可以表述为 当 x x 0 时 f ( x ) ⋅ g ( x ) x 0 \text{当 } xx_0 \text{时}f(x)\cdot g(x)x_0 当 xx0时f(x)⋅g(x)x0 当 x x 0 时 f ( x ) ⋅ g ( x ) x 0 , f ( x ) 相对增长率大于 g ( x ) 的相对增长率 \text{当 } xx_0 \text{时}f(x)\cdot g(x)x_0 \text{ , }f(x)\text{ 相对增长率大于 } g(x) \text{ 的相对增长率} 当 xx0时f(x)⋅g(x)x0 , f(x) 相对增长率大于 g(x) 的相对增长率 当 x x 0 时 f ( x ) ⋅ g ( x ) x 0 , f ( x ) 相对增长率小于 g ( x ) 的相对增长率 \text{当 } xx_0 \text{时}f(x)\cdot g(x)x_0 \text{ , }f(x)\text{ 相对增长率小于 } g(x) \text{ 的相对增长率} 当 xx0时f(x)⋅g(x)x0 , f(x) 相对增长率小于 g(x) 的相对增长率。
那么 x0 就是该系统的容量。
下面我来证明 “将负载维持在系统容量附近(统计偏差一丢丢)是最优的”。我用 E ( x ) f ( x ) g ( x ) E(x)\dfrac{f(x)}{g(x)} E(x)g(x)f(x) 表示效能理由是李大爷希望在负载更小的等待中获得更大的能力。对 E(x) 求导 E ′ ( x ) f ′ ( x ) ⋅ g ( x ) − f ( x ) ⋅ g ′ ( x ) g 2 ( x ) E(x)\dfrac{f(x)\cdot g(x)-f(x)\cdot g(x)}{g^2(x)} E′(x)g2(x)f′(x)⋅g(x)−f(x)⋅g′(x)
接下来利用第 23 条件使用相对于当前值的相对增长率是合理的因为消去了量纲获得了纯增长率有 当 x x 0 时 f ′ ( x ) f ( x ) g ′ ( x ) g ( x ) \text{当 } xx_0 \text{ 时}\dfrac{f(x)}{f(x)} \dfrac{g(x)}{g(x)} 当 xx0 时f(x)f′(x)g(x)g′(x)
于是有 f ′ ( x ) ⋅ g ( x ) − f ( x ) ⋅ g ′ ( x ) 0 f(x)\cdot g(x)-f(x)\cdot g(x)0 f′(x)⋅g(x)−f(x)⋅g′(x)0
结论是 当 x x 0 时 E ( x ) 是增函数 \text{当 } xx_0 \text{时}E(x)\text{ 是增函数} 当 xx0时E(x) 是增函数同理 当 x ≤ x 0 时 E ( x ) 是减函数 \text{当 } x\le x_0 \text{时}E(x)\text{ 是减函数} 当 x≤x0时E(x) 是减函数 当 x x 0 时 E ( x 0 ) 获得最大值 \text{当 } xx_0 \text{时}E(x_0)\text{ 获得最大值} 当 xx0时E(x0) 获得最大值。
这个也可以从 f(x) 和 g(x) 的图像中一眼看穿
这同时也证明了 bbr 的操作点是最优的该操作点就是 inflt bdp此处同时取到 maxbw 和 minrtt
类似于李大爷最大的修头能力和经理最小的等待理头时间。
这个论述不仅仅适用于李大爷理发和传输协议拥塞控制对服务器cpu 性能调优也适用我只是用我自己比较熟悉的领域来举例。
现在来对比一下文处所述方法 1相比上面论述的方法 2 基于能力动态适应方法 1 是静态的它是基于静态 buffer 大小的。仍以 aimd 举例一个 aimd 算法不需要测量任何能力和容量只需要两个静态变量一个是 buffer 大小另一个是 β。
一旦 β 确定时延和带宽利用率就很难两全其美。证明如下设 W 为 cwndB 为恰好 100% 利用带宽时 buffer 的大小先算一个的 B 和 β 的关系 { W b d p B ( 1 − β ) W b d p \begin{cases}WbdpB\\(1-\beta)Wbdp \end{cases} {WbdpB(1−β)Wbdp
联立上述方程组 B β ⋅ b d p 1 − β B\dfrac{\beta\cdot bdp}{1-\beta} B1−ββ⋅bdp
如果 buffer B时延就会增加如果 buffer B带宽利用率就会不足但对于单流而言无论 buffer 配置多大大时延大带宽小时延小带宽什么都没有改变。
另一方面如果减小 β理论上可以配置更小乃至非常小的 buffer锯齿也相应成为小小毛毛尖但却造成了频繁丢包和重传根据简单的 aimd 推算丢包率 p 和 β 的关系如下(参见 bbr 好在哪里) p 1 β ⋅ B 2 ( 1 − 1 2 ⋅ β ) p\dfrac{1}{\beta\cdot B^2(1-\dfrac{1}{2}\cdot \beta)} pβ⋅B2(1−21⋅β)1
buffer 减小p 增大排队时延转嫁到了重传时延什么都没有改变。因此可以看出aimd 算法存在固有效率损失它依赖的收敛信号恰恰是丢包而丢包要引入重传时延它永远也无法收敛到 x0。
以损定损损之又损我不明白为什么总有人拿 aimd 说极致优化。
那么到底多大的 buffer 合适呢早期建议约定时端口出口带宽与 100ms 的乘积这显然仅仅满足了可用性完全谈不上效率。加上设备 “以料足为贵”buffer 大小更是五花八门因此 bufferbloat 固有且无法消除。这和商场餐饮店门口长长的等待叫号异曲同工。
不怪 buffer也不怪算法是 buffer 就会被塞满因为无法统一无法同构只要有一条流在 capacity-seeking抖动就无可避免这种事在 parking lot topology 更容易发生几乎睁眼可见我留到下一篇说。
总之你知道如何测量系统容量了吗值得一提的是网络链路bdp 容量的测量要难得多这也是 bbr 在现网表现并不都优秀的原因这也是 aimd 算法永远迈不过去的坎下次说。 本文主要讲动态容量评估和静态容量评估水随山势山不转水转然而但凡你能测量 bw 和 rtt就不至于随波逐流但不可否认的是aimd 是好的什么都不用做。 浙江温州皮鞋湿下雨进水不会胖。