Solaris Slab Allocator–Magazines[4]

Dynamic Magazine Resizing

现在来讨论一下,magazine中的rounds M是如何确定的。M越大,cache命中率越高,但是内存消耗越大。solaris使用的是自适应的方法:

  1. 给M设定一个比较小的初始值,depot layer中维护一个变量contention_rate表示cache miss的程度
  2. 每次试图访问depot的时候,注意depot是所有的CPU共享的,我们先试图加一个non-blocking trylock…
  3. 如果加锁失败,说明出现竞争,contention_rate++
  4. 如果contention_rate超过某个阈值的时候,我们就增加magazine的M
  5. magazine的M是有上限的,以免失控!

umem_depot_alloc
{
    umem_magazine_t *mp;
    if(mutex_trylock(&cp->cache_depot_lock)!=0){ //如果non-block lock失败
          (void)mutex_lock(&cp->cache_depot_lock);
          cp->cache_depot_contention++;

    }
    …
    (void)mutex_lock(&cp->cache_depot_lock);
}

注意,这里并没有增加magazine的代码,solaris是专门有一个update线程来定时检查并完成magazine自适应的工作的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值