OS之Karma分配法:《Resource Allocation for Dynamic Demands》将金融风控机制引入操作系统,考虑用户既往资源申请与借出行为进行动态资源调配
Karma 方法简介
Karma 是一种针对动态用户需求的全新资源分配机制。Karma 的关键技术贡献是基于信用的资源分配算法:每个分配时刻,用户捐出自己未使用的资源,并在其他用户借用这些资源时分配信用;Karma 精心安排用户之间的信用交换(基于用户的即时需求、捐出的资源和借用的资源),并根据用户的信用进行优先资源分配。
- 满足动态需求
- 允许出借空闲资源(分为shared slices和donated sliced)
- 既往行为(出借[borrow]加分[increment credit])影响分配优先级
适用场景
- 多用户
- 需求动态变化
对 Google 和 Snowflake 工作负载的分析表明,大部分用户的需求是动态的,可在短时间内发生急剧变化。
优点1-公平性
场景1:有6个资源片,3个用户平均需求和公平份额等于2。
传统分配算法
公平分配比最大最小公平分配——随着时间的推移,公平分配每个用户8个资源片。
优点2-惩罚机制
相对于按用户要求分配资源的算法,Karma 管理的用户无法通过指定高于实际需求的需求来分配增加其可用资源。
要求用户了解所有用户的未来需求。如果
用户对未来的所有需求没有精确的了解
,它可能会损失n+2倍的有用分配。
优点3-防组团骗资源
实现架构
Karma 基于开源分布式数据库 Jiff 实现,采用了三种关键的数据结构来高效地实现管理机制——
KarmaPool、CreditMap 和 RateMap。
Jiff 文章地址:https://dl.acm.org/doi/abs/10.1145/3492321.3527539
KarmaPool 跟踪 donated slices 和 shared slices的pool,当资源分配发生变化时更新。
RateMap 将每个用户映射到其每个量子赚取或花费其信用的比率,即用户的保证份额与
它每次分配的资源量。
CreditMap 将每个用户映射到与其当前信用相对应的计数器。
免费获取 Karma 源码地址:https://github.com/resource-disaggregation/karma