lkml.org 
[lkml]   [2013]   [Mar]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [PATCH 2/7] ksm: treat unstable nid like in stable tree
Hi Hugh,
On 03/06/2013 01:05 PM, Hugh Dickins wrote:
> On Wed, 6 Mar 2013, Ric Mason wrote:
> [ I've deleted the context because that was about the unstable tree,
> and here you have moved to asking about a case in the stable tree. ]

I think I can basically understand you, please correct me if something
wrong.

For ksm page:
If one ksm page(in old node) migrate to another(new) node(ksm page is
treated as old page, one new page allocated in another node now), since
we can't get right lock in this time, we can't move stable node to its
new tree at this time, stable node still in old node and
stable_node->nid still store old node value. If ksmd scan and compare
another page in old node and search stable tree will figure out that
stable node relevant ksm page is migrated to new node, stable node will
be erased from old node's stable tree and link to migrate_nodes list.
What's the life of new page in new node? new page will be scaned by
ksmd, it will search stable tree in new node and if doesn't find matched
stable node, the new node is deleted from migrate_node list and add to
new node's table tree as a leaf, if find stable node in stable tree,
they will be merged. But in special case, the stable node relevant ksm
page can also migrated, new stable node will replace the stable node
which relevant page migrated this time.
For unstable tree page:
If search in unstable tree and find the tree page which has equal
content is migrated, just stop search and return, nothing merged. The
new page in new node for this migrated unstable tree page will be insert
to unstable tree in new node.

>> For the case of a ksm page is migrated to a different NUMA node and migrate
>> its stable node to the right tree and collide with an existing stable node.
>> get_kpfn_nid(stable_node->kpfn) != NUMA(stable_node->nid) can capture nothing
> That's not so: as I've pointed out before, ksm_migrate_page() updates
> stable_node->kpfn for the new page on the new NUMA node; but it cannot
> (get the right locking to) move the stable_node to its new tree at that time.
>
> It's moved out once ksmd notices that it's in the wrong NUMA node tree -
> perhaps when one its rmap_items reaches the head of cmp_and_merge_page(),
> or perhaps here in stable_tree_search() when it matches another page
> coming in to cmp_and_merge_page().
>
> You may be concentrating on the case when that "another page" is a ksm
> page migrated from a different NUMA node; and overlooking the case of
> when the matching ksm page in this stable tree has itself been migrated.
>
>> since stable_node is the node in the right stable tree, nothing happen to it
>> before this check. Did you intend to check get_kpfn_nid(page_node->kpfn) !=
>> NUMA(page_node->nid) ?
> Certainly not: page_node is usually NULL. But I could have checked
> get_kpfn_nid(stable_node->kpfn) != nid: I was duplicating the test
> from cmp_and_merge_page(), but here we do have local variable nid.
>
> Hugh



\
 
 \ /
  Last update: 2013-03-06 12:01    [W:0.121 / U:0.332 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site