- 论坛徽章:
- 0
|
九贱兄,我没怎么看明白赋初值的时侯那个突发流量这儿,如下:
if (!dh)
{
dh = __dsthash_alloc_init(hinfo, &dst); //未命中,分配新的接点,并增加至hash 表
if (!dh)
{
/* enomem... don't match == DROP */
if (net_ratelimit())
printk(KERN_ERR "%s: ENOMEM\n", __FUNCTION__);
spin_unlock_bh(&hinfo->lock);
return 0;
}
//构建结点成员
dh->expires = jiffies + msecs_to_jiffies(hinfo->cfg.expire); //定时器
dh->rateinfo.prev = jiffies; //最后修改时间定为当前时间
dh->rateinfo.credit = user2credits(hinfo->cfg.avg * hinfo->cfg.burst); //初始化令牌
dh->rateinfo.credit_cap = user2credits(hinfo->cfg.avg * hinfo->cfg.burst);//初始化令牌桶大小,在令牌没有被消耗前,两者是相同的
dh->rateinfo.cost = user2credits(hinfo->cfg.avg); //初始化当前包的开销,每过一个包递减
spin_unlock_bh(&hinfo->lock);
return 1;
}
这一段描述的是当在哈希表里找不到匹配项时需要重新申请空间来生成一个哈希记录项,我没有看明后面赋初值的时侯为什么要用乘法啊,我个人觉的应当是用加法吧,
一个是当前令牌桶的初始值,一个是最大值,突发流量应当是加在hinfo->cfg.avg上才是正常流量和突发流量所需要的令牌数啊,这儿为什么要用乘法呢?我觉的应当
是下面的写法才对吧?
dh->rateinfo.credit = user2credits(hinfo->cfg.avg + hinfo->cfg.burst); //初始化令牌
dh->rateinfo.credit_cap = user2credits(hinfo->cfg.avg + hinfo->cfg.burst);//初始化令牌桶大小,在令牌没有被消耗前,两者是相同的 |
|