2002-01-08 14:56:50

by Andrea Arcangeli

[permalink] [raw]
Subject: 2.4.18pre2aa1

This attempts to fix all the fs corruption troubles with get_blocks
failures (like -ENOSPC). Thanks to Andrew for the big help in closing
those. Please review.

I also couldn't resist to add the dyn_sched because I'm dealing with
servers that needs to run 2k tasks (with only a few of them running at
the same time loading cpu), so there the reclaculate loop was evil and
the change is simple enough to be kind of obviously correct (btw: I also
seen a similar patch posted to l-k a few years back from somebody at
SGI), the dyn_sched patch from Davide basically fixes this making the N
only the number of running tasks and the improvement should become
visible (possibly also on machines with houndred of tasks with only a
few running). Davide's patch isn't in its original form, I changed it
quite a bit to fix various bits and I think it's safe enough now, but
please compare rc2aa2 with this new one and tell me if you can notice
any loss of responsiveness (note: I wouldn't be surprised if it would be
more responsive, the dyn_prio doesn't go away at the end of the first
timeslice, so it will detect better the interactive tasks than the
previous algorithm). In my testing on the laptop it seems to work fine,
I cannot notice anything wrong with the scheduler. The troubles happened
in 2.5 are irrelevant, I should have fixed all the glitches before
including it in -aa (thanks to Linus, Davide and the others on l-k for
spotting them on the 2.5 side). But still if you find any problem with
the scheduler backing out 30_dyn-sched-1 should cure it completly (and
of course please let me know in such case). thanks,

URL:

ftp://ftp.us.kernel.org/pub/linux/kernel/people/andrea/kernels/v2.4/2.4.18pre2aa1.bz2
ftp://ftp.us.kernel.org/pub/linux/kernel/people/andrea/kernels/v2.4/2.4.18pre2aa1/

Only in 2.4.17rc2aa2: 00_find_or_create_page-1

Merged in mainline.

Only in 2.4.17rc2aa2: 00_get_block-leftovers-1

Obsoleted by more extensive patches in 18pre1aa1.

Only in 2.4.18pre1aa1: 00_ia64-dma-1

Some block-highmem bit for ia64 from Andreas Schwab. However
I'm not sure if ia64 compiles yet, it is possible the ia64
patch is needed as well (it's not likely to apply without at least some
trivial reject though).

Only in 2.4.18pre1aa1: 00_msync-ret-1

Fix MS_ASYNC and try to report I/O errors as much as possible
in the msync path. Fix from Andrew Morton.

Only in 2.4.18pre1aa1: 00_netconsole-3c59x-1

Enable netconsole in 3c59x driver, from Andi Kleen.

Only in 2.4.18pre1aa1: 00_nfs-2.4.17-cto-1
Only in 2.4.18pre1aa1: 00_nfs-2.4.17-pathconf-1
Only in 2.4.18pre1aa1: 00_nfs-bkl-1
Only in 2.4.18pre1aa1: 00_nfs-rpc-ping-1
Only in 2.4.18pre1aa1: 00_nfs-seekdir-1

NFS updates from Trond Myklebust. BTW, the svc tcp patches are broken,
they oopsed on me with a simple mount of nfs via udp, so I left them
out. this is the oops for the record:

