Skip to contentSkip to conversation

2.4's sys_readahead is borked

PATCH In review Robert Love 4 participants 6 messages Feb 4, 2004 – Feb 8, 2004

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 2.4's sys_readahead is borked

In 2.4, sys_readahead() performs readahead against a maximum of half the number of inactive pages. This is dumb, as it ignores the number of free pages completely. Worse, in certain situations, such as boot, the inactive list can be quite small and the free list quite large, but readahead(2) won't do anything.

The right thing to do is limit sys_readahead() to a maximum of half of the sum of the number of free pages and inactive pages, which is what 2.6 does.

Attached patch is against 2.4.25-pre8. Please apply.

Robert Love

 mm/filemap.c |    2 +-
 1 files changed, 1 insertion(+), 1 deletion(-)
mm/filemap.c renamed from mm/filemap.c.orig +1 -1
diff -urN linux-2.4.25-pre8/mm/filemap.c.orig linux-2.4.25-pre8/mm/filemap.c
@@ -1965,7 +1965,7 @@
 		nr = max;
 
 	/* And limit it to a sane percentage of the inactive list.. */
-	max = nr_inactive_pages / 2;
+	max = (nr_free_pages() + nr_inactive_pages) / 2;
 	if (nr > max)
 		nr = max;
 
#1 lore raw
Quoted 9 lines · Robert Love

In 2.4, sys_readahead() performs readahead against a maximum of half the number of inactive pages. This is dumb, as it ignores the number of free pages completely. Worse, in certain situations, such as boot, the inactive list can be quite small and the free list quite large, but readahead(2) won't do anything.

The right thing to do is limit sys_readahead() to a maximum of half of the sum of the number of free pages and inactive pages, which is what 2.6 does.

Hi Robert,

This looks okay, applied.

Question: Do you know any user of sys_readahead() ?

#2 lore raw

On Wed, 2004-02-04 at 12:30 -0200, Marcelo Tosatti wrote:

Hi, Marcelo.

Quoted 3 lines

Hi Robert,

This looks okay, applied.

Thanks!

Quoted 1 line

Question: Do you know any user of sys_readahead() ?

Not really - I've been playing with it. But OpenOffice just added it to preload some of their libraries. It should probably be deprecated and remove in 2.7, since posix_fadvise(POSIX_FADV_WILLNEED) does this same thing.

Robert Love

#3 lore raw
Quoted 8 lines · Robert Love
Quoted 1 line · Marcelo Tosatti

Question: Do you know any user of sys_readahead() ?

Not really - I've been playing with it. But OpenOffice just added it to preload some of their libraries. It should probably be deprecated and remove in 2.7, since posix_fadvise(POSIX_FADV_WILLNEED) does this same thing.

In 2.4 also?

#4 lore raw
Quoted 8 lines · Mike Fedyk
Quoted 4 lines · Robert Love

Not really - I've been playing with it. But OpenOffice just added it to preload some of their libraries. It should probably be deprecated and remove in 2.7, since posix_fadvise(POSIX_FADV_WILLNEED) does this same thing.

In 2.4 also?

No, posix_fadvise() is only in 2.6.

So we deprecate readahead() in 2.7...

Robert Love

#5 lore raw
In reply to Marcelo Tosatti
Quoted 2 lines · Marcelo Tosatti

Question: Do you know any user of sys_readahead() ?

Development versions of Fedora will sys_readahead a bunch of stuff during system boot to avoid disk IO (and seeks) later on. The plan is to expand this further from the current code (eg readahead stuff while dhcp is trying to get an address and the disk is idle, etc etc).