Re: [PATCH 1/3] page-allocator: Under memory pressure, wait on pressureto relieve instead of congestion

From: Christian Ehrhardt
Date: Tue Mar 09 2010 - 10:56:25 EST




Christoph Lameter wrote:
On Mon, 8 Mar 2010, Mel Gorman wrote:

diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h
index 30fe668..72465c1 100644
--- a/include/linux/mmzone.h
+++ b/include/linux/mmzone.h
@@ -398,6 +398,9 @@ struct zone {
unsigned long wait_table_hash_nr_entries;
unsigned long wait_table_bits;

+ /* queue for processes waiting for pressure to relieve */
+ wait_queue_head_t *pressure_wq;
+
/*

The waitqueue is in a zone? But allocation occurs by scanning a
list of possible zones.

+long zonepressure_wait(struct zone *zone, unsigned int order, long timeout)

So zone specific.

- if (!page && gfp_mask & __GFP_NOFAIL)
- congestion_wait(BLK_RW_ASYNC, HZ/50);
+ if (!page && gfp_mask & __GFP_NOFAIL) {
+ /* If still failing, wait for pressure on zone to relieve */
+ zonepressure_wait(preferred_zone, order, HZ/50);

The first zone is special therefore...

What happens if memory becomes available in another zone? Lets say we are
waiting on HIGHMEM and memory in ZONE_NORMAL becomes available?

Do you mean the same as Nick asked or another aspect of it?
citation:
"I mean the other way around. If that zone's watermarks are not met, then why shouldn't it be woken up by other zones reaching their watermarks."


--

Grüsse / regards, Christian Ehrhardt
IBM Linux Technology Center, System z Linux Performance
--
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/