交换机的激励式拥塞控制

上周二莫名阳了,休假三天,思考休假和钱的关系。

两种年假策略:

  • 每年定额年假,过期清零:员工倾向于有事没事休完假额,不然就亏了。
  • 每年定额年假,过期没休完换成钱:员工倾向于有事才休假,不然就亏了。

经理的视角,休假员工 “坏”,不休假员工 “好”,上述显然第二种策略更能激励员工尽量不休假,若选第一种,大概率大家都一样,或只求别当休假最多的那个。

这种社会学经验可被 Internet 拥塞控制所借鉴:

  • 不惩罚坏的,因为除了被惩罚的最坏的,其它的可继续作恶。整体趋势不向好。
  • 奖励好的,资源有限情况下,如果继续作恶,自己就会被挤掉,整体趋势向好。

拥塞控制的根本是 “buffer 用量保持在某水线以下”,与传统端到端方案不同的是,这件事在网络设备上做效果更好:

  • 谁占用 buffer 最少,就分给谁更多带宽。

在这种理想策略下,发送激进者,buffer 占用多,但它永远也不会阻塞 buffer 占用少的良性流量,拥塞的只是它自己。

但这种理想策略不可能实现,如果交换机能为每一条流识别一个 queue,就不会出现 HoL 问题了。路由器/交换机 queue 是固定的。

但空间的有限性可以靠时间延展:

  • 假设 buffer 大小 B,出口带宽 b,得到时间 t = B / b。
  • 固定 n 个 queue,每个 packet 根据 5-tuple 被 hash 到某一个 queue。
  • 以时间 d = m * t 为周期统计 n 个 queue 小于 alpha 的 queue,以 queue 大小负相关对其奖励带宽(带宽有限意味着剥夺其它带宽)。
  • 奖励带宽结束后,清空所有 queue,hash seed ++,更新 hash function,进入下一个周期。

不断滚动时间轮,平滑了粒度和误判,因为 queue 小的里面一定没激进流,但 queue 大的里面可能有良性流。

如此就在有限的 queue 完成了针对所有流的奖励结算,激进流越发无利可图不得不收敛,当所有 queue 一致时,收敛到公平。显然,在一个 buffer 排空周期内进行拥塞控制,比端到端 RTT 周期更灵敏。

评价一下。

总觉得拥塞控制是端到端的事是定势。以休假为例,如果都休假,结果是工作拥塞,不能假设人人都热爱工作,因此不能靠每个人安排好休假做到高效工作,经理肯定会引入奖惩,比如休假多的绩效打折,带病上班的受奖励,休不完的假换钱。

其实 Internet 早这么做了。各种队列管理,优先级调度就是干这个的,包括 RED 的各种变形。可始终不能闭环的原因在于大家没有意识到 “惩罚坏的效果不如奖励好的”。

奖励好的,剩下的资源让坏的在油锅上煎熬吧,于整体资源利用率有益,反之,惩罚坏的,好的可能只是鸡头,相对好不能驱动它们更好,整体上没有高资源利用率的收敛动力。

奖励好的方可形成负反馈环。

阳了之后考虑如何休假,因为此前从未因这个休过假,不在乎也不关注。真阳了之后,第一考虑病倒是次要,休息就好,问题是怎么休假比较难搞,年假有限,病假又要病历,这又没去医院,总不能去挺着去上班。后来才了解到公司人性化的休假政策,但这个时候本文已经在迷迷糊糊中构思好了。当然,本文的内容也可以被绩效考核借鉴。尚未完全恢复,不多说。

浙江温州皮鞋湿,下雨进水不会胖。

你可能感兴趣的:(智能路由器)