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

Reply via email to