On Fri, Mar 06, 2026 at 08:55:20PM -0800, JP Kobryn (Meta) wrote:
> When investigating pressure on a NUMA node, there is no straightforward way
> to determine which policies are driving allocations to it.
> 
> Add per-policy page allocation counters as new node stat items. These
> counters track allocations to nodes and also whether the allocations were
> intentional or fallbacks.
> 
> The new stats follow the existing numa hit/miss/foreign style and have the
> following meanings:
> 
>   hit
>     - for BIND and PREFERRED_MANY, allocation succeeded on node in nodemask
>     - for other policies, allocation succeeded on intended node
>     - counted on the node of the allocation
>   miss
>     - allocation intended for other node, but happened on this one
>     - counted on other node
>   foreign
>     - allocation intended on this node, but happened on other node
>     - counted on this node
> 
> Counters are exposed per-memcg, per-node in memory.numa_stat and globally
> in /proc/vmstat.
> 
> Signed-off-by: JP Kobryn (Meta) <[email protected]>

[...]

> +
> +     rcu_read_lock();
> +     memcg = mem_cgroup_from_task(current);
> +
> +     if (is_hit) {
> +             lruvec = mem_cgroup_lruvec(memcg, NODE_DATA(actual_nid));
> +             mod_lruvec_state(lruvec, hit_idx, nr_pages);
> +     } else {
> +             /* account for miss on the fallback node */
> +             lruvec = mem_cgroup_lruvec(memcg, NODE_DATA(actual_nid));
> +             mod_lruvec_state(lruvec, hit_idx + 1, nr_pages);
> +
> +             /* account for foreign on the intended node */
> +             lruvec = mem_cgroup_lruvec(memcg, NODE_DATA(intended_nid));
> +             mod_lruvec_state(lruvec, hit_idx + 2, nr_pages);
> +     }

This seems like monotonic increasing metrics and I think you don't care about
their absolute value but rather rate of change. Any reason this can not be
achieved through tracepoints and BPF combination?

Reply via email to