Jan 7 20:24:43 athlon kernel: Unable to handle kernel NULL pointer dereference at virtual address 00000028
Jan 7 20:24:43 athlon kernel: printing eip:
Jan 7 20:24:43 athlon kernel: c01290b0
Jan 7 20:24:43 athlon kernel: *pde = 00000000
Jan 7 20:24:43 athlon kernel: Oops: 0000
Jan 7 20:24:43 athlon kernel: CPU: 0
Jan 7 20:24:43 athlon kernel: EIP: 0010:[kmem_cache_alloc+192/240] Not tainted
Jan 7 20:24:43 athlon kernel: EFLAGS: 00010246
Jan 7 20:24:43 athlon kernel: eax: 00000000 ebx: c22bc200 ecx: c22bc39c edx: c0340b88
Jan 7 20:24:43 athlon kernel: esi: c1fe6a40 edi: 00000000 ebp: 000001f0 esp: c2583f38
Jan 7 20:24:43 athlon kernel: ds: 0018 es: 0018 ss: 0018
Jan 7 20:24:43 athlon kernel: Process nfsd (pid: 820, stackpage=c2583000)
Jan 7 20:24:43 athlon kernel: Stack: 00000000 c2592000 c02f8000 7fffffff c22bc39c c0340b88 c2583f80 c0111715
Jan 7 20:24:43 athlon kernel: c22bc200 c1fe6a40 c0340b88 c0340b88 c0276ef7 00000000 000001f0 c22bc200
Jan 7 20:24:43 athlon kernel: c1fe1dc0 c0340b88 c0278b3a c1fe6a40 00000000 c2582000 00000000 00000000
Jan 7 20:24:43 athlon kernel: Call Trace: [schedule_timeout+149/160] [svc_resbuf_alloc+23/112] [svc_recv+330/912] [nfsd+226/768] [kernel_thread+38/48
Jan 7 20:24:43 athlon kernel: [nfsd+0/768]
Jan 7 20:24:43 athlon kernel:
Jan 7 20:24:43 athlon kernel: Code: f6 47 28 01 0f 84 5b ff ff ff 68 c1 04 00 00 68 80 81 28 c0

Only in 2.4.18pre1aa1: 00_o_direct-leftovers-2

Make sure not to left suprious blocks allocated with O_DIRECT.
Fix is a little dirty but should be ok. Please review. Thanks.

Only in 2.4.18pre1aa1: 00_page-cache-release-1

Move the lru handling into __free_pages internals to
catch all pagecache users (obviously safe and faster given we
had a branch for the BUG() anyways there). From Benjamin LaHaise.

Only in 2.4.17rc2aa2: 00_ramdisk-buffercache-1
Only in 2.4.18pre1aa1: 00_ramdisk-buffercache-2

Further ramdisk fixes on top of the previous patch.
From Andrew Morton.

Only in 2.4.18pre1aa1: 00_reduce-module-races-1

Use synchronize_kernel from the rcu_poll functionality to reduce the
possibility of module unload race conditions (possibly definitely
fixing at least some of them). From Andi Kleen.

Only in 2.4.17rc2aa2: 00_silent-stack-overflow-13
Only in 2.4.18pre1aa1: 00_silent-stack-overflow-14

Rediffed due rejects.

Only in 2.4.18pre1aa1: 00_truncate-garbage-1

FS corruption fixes while dealing with get_block failures.
Patch from Andrew Morton, but note this has further fixes,
the BH_New handling was still wrong in the latest patch in my
inbox.

Only in 2.4.17rc2aa2: 10_parent-timeslice-8
Only in 2.4.18pre1aa1: 10_parent-timeslice-9

Rediffed due rejects.

Only in 2.4.17rc2aa2: 10_vm-21
Only in 2.4.18pre1aa1: 10_vm-22

Pass two times over all the pte before failing swap_out.

Only in 2.4.17rc2aa2: 20_highmem-debug-7
Only in 2.4.18pre1aa1: 20_highmem-debug-8

Rediffed due rejects.

Only in 2.4.18pre1aa1: 30_dyn-sched-1

Merged a fixed up version of the dynamic scheduler patch from Davide
Libenzi. In particular sys_sched_yield looked wrong (shouldn't throw away
the timeslice but only roll the task over) and idle tasks handling is
now corrected too (also make sure not to do suprious reschedule of the idle
tasks, set need_resched on idle tasks only via reschedule_idle). Also
increased a bit the nice levels and give the dyn_sched at max only the
double of power of a legacy timeslice.

If you've any problem with this release, please try to backout the
30_dyn-sched-1 patch as first thing. The main reason I merged it
is that I'm dealing with boxes with thousands of tasks, but only a few
of them running at the same time, and avoiding browse of the huge
linked list should make an visible difference for those systems.

Only in 2.4.17rc2aa2: 50_uml-patch-2.4.16-2.bz2
Only in 2.4.18pre1aa1: 50_uml-patch-2.4.17-4.bz2

Latest update from Jeff at user-mode-linux.sourceforge.net.

Only in 2.4.17rc2aa2: 60_atomic-alloc-7
Only in 2.4.18pre1aa1: 60_atomic-alloc-8

Rediffed.

Only in 2.4.17rc2aa2: 60_tux-2.4.16-final-E2.bz2
Only in 2.4.18pre1aa1: 60_tux-2.4.17-final-A0.bz2

Latest update from Ingo at http://www.redhat.com/~mingo/ .

Only in 2.4.17rc2aa2: 60_tux-vfs-3
Only in 2.4.18pre1aa1: 60_tux-vfs-4

Rediffed.

Only in 2.4.17rc2aa2: 70_loop-deadlock-2

Merged in mainline.

Andrea


2002-01-08 15:41:02

by Trond Myklebust

[permalink] [raw]
Subject: Re: knfsd over TCP (was RE: 2.4.18pre2aa1)

>>>>> " " == Andrea Arcangeli <[email protected]> writes:


> NFS updates from Trond Myklebust. BTW, the svc tcp patches are
> broken, they oopsed on me with a simple mount of nfs via udp,
> so I left them out. this is the oops for the record:

Duh...

sunrpc still hasn't been updated to use module_init(), so
initialization of the new buffer slab was only working when you used
the thing as a module. Sorry for not having spotted that one.

I've put out a fixed copy of the knfsd over TCP patch (and the NFS_ALL
patch).

