Re: [PATCH 2/2] mm: compaction: Minimise the time IRQs are disabled while isolating pages for migration
From: KAMEZAWA Hiroyuki <hidden>
Date: 2011-02-28 09:48:55
Also in:
lkml
On Mon, 28 Feb 2011 09:28:14 +0000 Mel Gorman [off-list ref] wrote:
On Mon, Feb 28, 2011 at 02:54:02PM +0900, KAMEZAWA Hiroyuki wrote:quoted
On Mon, 28 Feb 2011 06:48:18 +0100 Andrea Arcangeli [off-list ref] wrote:quoted
On Mon, Feb 28, 2011 at 11:17:46AM +0900, KAMEZAWA Hiroyuki wrote:quoted
BTW, I forget why we always take zone->lru_lock with IRQ disabled....To decrease lock contention in SMP to deliver overall better performance (not sure how much it helps though). It was supposed to be hold for a very short time (PAGEVEC_SIZE) to avoid giving irq latency problems.memory hotplug uses MIGRATE_ISOLATED migrate types for scanning pfn range without lru_lock. I wonder whether we can make use of it (the function which memory hotplug may need rework for the compaction but migrate_type can be used, I think).I don't see how migrate_type would be of any benefit here particularly as compaction does not directly affect the migratetype of a pageblock. I have not checked closely which part of hotplug you are on about but if you're talking about when pages actually get offlined, the zone lock is not necessary there because the pages are not on the LRU. In compactions case, they are. Did I misunderstand?
memory offline code doesn't take big lru_lock (and call isolate_lru_page()) at picking up migration target pages from LRU. While this, allocation from the zone is allowed. memory offline is done by mem_section unit. memory offline does. 1. making a whole section as MIGRATETYPE_ISOLATED. 2. scan pfn within section. 3. find a page on LRU 4. isolate_lru_page() -> take/release lru_lock. ----(*) 5. migrate it. 6. making all pages in the range as RESERVED. During this, by marking the pageblock as MIGRATETYPE_ISOLATED, - new allocation will never picks up a page in the range. - newly freed pages in the range will never be allocated and never in pcp. - page type of the range will never change. then, memory offline success. If (*) seems too heavy anyway and will be no help even if with some batching as isolate_lru_page_pagevec() or some, okay please forget offlining. BTW, can't we drop disable_irq() from all lru_lock related codes ? Thanks, -Kame -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/ Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>