在 2019/11/16 下午3:03, Shakeel Butt 写道: >> +reget_lruvec: >> + lruvec = mem_cgroup_page_lruvec(page, pgdat); >> + >> /* If we already hold the lock, we can skip some rechecking */ >> - if (!locked) { >> - locked = compact_lock_irqsave(&pgdat->lru_lock, >> - &flags, cc); >> + if (lruvec != locked_lruvec) { >> + if (locked_lruvec) { >> + spin_unlock_irqrestore(&locked_lruvec->lru_lock, >> + locked_lruvec->irqflags); >> + locked_lruvec = NULL; >> + } > What guarantees the lifetime of lruvec? You should read the comment on > mem_cgroup_page_lruvec(). Have you seen the patches Hugh had shared? > Please look at the trylock_page_lruvec(). > Thanks for comments, Shakeel. lruvec lifetime is same as memcg, which allocted in mem_cgroup_alloc()->alloc_mem_cgroup_per_node_info() I have read Hugh's patchset, even not every lines. But what's point of you here? > BTW have you tested Hugh's patches? > yes, I have tried the case-lru-file-readtwice on my machine w/o containers, it show a bit more regression. Thanks Alex