Cheers,
Trond

2002-01-08 15:48:34

by Andrea Arcangeli

[permalink] [raw]
Subject: Re: knfsd over TCP (was RE: 2.4.18pre2aa1)

On Tue, Jan 08, 2002 at 04:40:33PM +0100, Trond Myklebust wrote:
> >>>>> " " == Andrea Arcangeli <[email protected]> writes:
>
>
> > NFS updates from Trond Myklebust. BTW, the svc tcp patches are
> > broken, they oopsed on me with a simple mount of nfs via udp,
> > so I left them out. this is the oops for the record:
>
> Duh...
>
> sunrpc still hasn't been updated to use module_init(), so
> initialization of the new buffer slab was only working when you used
> the thing as a module. Sorry for not having spotted that one.
>
> I've put out a fixed copy of the knfsd over TCP patch (and the NFS_ALL
> patch).

strightforward, thanks.

Andrea

2002-01-09 05:15:32

by Randy Hron

[permalink] [raw]
Subject: Re: 2.4.18pre2aa1

> I also couldn't resist to add the dyn_sched because I'm dealing with
> servers that needs to run 2k tasks (with only a few of them running at
> the same time loading cpu), so there the reclaculate loop was evil and
> the change is simple enough to be kind of obviously correct (btw: I also

Something has made a dramatic change in dbench throughput:

2.4.18pre2aa2 Throughput 23.4521 MB/sec (NB=29.3152 MB/sec 234.521 MBit/sec) 64 procs
2.4.17rc2aa2 Throughput 19.6605 MB/sec (NB=24.5756 MB/sec 196.605 MBit/sec) 64 procs
2.4.18pre2 Throughput 12.1986 MB/sec (NB=15.2483 MB/sec 121.986 MBit/sec) 64 procs

2.4.18pre2aa2 Throughput 18.6495 MB/sec (NB=23.3119 MB/sec 186.495 MBit/sec) 128 procs
2.4.17rc2aa2 Throughput 14.1212 MB/sec (NB=17.6515 MB/sec 141.212 MBit/sec) 128 procs
2.4.18pre2 Throughput 8.00551 MB/sec (NB=10.0069 MB/sec 80.0551 MBit/sec) 128 procs

2.4.18pre2aa2 Throughput 9.79641 MB/sec (NB=12.2455 MB/sec 97.9641 MBit/sec) 192 procs
2.4.18pre2 Throughput 8.09211 MB/sec (NB=10.1151 MB/sec 80.9211 MBit/sec) 192 procs
2.4.17rc2aa2 Throughput 5.80232 MB/sec (NB=7.2529 MB/sec 58.0232 MBit/sec) 192 procs

Some more test results for recent kernels are at:
http://home.earthlink.net/~rwhron/kernel/repo.html

> URL:
>
> ftp://ftp.us.kernel.org/pub/linux/kernel/people/andrea/kernels/v2.4/2.4.18pre2aa1.bz2

Based on the diff logs, here is a history of changes going into 2.4.18pre2aa1:
http://home.earthlink.net/~rwhron/kernel/2.4.18pre2aa1.html

--
Randy Hron