Re: memory handling in pre5/pre6

From: Rik van Riel (riel@conectiva.com.br)
Date: Mon Apr 17 2000 - 17:23:30 EST


On 17 Apr 2000, Ulrich Drepper wrote:
> Rik van Riel <riel@conectiva.com.br> writes:
>
> > Question is, have any of you actually noticed a performance
> > hit because of this or are you just seeing different numbers
> > than what you're used to and automatically assuming that it
> > must be wrong?
>
> The machine is swapping when I go from one window to the others (from
> xemacs to netscape, mozilla, etc). And yes, this makes the system slower.

OK, I've changed mm/filemap.c a bit to:
- be closer to 2.2.15-pre<new> page eviction behaviour in
  shrink_mmap(), by preserving the accessed bit on still
  mapped pages
- remove a possible race condition in truncate_inode_pages(),
  I'm not sure if this fix will work, but it should ... ;)

I'd be interested in how much this patch helps interactive
performance, if at all... (I really need to setup X on my
test box;))

regards,

Rik

--
The Internet is not a network of computers. It is a network
of people. That is its real strength.

Wanna talk about the kernel? irc.openprojects.net / #kernelnewbies http://www.conectiva.com/ http://www.surriel.com/

--- linux-2.3.99-pre6-3/mm/filemap.c.orig Mon Apr 17 12:21:46 2000 +++ linux-2.3.99-pre6-3/mm/filemap.c Mon Apr 17 19:20:54 2000 @@ -149,11 +149,13 @@ /* page wholly truncated - free it */ if (offset >= start) { + if (TryLockPage(page)) { + spin_unlock(&pagecache_lock); + goto repeat; + } get_page(page); spin_unlock(&pagecache_lock); - lock_page(page); - if (!page->buffers || block_flushpage(page, 0)) lru_cache_del(page); @@ -191,11 +193,13 @@ continue; /* partial truncate, clear end of page */ + if (TryLockPage(page)) { + spin_unlock(&pagecache_lock); + goto repeat; + } get_page(page); spin_unlock(&pagecache_lock); - lock_page(page); - memclear_highpage_flush(page, partial, PAGE_CACHE_SIZE-partial); if (page->buffers) block_flushpage(page, partial); @@ -234,6 +238,16 @@ list_del(page_lru); dispose = &zone->lru_cache; + /* don't account passes over not DMA pages */ + if (zone && (!memclass(page->zone, zone))) + goto dispose_continue; + + count--; + dispose = &old; + /* the page is in use, we can't free it now */ + if (!page->buffers && page_count(page) > 1) + goto dispose_continue; + if (test_and_clear_bit(PG_referenced, &page->flags)) /* Roll the page at the top of the lru list, * we could also be more aggressive putting @@ -242,18 +256,7 @@ */ goto dispose_continue; - dispose = &old; - /* don't account passes over not DMA pages */ - if (zone && (!memclass(page->zone, zone))) - goto dispose_continue; - - count--; - dispose = &young; - - /* avoid unscalable SMP locking */ - if (!page->buffers && page_count(page) > 1) - goto dispose_continue; if (TryLockPage(page)) goto dispose_continue;

- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Sun Apr 23 2000 - 21:00:12 EST