On Tue, Sep 6, 2022 at 5:54 AM Oscar Salvador <osalvador@xxxxxxx> wrote: > > On Mon, Sep 05, 2022 at 10:57:20PM +0200, Andrey Konovalov wrote: > > On Mon, Sep 5, 2022 at 5:10 AM Oscar Salvador <osalvador@xxxxxxx> wrote: > > > +enum stack_depot_action { > > > + STACK_DEPOT_ACTION_NONE, > > > + STACK_DEPOT_ACTION_COUNT, > > > +}; > > > > Hi Oscar, > > Hi Andrey > > > Why do we need these actions? Why not just increment the refcount on > > each stack trace save? > > Let me try to explain it. > > Back in RFC, there were no actions and the refcount > was incremented/decremented in __set_page_ownwer() > and __reset_page_owner() functions. > > This lead to a performance "problem", where you would > look for the stack twice, one when save it > and one when increment it. I don't get this. If you increment the refcount at the same moment when you save a stack trace, why do you need to do the lookup twice? > We figured we could do better and, at least, for the __set_page_owner() > we could look just once for the stacktrace when calling __stack_depot_save, > and increment it directly there. Exactly. > We cannot do that for __reset_page_owner(), because the stack we are > saving is the freeing stacktrace, and we are not interested in that. > That is why __reset_page_owner() does: > > <--- > depot_stack_handle_t alloc_handle; > > ... > alloc_handle = page_owner->handle; > handle = save_stack(GFP_NOWAIT | __GFP_NOWARN, STACK_DEPOT_ACTION_NONE); > page_owner->free_handle = handle > stack_depot_dec_count(alloc_handle); > ---> > > alloc_handle contains the handle for the allocation stacktrace, which was set > in __set_page_owner(), and page_owner->free handle contains the handle for the > freeing stacktrace. > But we are only interested in the allocation stack and we only want to increment/decrement > that on allocation/free. But what is the problem with incrementing the refcount for free stacktrace in __reset_page_owner? You save the stack there anyway. Or is this because you don't want to see free stack traces when filtering for bigger refcounts? I would argue that this is not a thing stack depot should care about. If there's a refcount, it should reflect the true number of references. Perhaps, what you need is some kind of per-stack trace user metadata. And the details of what format this metadata takes shouldn't be present in the stack depot code. > > Could you split out the stack depot and the page_owner changes into > > separate patches? > > I could, I am not sure if it would make the review any easier though, > as you could not match stackdepot <-> page_owner changes. > > And we should be adding a bunch of code that would not be used till later on. > But I can try it out if there is a strong opinion. Yes, splitting would be quite useful. It allows backporting stack depot changes without having to backport any page_owner code. As long as there are not breaking interface changes, of course. Thanks!