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