Re: [PATCH mmotm] Fix NUMA accounting in numastat.txt

From: Minchan Kim
Date: Tue Sep 01 2009 - 03:25:05 EST


Hi, Kame.

On Tue, 1 Sep 2009 16:17:21 +0900
KAMEZAWA Hiroyuki <kamezawa.hiroyu@xxxxxxxxxxxxxx> wrote:

> On Tue, 1 Sep 2009 13:53:21 +0900
> Minchan Kim <minchan.kim@xxxxxxxxx> wrote:
>
> >
> > In Documentation/numastat.txt, it confused me.
> > For example, there are nodes [0,1] in system.
> >
> > barrios:~$ cat /proc/zoneinfo | egrep 'numa|zone'
> > Node 0, zone DMA
> > numa_hit 33226
> > numa_miss 1739
> > numa_foreign 27978
> > ..
> > ..
> > Node 1, zone DMA
> > numa_hit 307
> > numa_miss 46900
> > numa_foreign 0
> >
> > 1) In node 0, NUMA_MISS means it wanted to allocate page
> > in node 1 but ended up with page in node 0
> >
> > 2) In node 0, NUMA_FOREIGN means it wanted to allocate page
> > in node 0 but ended up with page from Node 1.
> >
> > But now, numastat explains it oppositely about (MISS, FOREIGN).
> > Let's fix up with viewpoint of zone.
> >
>
> I'm confused....documentation is really bad ?
> Implementation isn't ?

At that time, I though of it.
But I knew code is right since zone_stat_item said follwing as.
NUMA_MISS is rather unclear but NUMA_FOREIGN is clear, I think.

NUMA_MISS, /* allocated in non intended node */
NUMA_FOREIGN, /* was intended here, hit elsewhere */

Also I am worry about legacy tools related to NUMA but I don't know it.
Code change will break them.

> Hmm, this function ?
> ==
> void zone_statistics(struct zone *preferred_zone, struct zone *z)
> {
> if (z->zone_pgdat == preferred_zone->zone_pgdat) {
> __inc_zone_state(z, NUMA_HIT);
> } else {
> __inc_zone_state(z, NUMA_MISS);
> __inc_zone_state(preferred_zone, NUMA_FOREIGN);
> }
> if (z->node == numa_node_id())
> __inc_zone_state(z, NUMA_LOCAL);
> else
> __inc_zone_state(z, NUMA_OTHER);
> }
> ==
> I wonder
> ==
> void zone_statistics(struct zone *preferred_zone, struct zone *z)
> {
> if (z->zone_pgdat == preferred_zone->zone_pgdat) {
> __inc_zone_state(z, NUMA_HIT);
> } else {
> __inc_zone_state(preferred_zone, NUMA_MISS);
> __inc_zone_state(z, NUMA_FOREIGN);
> }
> if (z->node == numa_node_id())
> __inc_zone_state(z, NUMA_LOCAL);
> else
> __inc_zone_state(z, NUMA_OTHER);
> }
> ==
> Is correct fix ....
>
> Thanks,
> -Kame
>
>
> > Signed-off-by: Minchan Kim <minchan.kim@xxxxxxxxx>
> > ---
> > Documentation/numastat.txt | 8 ++++----
> > 1 files changed, 4 insertions(+), 4 deletions(-)
> >
> > diff --git a/Documentation/numastat.txt b/Documentation/numastat.txt
> > index 80133ac..9fcc9a6 100644
> > --- a/Documentation/numastat.txt
> > +++ b/Documentation/numastat.txt
> > @@ -7,10 +7,10 @@ All units are pages. Hugepages have separate counters.
> >
> > numa_hit A process wanted to allocate memory from this node,
> > and succeeded.
> > -numa_miss A process wanted to allocate memory from this node,
> > - but ended up with memory from another.
> > -numa_foreign A process wanted to allocate on another node,
> > - but ended up with memory from this one.
> > +numa_miss A process wanted to allocate memory from another node,
> > + but ended up with memory from this node.
> > +numa_foreign A process wanted to allocate on this node,
> > + but ended up with memory from another one.
> > local_node A process ran on this node and got memory from it.
> > other_node A process ran on this node and got memory from another node.
> > interleave_hit Interleaving wanted to allocate from this node
> > --
> > 1.5.4.3
> >
> >
> >
> > --
> > Kind regards,
> > Minchan Kim
> >
> > --
> > To unsubscribe, send a message with 'unsubscribe linux-mm' in
> > the body to majordomo@xxxxxxxxxx For more info on Linux MM,
> > see: http://www.linux-mm.org/ .
> > Don't email: <a href=mailto:"dont@xxxxxxxxx";> email@xxxxxxxxx </a>
> >
>


--
Kind regards,
Minchan Kim
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/