Resending with the good sequence-numbered in the Subject.
Sorry.
Add 2 new statistics :
- get_czone_to_shrink to trace how many time a czone
become a victim of the pagination.
- isolate_by_lru to trace how many pages of a czone are
removed from memory (more exactly from the lru list).
Apply on linux-2.6.15.1 + mem_rc-f0.4-2615 + patch1/3
Signed-Off-By: Patrick Le Dot <[EMAIL PROTECTED]>
diff -uprN b1/include/linux/ckrm_mem.h b2/include/linux/ckrm_mem.h
--- b1/include/linux/ckrm_mem.h 2006-02-24 07:54:15.000000000 +0100
+++ b2/include/linux/ckrm_mem.h 2006-02-23 16:27:27.000000000 +0100
@@ -41,6 +41,8 @@ struct ckrm_zone {
int pg_borrowed; /* # of pages borrowed from parent */
int pg_lent; /* # of pages lent to children */
int max_pg_per_czone; /* max of pages ever used in this czone
*/
+ int isolate_by_lru; /* # of pages removed from memory */
+ int get_czone_to_shrink; /* # of hit by ckrm_get_czone_to_shrink
*/
};
struct ckrm_mem_res {
diff -uprN b1/kernel/ckrm/ckrm_memcore.c b2/kernel/ckrm/ckrm_memcore.c
--- b1/kernel/ckrm/ckrm_memcore.c 2006-02-24 09:11:06.000000000 +0100
+++ b2/kernel/ckrm/ckrm_memcore.c 2006-02-24 09:50:24.000000000 +0100
@@ -464,6 +464,7 @@ mem_get_stats(void *my_res, char *buf)
struct zone *zone;
int active = 0, inactive = 0, fr = 0;
int pg_total = 0, pg_lent = 0, pg_borrowed = 0, n;
+ u64 temp;
ssize_t i, j = 0;
if (!res)
@@ -474,8 +475,10 @@ mem_get_stats(void *my_res, char *buf)
i = sprintf(buf,"Maximum of shrink ever called by the class = %d\n",
res->max_shrink_atlimit);
buf += i; j += i;
- i = sprintf(buf,"Maximum of pages ever used by the class = %d\n",
- res->max_pg_per_class);
+ temp = (u64) res->max_pg_per_class * 100;
+ do_div(temp, ckrm_tot_lru_pages);
+ i = sprintf(buf,"Maximum of pages ever used by the class = %d (%d
%%)\n",
+ res->max_pg_per_class, (int)temp);
buf += i; j += i;
for (n = 0; n < ckrm_nr_czones; n++) {
@@ -483,6 +486,12 @@ mem_get_stats(void *my_res, char *buf)
" ckrm zone index %d = %d \n",
n, res->ckrm_zone[n].max_pg_per_czone);
buf += i; j += i;
+ i = sprintf(buf,"# of pages checked in isolate_lru_pages = %d
\n",
+ res->ckrm_zone[n].isolate_by_lru);
+ buf += i; j += i;
+ i = sprintf(buf,"# of hit by ckrm_get_czone_to_shrink = %d \n",
+ res->ckrm_zone[n].get_czone_to_shrink);
+ buf += i; j += i;
pg_lent += res->ckrm_zone[n].pg_lent;
pg_total += res->ckrm_zone[n].pg_total;
pg_borrowed += res->ckrm_zone[n].pg_borrowed;
@@ -688,8 +697,11 @@ mem_reset_stats(void *my_res, const char
res->core->name);
res->max_shrink_atlimit = 0;
res->max_pg_per_class = 0;
- for (i = 0; i < ckrm_nr_czones; i++)
+ for (i = 0; i < ckrm_nr_czones; i++) {
res->ckrm_zone[i].max_pg_per_czone = 0;
+ res->ckrm_zone[i].isolate_by_lru = 0;
+ res->ckrm_zone[i].get_czone_to_shrink = 0;
+ }
return 0;
}
diff -uprN b1/kernel/ckrm/ckrm_memctlr.c b2/kernel/ckrm/ckrm_memctlr.c
--- b1/kernel/ckrm/ckrm_memctlr.c 2006-02-24 09:57:00.000000000 +0100
+++ b2/kernel/ckrm/ckrm_memctlr.c 2006-02-24 09:59:23.000000000 +0100
@@ -386,6 +386,7 @@ ckrm_get_czone_to_shrink(int czindex, in
if (idx == asked_idx) {
asked_czone = czone;
kref_get(&czone->memcls->nr_users);
+ czone->get_czone_to_shrink++;
}
}
spin_unlock_irq(&ckrm_overguar_lock[czindex]);
diff -uprN b1/mm/vmscan.c b2/mm/vmscan.c
--- b1/mm/vmscan.c 2006-02-24 08:44:21.000000000 +0100
+++ b2/mm/vmscan.c 2006-02-24 10:01:20.000000000 +0100
@@ -621,6 +621,7 @@ static int isolate_lru_pages(int nr_to_s
continue;
} else {
list_add(&page->lru, dst);
+ page->ckrm_zone->isolate_by_lru++;
set_page_ckrmzone(page, NULL);
nr_taken++;
}
@@ -702,6 +703,7 @@ static void shrink_cache(struct zone *zo
list_add(&page->lru, inactive_list);
}
set_page_ckrmzone(page, ckrm_zone);
+ page->ckrm_zone->isolate_by_lru--;
if (!pagevec_add(&pvec, page)) {
spin_unlock_irq(&zone->lru_lock);
__pagevec_release(&pvec);
@@ -827,6 +829,7 @@ refill_inactive_zone(struct zone *zone,
BUG();
list_move(&page->lru, inactive_list);
set_page_ckrmzone(page, ckrm_zone);
+ page->ckrm_zone->isolate_by_lru--;
pgmoved++;
if (!pagevec_add(&pvec, page)) {
zone->nr_inactive += pgmoved;
@@ -858,6 +861,7 @@ refill_inactive_zone(struct zone *zone,
BUG_ON(!PageActive(page));
list_move(&page->lru, active_list);
set_page_ckrmzone(page, ckrm_zone);
+ page->ckrm_zone->isolate_by_lru--;
pgmoved++;
if (!pagevec_add(&pvec, page)) {
zone->nr_active += pgmoved;
-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
_______________________________________________
ckrm-tech mailing list
https://lists.sourceforge.net/lists/listinfo/ckrm-tech