On Mon, 18 Feb 2008 09:53:35 +0900 (JST)
[EMAIL PROTECTED] (YAMAMOTO Takashi) wrote:

> > +           /* try to charge */
> > +           ret = res_counter_charge(&mem->res, mem->borrow_unit);
> > +           if (!ret) { /* success */
> > +                   *bwp += (mem->borrow_unit - size);
> > +                   goto out;
> > +           }
> > +   }
> > +   spin_lock(&mem->res.lock);
> > +   ret = res_counter_charge_locked(&mem->res, size);
> > +   spin_unlock(&mem->res.lock);
> 
> although i don't know if it matters, this retrying of charge affects failcnt.
> 
Hmm, yes. But what failcnt means is not so clear anyway.


> > +static void mem_cgroup_return_and_uncharge(struct mem_cgroup *mem, int 
> > size)
> > +{
> > +   unsigned long flags;
> > +   int uncharge_size = 0;
> > +
> > +   local_irq_save(flags);
> > +   if (mem->borrow_unit) {
> > +           int limit = mem->borrow_unit * 2;
> > +           int cpu;
> > +           s64 *bwp;
> > +           cpu = smp_processor_id();
> > +           bwp = &mem->stat.cpustat[cpu].count[MEM_CGROUP_STAT_BORROW];
> > +           *bwp += size;
> > +           if (*bwp > limit) {
> > +                   uncharge_size = *bwp - mem->borrow_unit;
> > +                   *bwp = mem->borrow_unit;
> > +           }
> > +   } else
> > +           uncharge_size = size;
> > +
> > +   if (uncharge_size) {
> > +           spin_lock(&mem->res.lock);
> > +           res_counter_uncharge_locked(&mem->res, size);
> 
> s/size/uncharge_size/
> 
Oops...will fix.


> > @@ -1109,12 +1202,29 @@ static u64 mem_throttle_read(struct cgro
> >     return (u64)mem->throttle.limit;
> >  }
> >  
> > +static int mem_bulkratio_write(struct cgroup *cont, struct cftype *cft, 
> > u64 val)
> > +{
> > +   struct mem_cgroup *mem = mem_cgroup_from_cont(cont);
> > +   int unit = val * PAGE_SIZE;
> > +   if (unit > (PAGE_SIZE << (MAX_ORDER/2)))
> > +           return -EINVAL;
> > +   mem->borrow_unit = unit;
> > +   return 0;
> > +}
> 
> it seems unsafe with concurrent mem_cgroup_borrow_and_charge or
> mem_cgroup_return_and_uncharge.
> 
Hmm, making this to be not configurable will be good.

Thanks,
-Kame

_______________________________________________
Containers mailing list
[EMAIL PROTECTED]
https://lists.linux-foundation.org/mailman/listinfo/containers

_______________________________________________
Devel mailing list
Devel@openvz.org
https://openvz.org/mailman/listinfo/devel

Reply via email to