Thank you for answers.
On Wed, 12 Nov 2008 13:11:12 +0200
Izik Eidus <izik@xxxxxxxxxxxx> wrote:
Avi Kivity wrote:If not in radix-tree, it's not tracked.
KAMEZAWA Hiroyuki wrote:When we reaplacing page using page_replace() we have:
Can I make a question ? (I'm working for memory cgroup.)
Now, we do charge to anonymous page when
- charge(+1) when it's mapped firstly (mapcount 0->1)
- uncharge(-1) it's fully unmapped (mapcount 1->0) vir page_remove_rmap().
My quesion is
- PageKSM pages are not necessary to be tracked by memory cgroup ?
oldpage - > anonymous page that is going to be replaced by newpage
newpage -> kernel allocated page (KsmPage)
so about oldpage we are calling page_remove_rmap() that will notify cgroup
and about newpage it wont be count inside cgroup beacuse it is file rmap page
(we are calling to page_add_file_rmap), so right now PageKSM wont ever be tracked by cgroup.
(But we don't want to track non-LRU pages which are not freeable.)
The caller of page_replace does know it, the only problem is that page_remove_rmap()- Can we know that "the page is just replaced and we don't necessary to do
charge/uncharge".
automaticly change the cgroup for anonymous pages,
if we want it not to change the cgroup, we can:
increase the cgroup count before page_remove (but in that case what happen if we reach to the limit???)
give parameter to page_remove_rmap() that we dont want the cgroup to be changed.
Hmm, current mem cgroup works via page_cgroup struct to track pages.
page <-> page_cgroup has one-to-one relation ship.
So, "exchanging page" itself causes trouble. But I may be able to provide
necessary hooks to you as I did in page migraiton.
Ok, thank you for confirmation.KSM have no anonymous pages (it share anonymous pages into KsmPAGE -> kernel allocated page without mapping)- annonymous page from KSM is worth to be tracked by memory cgroup ?
(IOW, it's on LRU and can be swapped-out ?)
so it isnt in LRU and it cannt be swapped, only when KsmPAGEs will be break by do_wp_page() the duplication will be able to swap.
My feeling is that shared pages should be accounted as if they were not shared; that is, a share page should be accounted for each process that shares it. Perhaps sharing within a cgroup should be counted as 1 page for all the ptes pointing to it.
If KSM pages are on radix-tree, it will be accounted automatically.
Now, we have "Unevictable" LRU and mlocked() pages are smartly isolated into its
own LRU. So, just doing
- inode's radix-tree
- make all pages mlocked.
- provide special page fault handler for your purpose
is simple one. But ok, whatever implementation you'll do, I have to check it
and consider whether it should be tracked or not. Then, add codes to memcg to
track it or ignore it or comments on your patches ;)
It's helpful to add me to CC: when you post this set again.
Thanks,
-Kame
--
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/