Re: [PATCH 6/9] clockpro-clockpro.patch

IWAMOTO Toshihiro
2006-02-08T10:05:05Z

At Fri, 03 Feb 2006 10:25:04 +0100,
Peter Zijlstra wrote:
> Could you test again with my latest patches found at:
> http://programming.kicks-ass.net/kernel-patches/page-replace/2.6.16-rc1-3/
>

I've noticed the way page_replace_reinsert puts pages to a list is
different from what the paper (TR-05-3.pdf) says.
I wonder if this divergence is intended or not, but the attached patch
gave a major improvement.
Also, I think there's no reason to call __select_list_hand in those
functions.

n unpatched patched
========================
100 392283 595229
200 393087 584397
300 309595 521259
400 283340 400243
500 132298 303189

--- linux-2.6.16-rc1-git3-clockpro/mm/clockpro.c.save 2006-02-08 17:20:40.000000000 +0900
+++ linux-2.6.16-rc1-git3-clockpro/mm/clockpro.c 2006-02-08 17:21:16.000000000 +0900
@@ -446,7 +446,10 @@ void page_replace_reinsert(struct list_h
spin_lock_irq(&zone->lru_lock);
__select_list_hand(zone, &zone->policy.list_hand[HAND_HOT]);
}
- list_move(&page->lru, &zone->policy.list_hand[HAND_HOT]);
+ if (!PageHot(page))
+ list_move(&page->lru, &zone->policy.list_hand[HAND_COLD]);
+ else
+ list_move(&page->lru, &zone->policy.list_hand[HAND_HOT]);
__page_release(zone, page, &pvec);
}
if (zone)
@@ -520,7 +523,10 @@ void page_replace_reinsert_zone(struct z
++dct;
}

- list_move(&page->lru, &zone->policy.list_hand[HAND_HOT]);
+ if (!PageHot(page))
+ list_move(&page->lru, &zone->policy.list_hand[HAND_COLD]);
+ else
+ list_move(&page->lru, &zone->policy.list_hand[HAND_HOT]);
__page_release(zone, page, &pvec);
}
__cold_target_inc(zone, dct);