public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* kswapd in tight loop 2.6.9-rc3-bk-recent
@ 2004-10-07 21:20 Chris Wright
  2004-10-07 21:39 ` Dave Jones
  2004-10-07 23:40 ` Andrew Morton
  0 siblings, 2 replies; 24+ messages in thread
From: Chris Wright @ 2004-10-07 21:20 UTC (permalink / raw)
  To: linux-kernel

Is this known?  Just came back from lunch, so I've no clue what kicked it
off.  Profile below. (2.6.9-rc3-bk from yesterday, pending updates don't
appear to touch vmscan or mm/ in general).

CPU: AMD64 processors, speed 1994.35 MHz (estimated)
Counted CPU_CLK_UNHALTED events (Cycles outside of halt state) with a
unit mask
of 0x00 (No unit mask) count 100000
samples  %        symbol name
2410135  53.4092  balance_pgdat
1328186  29.4329  shrink_zone
555121   12.3016  shrink_slab
84942     1.8823  __read_page_state
40770     0.9035  timer_interrupt
...

thanks,
-chris
-- 
Linux Security Modules     http://lsm.immunix.org     http://lsm.bkbits.net

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: kswapd in tight loop 2.6.9-rc3-bk-recent
  2004-10-07 21:20 kswapd in tight loop 2.6.9-rc3-bk-recent Chris Wright
@ 2004-10-07 21:39 ` Dave Jones
  2004-10-07 21:49   ` Chris Wright
  2004-10-07 23:40 ` Andrew Morton
  1 sibling, 1 reply; 24+ messages in thread
From: Dave Jones @ 2004-10-07 21:39 UTC (permalink / raw)
  To: Chris Wright; +Cc: linux-kernel

On Thu, Oct 07, 2004 at 02:20:19PM -0700, Chris Wright wrote:
 > Is this known?  Just came back from lunch, so I've no clue what kicked it
 > off.  Profile below. (2.6.9-rc3-bk from yesterday, pending updates don't
 > appear to touch vmscan or mm/ in general).
 > 
 > CPU: AMD64 processors, speed 1994.35 MHz (estimated)
 > Counted CPU_CLK_UNHALTED events (Cycles outside of halt state) with a
 > unit mask
 > of 0x00 (No unit mask) count 100000
 > samples  %        symbol name
 > 2410135  53.4092  balance_pgdat
 > 1328186  29.4329  shrink_zone
 > 555121   12.3016  shrink_slab
 > 84942     1.8823  __read_page_state
 > 40770     0.9035  timer_interrupt

I saw the same thing yesterday, also on an amd64 box though that
could be coincidence. The kswapd1 process was pegging the cpu at 99%
kswapd0 was idle.  After a few minutes, the box became so unresponsive
I had to reboot it.

I had put this down to me fiddling with some patches, and it hasnt'
reappeared today yet, but it sounds like we're seeing the same thing.

Sadly, I didn't get a profile of what was happening.
A 'make allmodconfig' triggered it for me, on a box with 2GB of ram,
and 2GB of swap. No swap was in use when things 'went wierd', and
there was a bunch of RAM sitting free too (about half a gig if memory
serves correctly)

		Dave


^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: kswapd in tight loop 2.6.9-rc3-bk-recent
  2004-10-07 21:39 ` Dave Jones
@ 2004-10-07 21:49   ` Chris Wright
  0 siblings, 0 replies; 24+ messages in thread
From: Chris Wright @ 2004-10-07 21:49 UTC (permalink / raw)
  To: Dave Jones; +Cc: Chris Wright, linux-kernel

* Dave Jones (davej@redhat.com) wrote:
> I saw the same thing yesterday, also on an amd64 box though that
> could be coincidence. The kswapd1 process was pegging the cpu at 99%
> kswapd0 was idle.

Same here.

> After a few minutes, the box became so unresponsive
> I had to reboot it.

Well, that CPU is useless ;-)  Otherwise the thing is still responding. 
One thing I noticed is the swap usage:

# grep Swap proc/meminfo
SwapCached:          4 kB
SwapTotal:     2031608 kB
SwapFree:      2031604 kB

So, I'm guessing the first page that went out to swap started this thing
off.

> I had put this down to me fiddling with some patches, and it hasnt'
> reappeared today yet, but it sounds like we're seeing the same thing.

I do have some local changes too.  But nothing that should trigger this.

> Sadly, I didn't get a profile of what was happening.
> A 'make allmodconfig' triggered it for me, on a box with 2GB of ram,
> and 2GB of swap. No swap was in use when things 'went wierd', and
> there was a bunch of RAM sitting free too (about half a gig if memory
> serves correctly)

Memory's a bit tighter here, but still 55M free though.

# cat /proc/meminfo
MemTotal:      2053240 kB
MemFree:         55324 kB
Buffers:        161900 kB
Cached:        1321312 kB
SwapCached:          4 kB
Active:         988476 kB
Inactive:       651820 kB
HighTotal:           0 kB
HighFree:            0 kB
LowTotal:      2053240 kB
LowFree:         55564 kB
SwapTotal:     2031608 kB
SwapFree:      2031604 kB
Dirty:              28 kB
Writeback:           0 kB
Mapped:         205600 kB
Slab:           334968 kB
Committed_AS:   581136 kB
PageTables:       8916 kB
VmallocTotal: 536870911 kB
VmallocUsed:      3080 kB
VmallocChunk: 536867727 kB
HugePages_Total:     0
HugePages_Free:      0
Hugepagesize:     2048 kB

thanks,
-chris
-- 
Linux Security Modules     http://lsm.immunix.org     http://lsm.bkbits.net

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: kswapd in tight loop 2.6.9-rc3-bk-recent
  2004-10-07 21:20 kswapd in tight loop 2.6.9-rc3-bk-recent Chris Wright
  2004-10-07 21:39 ` Dave Jones
@ 2004-10-07 23:40 ` Andrew Morton
  2004-10-08  0:34   ` Nick Piggin
  1 sibling, 1 reply; 24+ messages in thread
From: Andrew Morton @ 2004-10-07 23:40 UTC (permalink / raw)
  To: Chris Wright; +Cc: linux-kernel, Nick Piggin

Chris Wright <chrisw@osdl.org> wrote:
>
> Is this known?  Just came back from lunch, so I've no clue what kicked it
> off.  Profile below. (2.6.9-rc3-bk from yesterday, pending updates don't
> appear to touch vmscan or mm/ in general).
> 
> CPU: AMD64 processors, speed 1994.35 MHz (estimated)
> Counted CPU_CLK_UNHALTED events (Cycles outside of halt state) with a
> unit mask
> of 0x00 (No unit mask) count 100000
> samples  %        symbol name
> 2410135  53.4092  balance_pgdat
> 1328186  29.4329  shrink_zone
> 555121   12.3016  shrink_slab
> 84942     1.8823  __read_page_state

Oh fanfuckingtastic.  Something in there is failing to reach its
termination condition.  The code has become a trainwreck, so heaven knows
what it was.

For starters, let's actually use that local variable for something.





We haven't been incrementing local variable total_scanned since the
scan_control stuff went in.

Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 25-akpm/mm/vmscan.c |    1 +
 1 files changed, 1 insertion(+)

diff -puN mm/vmscan.c~vmscan-total_scanned-fix mm/vmscan.c
--- 25/mm/vmscan.c~vmscan-total_scanned-fix	Thu Oct  7 16:31:55 2004
+++ 25-akpm/mm/vmscan.c	Thu Oct  7 16:31:55 2004
@@ -1054,6 +1054,7 @@ scan:
 			shrink_slab(sc.nr_scanned, GFP_KERNEL, lru_pages);
 			sc.nr_reclaimed += reclaim_state->reclaimed_slab;
 			total_reclaimed += sc.nr_reclaimed;
+			total_scanned += sc.nr_scanned;
 			if (zone->all_unreclaimable)
 				continue;
 			if (zone->pages_scanned > zone->present_pages * 2)
_



This probably won't fix it.

It looks like the code will lock up if all zones are out of unreclaimable
memory, but you won't be hitting that.

I also wonder if it'll lock up if just the first zone has ->all_unreclaimable.

I think a good starting point here will be to revert the most recent
change.

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: kswapd in tight loop 2.6.9-rc3-bk-recent
  2004-10-07 23:40 ` Andrew Morton
@ 2004-10-08  0:34   ` Nick Piggin
  2004-10-08  0:37     ` Andrew Morton
  2004-10-08  0:42     ` Andrew Morton
  0 siblings, 2 replies; 24+ messages in thread
From: Nick Piggin @ 2004-10-08  0:34 UTC (permalink / raw)
  To: Andrew Morton; +Cc: Chris Wright, linux-kernel, Nick Piggin

Andrew Morton wrote:

>
>This probably won't fix it.
>
>It looks like the code will lock up if all zones are out of unreclaimable
>memory, but you won't be hitting that.
>
>

Out of _reclaimable_ memory?

It shouldn't if all_unreclaimable is being set correctly.

>I also wonder if it'll lock up if just the first zone has ->all_unreclaimable.
>
>

Well, not if the all_unreclaimable flag is set, but if it should be and 
isn't,
then probably it will lock up.

>I think a good starting point here will be to revert the most recent
>change.
>

That may fix it for the simple fact that kswapd will just go through its
priority loop once then stop.

I think that resetting all_unreclaimable in free_pages_bulk is the wrong
idea though, because that will keep it clear if a bit of kernel memory is
being pinned and freed in the background, won't it?

I had a look and decided that all_unreclaimable should probably be cleared
only if vmscan.c frees some memory - but I couldn't really come up with any
hard numbers to back me up :P


^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: kswapd in tight loop 2.6.9-rc3-bk-recent
  2004-10-08  0:34   ` Nick Piggin
@ 2004-10-08  0:37     ` Andrew Morton
  2004-10-08  0:51       ` Chris Wright
  2004-10-08  0:42     ` Andrew Morton
  1 sibling, 1 reply; 24+ messages in thread
From: Andrew Morton @ 2004-10-08  0:37 UTC (permalink / raw)
  To: Nick Piggin; +Cc: chrisw, linux-kernel, piggin

Nick Piggin <nickpiggin@yahoo.com.au> wrote:
>
> >I think a good starting point here will be to revert the most recent
>  >change.
>  >
> 
>  That may fix it for the simple fact that kswapd will just go through its
>  priority loop once then stop.

No it won't.  It'll probably make the priority windup worse.

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: kswapd in tight loop 2.6.9-rc3-bk-recent
  2004-10-08  0:34   ` Nick Piggin
  2004-10-08  0:37     ` Andrew Morton
@ 2004-10-08  0:42     ` Andrew Morton
  2004-10-08  1:41       ` Chris Wright
  1 sibling, 1 reply; 24+ messages in thread
From: Andrew Morton @ 2004-10-08  0:42 UTC (permalink / raw)
  To: Nick Piggin; +Cc: chrisw, linux-kernel, piggin


OK, after backing out the `goto spaghetti;' patch and cleaning up a few
thing I'll test the below.  It'll make kswapd much less aggressive.



diff -puN mm/vmscan.c~no-wild-kswapd-2 mm/vmscan.c
--- 25/mm/vmscan.c~no-wild-kswapd-2	2004-10-07 17:38:20.342906376 -0700
+++ 25-akpm/mm/vmscan.c	2004-10-07 17:38:20.348905464 -0700
@@ -964,6 +964,17 @@ out:
  * of the number of free pages in the lower zones.  This interoperates with
  * the page allocator fallback scheme to ensure that aging of pages is balanced
  * across the zones.
+ *
+ * kswapd can be semi-livelocked if some other process is allocating pages
+ * while kswapd is simultaneously trying to balance the same zone.  That's OK,
+ * because we _want_ kswapd to work continuously in this situation.  But a
+ * side-effect of kswapd's ongoing work is that the pageout priority keeps on
+ * winding up so we bogusly start doing swapout.
+ *
+ * To fix this we take a snapshot of the number of pages which need to be
+ * reclaimed from each zone in zone->pages_to_reclaim and never reclaim more
+ * pages than that.  Once the required number of pages have been reclaimed from
+ * each zone, we're done.  kwsapd will go back to sleep until someone wakes it.
  */
 static int balance_pgdat(pg_data_t *pgdat, int nr_pages)
 {
@@ -984,6 +995,7 @@ static int balance_pgdat(pg_data_t *pgda
 		struct zone *zone = pgdat->node_zones + i;
 
 		zone->temp_priority = DEF_PRIORITY;
+		zone->pages_to_reclaim = zone->pages_high - zone->pages_free;
 	}
 
 	for (priority = DEF_PRIORITY; priority >= 0; priority--) {
@@ -1003,7 +1015,7 @@ static int balance_pgdat(pg_data_t *pgda
 						priority != DEF_PRIORITY)
 					continue;
 
-				if (zone->free_pages <= zone->pages_high) {
+				if (zone->pages_to_reclaim > 0) {
 					end_zone = i;
 					break;
 				}
@@ -1036,10 +1048,11 @@ static int balance_pgdat(pg_data_t *pgda
 			if (zone->all_unreclaimable && priority != DEF_PRIORITY)
 				continue;
 
-			if (nr_pages == 0) {	/* Not software suspend */
-				if (zone->free_pages <= zone->pages_high)
-					all_zones_ok = 0;
-			}
+			if (zone->pages_to_reclaim <= 0)
+				continue;
+
+			if (nr_pages == 0)	/* Not software suspend */
+				all_zones_ok = 0;
 			zone->temp_priority = priority;
 			if (zone->prev_priority > priority)
 				zone->prev_priority = priority;
@@ -1049,6 +1062,10 @@ static int balance_pgdat(pg_data_t *pgda
 			shrink_zone(zone, &sc);
 			reclaim_state->reclaimed_slab = 0;
 			shrink_slab(sc.nr_scanned, GFP_KERNEL, lru_pages);
+
+			/* This fails to account for slab reclaim */
+			zone->pages_to_reclaim -= sc.nr_reclaimed;
+
 			sc.nr_reclaimed += reclaim_state->reclaimed_slab;
 			total_reclaimed += sc.nr_reclaimed;
 			total_scanned += sc.nr_scanned;
diff -puN include/linux/mmzone.h~no-wild-kswapd-2 include/linux/mmzone.h
--- 25/include/linux/mmzone.h~no-wild-kswapd-2	2004-10-07 17:38:20.343906224 -0700
+++ 25-akpm/include/linux/mmzone.h	2004-10-07 17:40:20.847586880 -0700
@@ -137,8 +137,9 @@ struct zone {
 	unsigned long		nr_scan_inactive;
 	unsigned long		nr_active;
 	unsigned long		nr_inactive;
-	int			all_unreclaimable; /* All pages pinned */
-	unsigned long		pages_scanned;	   /* since last reclaim */
+	long			pages_to_reclaim;	/* kswapd usage */
+	int			all_unreclaimable;	/* All pages pinned */
+	unsigned long		pages_scanned;		/* since last reclaim */
 
 	ZONE_PADDING(_pad2_)
 
_


^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: kswapd in tight loop 2.6.9-rc3-bk-recent
  2004-10-08  0:37     ` Andrew Morton
@ 2004-10-08  0:51       ` Chris Wright
  2004-10-08  1:40         ` Andrew Morton
  0 siblings, 1 reply; 24+ messages in thread
From: Chris Wright @ 2004-10-08  0:51 UTC (permalink / raw)
  To: Andrew Morton; +Cc: Nick Piggin, chrisw, linux-kernel, piggin

* Andrew Morton (akpm@osdl.org) wrote:
> Nick Piggin <nickpiggin@yahoo.com.au> wrote:
> >
> > >I think a good starting point here will be to revert the most recent
> >  >change.
> >  >
> > 
> >  That may fix it for the simple fact that kswapd will just go through its
> >  priority loop once then stop.
> 
> No it won't.  It'll probably make the priority windup worse.

In the interest of data collection, here's the last bit before I reboot.

SysRq : Show Memory
Mem-info:
Node 1 DMA per-cpu: empty
Node 1 Normal per-cpu:
cpu 0 hot: low 32, high 96, batch 16
cpu 0 cold: low 0, high 32, batch 16
cpu 1 hot: low 32, high 96, batch 16
cpu 1 cold: low 0, high 32, batch 16
Node 1 HighMem per-cpu: empty
Node 0 DMA per-cpu:
cpu 0 hot: low 2, high 6, batch 1
cpu 0 cold: low 0, high 2, batch 1
cpu 1 hot: low 2, high 6, batch 1
cpu 1 cold: low 0, high 2, batch 1
Node 0 Normal per-cpu:
cpu 0 hot: low 32, high 96, batch 16
cpu 0 cold: low 0, high 32, batch 16
cpu 1 hot: low 32, high 96, batch 16
cpu 1 cold: low 0, high 32, batch 16
Node 0 HighMem per-cpu: empty

Free pages:       53200kB (0kB HighMem)
Active:239438 inactive:178323 dirty:8 writeback:0 unstable:0 free:13300 slab:76700 mapped:52305 pagetables:2172
Node 1 DMA free:0kB min:0kB low:0kB high:0kB active:0kB inactive:0kB present:0kB
protections[]: 0 0 0
Node 1 Normal free:25272kB min:1020kB low:2040kB high:3060kB active:624172kB inactive:282700kB present:1047936kB
protections[]: 0 0 0
Node 1 HighMem free:0kB min:128kB low:256kB high:384kB active:0kB inactive:0kB present:0kB
protections[]: 0 0 0
Node 0 DMA free:728kB min:12kB low:24kB high:36kB active:788kB inactive:7848kB present:16384kB
protections[]: 0 0 0
Node 0 Normal free:27200kB min:1004kB low:2008kB high:3012kB active:332792kB inactive:422744kB present:1032188kB
protections[]: 0 0 0
Node 0 HighMem free:0kB min:128kB low:256kB high:384kB active:0kB inactive:0kB present:0kB
protections[]: 0 0 0
Node 1 DMA: empty
Node 1 Normal: 150*4kB 66*8kB 45*16kB 0*32kB 192*64kB 55*128kB 8*256kB 2*512kB 1*1024kB 0*2048kB 0*4096kB = 25272kB
Node 1 HighMem: empty
Node 0 DMA: 8*4kB 1*8kB 1*16kB 13*32kB 4*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 728kB
Node 0 Normal: 10*4kB 3*8kB 2*16kB 3*32kB 308*64kB 43*128kB 1*256kB 1*512kB 1*1024kB 0*2048kB 0*4096kB = 27200kB
Node 0 HighMem: empty
Swap cache: add 79, delete 1, find 0/0, race 0+0
Free swap:       2031292kB
524127 pages of RAM
10946 reserved pages
263444 pages shared
78 pages swap cached

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: kswapd in tight loop 2.6.9-rc3-bk-recent
  2004-10-08  0:51       ` Chris Wright
@ 2004-10-08  1:40         ` Andrew Morton
  0 siblings, 0 replies; 24+ messages in thread
From: Andrew Morton @ 2004-10-08  1:40 UTC (permalink / raw)
  To: Chris Wright; +Cc: nickpiggin, chrisw, linux-kernel, piggin

Chris Wright <chrisw@osdl.org> wrote:
>
>  Node 1 DMA free:0kB min:0kB low:0kB high:0kB active:0kB inactive:0kB present:0kB
>  protections[]: 0 0 0
>  Node 1 Normal free:25272kB min:1020kB low:2040kB high:3060kB active:624172kB inactive:282700kB present:1047936kB
>  protections[]: 0 0 0
>  Node 1 HighMem free:0kB min:128kB low:256kB high:384kB active:0kB inactive:0kB present:0kB
>  protections[]: 0 0 0

hm.  empty zones all over the zonelist.   We may not be handling that right.

>  Node 0 DMA free:728kB min:12kB low:24kB high:36kB active:788kB inactive:7848kB present:16384kB
>  protections[]: 0 0 0
>  Node 0 Normal free:27200kB min:1004kB low:2008kB high:3012kB active:332792kB inactive:422744kB present:1032188kB
>  protections[]: 0 0 0
>  Node 0 HighMem free:0kB min:128kB low:256kB high:384kB active:0kB inactive:0kB present:0kB
>  protections[]: 0 0 0

I can't see anything here which would cause kswapd to go nuts.

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: kswapd in tight loop 2.6.9-rc3-bk-recent
  2004-10-08  0:42     ` Andrew Morton
@ 2004-10-08  1:41       ` Chris Wright
  2004-10-08  1:51         ` Chris Wright
  0 siblings, 1 reply; 24+ messages in thread
From: Chris Wright @ 2004-10-08  1:41 UTC (permalink / raw)
  To: Andrew Morton; +Cc: Nick Piggin, chrisw, linux-kernel, piggin

* Andrew Morton (akpm@osdl.org) wrote:
> 
> OK, after backing out the `goto spaghetti;' patch and cleaning up a few
> thing I'll test the below.  It'll make kswapd much less aggressive.

testing with this compile fix:

diff -u 25-akpm/mm/vmscan.c edited/mm/vmscan.c
--- 25-akpm/mm/vmscan.c	2004-10-07 17:38:20.348905464 -0700
+++ edited/mm/vmscan.c	2004-10-07 18:38:14 -07:00
@@ -999,7 +999,7 @@
 		struct zone *zone = pgdat->node_zones + i;
 
 		zone->temp_priority = DEF_PRIORITY;
-		zone->pages_to_reclaim = zone->pages_high - zone->pages_free;
+		zone->pages_to_reclaim = zone->pages_high - zone->free_pages;
 	}
 
 	for (priority = DEF_PRIORITY; priority >= 0; priority--) {

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: kswapd in tight loop 2.6.9-rc3-bk-recent
  2004-10-08  1:41       ` Chris Wright
@ 2004-10-08  1:51         ` Chris Wright
  2004-10-08  1:53           ` Andrew Morton
  0 siblings, 1 reply; 24+ messages in thread
From: Chris Wright @ 2004-10-08  1:51 UTC (permalink / raw)
  To: Chris Wright; +Cc: Andrew Morton, Nick Piggin, linux-kernel, piggin

* Chris Wright (chrisw@osdl.org) wrote:
> * Andrew Morton (akpm@osdl.org) wrote:
> > 
> > OK, after backing out the `goto spaghetti;' patch and cleaning up a few
> > thing I'll test the below.  It'll make kswapd much less aggressive.
> 
> testing with this compile fix:

passes initial simple testing (whereas I could get the mainline code, and the
one-liner to spin right off).  

thanks,
-chris
-- 
Linux Security Modules     http://lsm.immunix.org     http://lsm.bkbits.net

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: kswapd in tight loop 2.6.9-rc3-bk-recent
  2004-10-08  1:51         ` Chris Wright
@ 2004-10-08  1:53           ` Andrew Morton
  2004-10-08  2:46             ` Nick Piggin
  2004-10-08  3:05             ` Chris Wright
  0 siblings, 2 replies; 24+ messages in thread
From: Andrew Morton @ 2004-10-08  1:53 UTC (permalink / raw)
  To: Chris Wright; +Cc: nickpiggin, linux-kernel, piggin

Chris Wright <chrisw@osdl.org> wrote:
>
> (whereas I could get the mainline code, and the
>  one-liner to spin right off).  

How?  (up to and including .config please).

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: kswapd in tight loop 2.6.9-rc3-bk-recent
  2004-10-08  1:53           ` Andrew Morton
@ 2004-10-08  2:46             ` Nick Piggin
  2004-10-08  3:01               ` Andrew Morton
  2004-10-08  3:05             ` Chris Wright
  1 sibling, 1 reply; 24+ messages in thread
From: Nick Piggin @ 2004-10-08  2:46 UTC (permalink / raw)
  To: Andrew Morton; +Cc: Chris Wright, nickpiggin, linux-kernel

[-- Attachment #1: Type: text/plain, Size: 301 bytes --]



Andrew Morton wrote:

>Chris Wright <chrisw@osdl.org> wrote:
>
>>(whereas I could get the mainline code, and the
>> one-liner to spin right off).  
>>
>
>How?  (up to and including .config please).
>
>
>

Ah, free_pages <= pages_high, ie. 0 <= 0, which is true;
commence spinning.

How's this go?



[-- Attachment #2: vm-fix-empty-zones.patch --]
[-- Type: text/x-patch, Size: 1136 bytes --]



Signed-off-by: Nick Piggin <nickpiggin@yahoo.com.au>


---

 linux-2.6-npiggin/mm/vmscan.c |    6 +++---
 1 files changed, 3 insertions(+), 3 deletions(-)

diff -puN mm/vmscan.c~vm-fix-empty-zones mm/vmscan.c
--- linux-2.6/mm/vmscan.c~vm-fix-empty-zones	2004-10-08 12:44:14.000000000 +1000
+++ linux-2.6-npiggin/mm/vmscan.c	2004-10-08 12:44:48.000000000 +1000
@@ -1003,7 +1003,7 @@ static int balance_pgdat(pg_data_t *pgda
 						priority != DEF_PRIORITY)
 					continue;
 
-				if (zone->free_pages <= zone->pages_high) {
+				if (zone->free_pages < zone->pages_high) {
 					end_zone = i;
 					goto scan;
 				}
@@ -1035,7 +1035,7 @@ scan:
 				continue;
 
 			if (nr_pages == 0) {	/* Not software suspend */
-				if (zone->free_pages <= zone->pages_high)
+				if (zone->free_pages < zone->pages_high)
 					all_zones_ok = 0;
 			}
 			zone->temp_priority = priority;
@@ -1142,7 +1142,7 @@ static int kswapd(void *p)
  */
 void wakeup_kswapd(struct zone *zone)
 {
-	if (zone->free_pages > zone->pages_low)
+	if (zone->free_pages >= zone->pages_low)
 		return;
 	if (!waitqueue_active(&zone->zone_pgdat->kswapd_wait))
 		return;

_

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: kswapd in tight loop 2.6.9-rc3-bk-recent
  2004-10-08  2:46             ` Nick Piggin
@ 2004-10-08  3:01               ` Andrew Morton
  2004-10-08  3:13                 ` Nick Piggin
  2004-10-08  3:15                 ` Nick Piggin
  0 siblings, 2 replies; 24+ messages in thread
From: Andrew Morton @ 2004-10-08  3:01 UTC (permalink / raw)
  To: Nick Piggin; +Cc: chrisw, nickpiggin, linux-kernel, Dave Jones

Nick Piggin <piggin@cyberone.com.au> wrote:
>
> >Chris Wright <chrisw@osdl.org> wrote:
>  >
>  >>(whereas I could get the mainline code, and the
>  >> one-liner to spin right off).  
>  >>
>  >
>  >How?  (up to and including .config please).
>  >
>  >
>  >
> 
>  Ah, free_pages <= pages_high, ie. 0 <= 0, which is true;
>  commence spinning.

Maybe.  It requires that the zonelists be screwy:

 Node 1 DMA free:0kB min:0kB low:0kB high:0kB active:0kB inactive:0kB present:0kB
 protections[]: 0 0 0
 Node 1 Normal free:25272kB min:1020kB low:2040kB high:3060kB active:624172kB inactive:282700kB present:1047936kB
 protections[]: 0 0 0
 Node 1 HighMem free:0kB min:128kB low:256kB high:384kB active:0kB inactive:0kB present:0kB
 protections[]: 0 0 0
 Node 0 DMA free:728kB min:12kB low:24kB high:36kB active:788kB inactive:7848kB present:16384kB
 protections[]: 0 0 0
 Node 0 Normal free:27200kB min:1004kB low:2008kB high:3012kB active:332792kB inactive:422744kB present:1032188kB
 protections[]: 0 0 0
 Node 0 HighMem free:0kB min:128kB low:256kB high:384kB active:0kB inactive:0kB present:0kB
 protections[]: 0 0 0

See that DMA zone on node 1?  Wonder how it got like that.  It
should not be inside pgdat->nrzones anyway.

David, is your setup NUMA?  Can you show us a sysrq-M dump?


^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: kswapd in tight loop 2.6.9-rc3-bk-recent
  2004-10-08  1:53           ` Andrew Morton
  2004-10-08  2:46             ` Nick Piggin
@ 2004-10-08  3:05             ` Chris Wright
  1 sibling, 0 replies; 24+ messages in thread
From: Chris Wright @ 2004-10-08  3:05 UTC (permalink / raw)
  To: Andrew Morton; +Cc: Chris Wright, nickpiggin, linux-kernel, piggin

[-- Attachment #1: Type: text/plain, Size: 705 bytes --]

* Andrew Morton (akpm@osdl.org) wrote:
> Chris Wright <chrisw@osdl.org> wrote:
> >
> > (whereas I could get the mainline code, and the
> >  one-liner to spin right off).  
> 
> How?  (up to and including .config please).

I just started up memhog (attached), and waited for swapping to start.
After a bit into swap (nothing happened) I killed it, and did swapoff
in order to start over.  This promptly triggered the looping.  Then I
tried your one-liner patch.  And once memhog pushed pages into swap,
kswapd spun off.  In both cases it was quick and easy to reproduce,
although the trigger wasn't identical.

thanks,
-chris
-- 
Linux Security Modules     http://lsm.immunix.org     http://lsm.bkbits.net

[-- Attachment #2: memhog.c --]
[-- Type: text/x-c++src, Size: 301 bytes --]

#include <unistd.h>

main(int argc, char *argv[])
{
	void *p;
	int sz = getpagesize();
	int max=0, total=0;

	if (argc > 1)
		max = atoi(argv[1]);

	while(1) {
		p = (void *)malloc(sz);
		if (p)
			memset(p, 0, sz);
		else
			break;
		total += sz;
		if (max && total >= max)
			break;
	}
	pause();

}

[-- Attachment #3: kswapd.config --]
[-- Type: text/plain, Size: 29108 bytes --]

#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.9-rc3
# Thu Oct  7 12:12:28 2004
#
CONFIG_X86_64=y
CONFIG_64BIT=y
CONFIG_X86=y
CONFIG_MMU=y
CONFIG_RWSEM_GENERIC_SPINLOCK=y
CONFIG_X86_CMPXCHG=y
CONFIG_EARLY_PRINTK=y
CONFIG_HPET_TIMER=y
CONFIG_HPET_EMULATE_RTC=y
CONFIG_GENERIC_ISA_DMA=y
CONFIG_GENERIC_IOMAP=y

#
# Code maturity level options
#
CONFIG_EXPERIMENTAL=y
CONFIG_CLEAN_COMPILE=y

#
# General setup
#
CONFIG_LOCALVERSION=""
CONFIG_SWAP=y
CONFIG_SYSVIPC=y
CONFIG_POSIX_MQUEUE=y
# CONFIG_BSD_PROCESS_ACCT is not set
CONFIG_SYSCTL=y
CONFIG_AUDIT=y
CONFIG_AUDITSYSCALL=y
CONFIG_LOG_BUF_SHIFT=18
CONFIG_HOTPLUG=y
CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y
# CONFIG_EMBEDDED is not set
CONFIG_KALLSYMS=y
CONFIG_KALLSYMS_ALL=y
# CONFIG_KALLSYMS_EXTRA_PASS is not set
CONFIG_FUTEX=y
CONFIG_EPOLL=y
CONFIG_IOSCHED_NOOP=y
CONFIG_IOSCHED_AS=y
CONFIG_IOSCHED_DEADLINE=y
CONFIG_IOSCHED_CFQ=y
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
CONFIG_SHMEM=y
# CONFIG_TINY_SHMEM is not set

#
# Loadable module support
#
CONFIG_MODULES=y
CONFIG_MODULE_UNLOAD=y
CONFIG_MODULE_FORCE_UNLOAD=y
CONFIG_OBSOLETE_MODPARM=y
# CONFIG_MODVERSIONS is not set
CONFIG_KMOD=y
CONFIG_STOP_MACHINE=y

#
# Processor type and features
#
CONFIG_MK8=y
# CONFIG_MPSC is not set
# CONFIG_GENERIC_CPU is not set
CONFIG_X86_L1_CACHE_BYTES=64
CONFIG_X86_L1_CACHE_SHIFT=6
CONFIG_X86_TSC=y
CONFIG_X86_GOOD_APIC=y
# CONFIG_MICROCODE is not set
CONFIG_X86_MSR=y
CONFIG_X86_CPUID=y
CONFIG_X86_IO_APIC=y
CONFIG_X86_LOCAL_APIC=y
CONFIG_MTRR=y
CONFIG_SMP=y
CONFIG_PREEMPT=y
CONFIG_SCHED_SMT=y
CONFIG_K8_NUMA=y
CONFIG_DISCONTIGMEM=y
CONFIG_NUMA=y
CONFIG_HAVE_DEC_LOCK=y
CONFIG_NR_CPUS=4
CONFIG_GART_IOMMU=y
CONFIG_SWIOTLB=y
CONFIG_X86_MCE=y

#
# Power management options
#
CONFIG_PM=y
CONFIG_PM_DEBUG=y
CONFIG_SOFTWARE_SUSPEND=y
CONFIG_PM_STD_PARTITION=""

#
# ACPI (Advanced Configuration and Power Interface) Support
#
CONFIG_ACPI=y
CONFIG_ACPI_BOOT=y
CONFIG_ACPI_INTERPRETER=y
CONFIG_ACPI_SLEEP=y
CONFIG_ACPI_SLEEP_PROC_FS=y
CONFIG_ACPI_AC=y
CONFIG_ACPI_BATTERY=y
CONFIG_ACPI_BUTTON=y
CONFIG_ACPI_FAN=y
CONFIG_ACPI_PROCESSOR=y
CONFIG_ACPI_THERMAL=y
# CONFIG_ACPI_ASUS is not set
CONFIG_ACPI_TOSHIBA=y
CONFIG_ACPI_DEBUG=y
CONFIG_ACPI_BUS=y
CONFIG_ACPI_EC=y
CONFIG_ACPI_POWER=y
CONFIG_ACPI_PCI=y
CONFIG_ACPI_SYSTEM=y

#
# CPU Frequency scaling
#
# CONFIG_CPU_FREQ is not set

#
# Bus options (PCI etc.)
#
CONFIG_PCI=y
CONFIG_PCI_DIRECT=y
CONFIG_PCI_MMCONFIG=y
CONFIG_UNORDERED_IO=y
CONFIG_PCI_MSI=y
# CONFIG_PCI_LEGACY_PROC is not set
# CONFIG_PCI_NAMES is not set

#
# PCMCIA/CardBus support
#
# CONFIG_PCMCIA is not set

#
# PCI Hotplug Support
#
# CONFIG_HOTPLUG_PCI is not set

#
# Executable file formats / Emulations
#
CONFIG_BINFMT_ELF=y
CONFIG_BINFMT_MISC=y
CONFIG_IA32_EMULATION=y
CONFIG_IA32_AOUT=y
CONFIG_COMPAT=y
CONFIG_SYSVIPC_COMPAT=y
CONFIG_UID16=y

#
# Device Drivers
#

#
# Generic Driver Options
#
CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y
# CONFIG_FW_LOADER is not set
# CONFIG_DEBUG_DRIVER is not set

#
# Memory Technology Devices (MTD)
#
# CONFIG_MTD is not set

#
# Parallel port support
#
# CONFIG_PARPORT is not set

#
# Plug and Play support
#

#
# Block devices
#
CONFIG_BLK_DEV_FD=y
# CONFIG_BLK_CPQ_DA is not set
# CONFIG_BLK_CPQ_CISS_DA is not set
# CONFIG_BLK_DEV_DAC960 is not set
# CONFIG_BLK_DEV_UMEM is not set
CONFIG_BLK_DEV_LOOP=y
# CONFIG_BLK_DEV_CRYPTOLOOP is not set
# CONFIG_BLK_DEV_NBD is not set
# CONFIG_BLK_DEV_SX8 is not set
# CONFIG_BLK_DEV_UB is not set
CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_SIZE=4096
CONFIG_BLK_DEV_INITRD=y
CONFIG_LBD=y

#
# ATA/ATAPI/MFM/RLL support
#
CONFIG_IDE=y
CONFIG_BLK_DEV_IDE=y

#
# Please see Documentation/ide.txt for help/info on IDE drives
#
# CONFIG_BLK_DEV_IDE_SATA is not set
# CONFIG_BLK_DEV_HD_IDE is not set
CONFIG_BLK_DEV_IDEDISK=y
CONFIG_IDEDISK_MULTI_MODE=y
CONFIG_BLK_DEV_IDECD=y
# CONFIG_BLK_DEV_IDETAPE is not set
# CONFIG_BLK_DEV_IDEFLOPPY is not set
# CONFIG_BLK_DEV_IDESCSI is not set
# CONFIG_IDE_TASK_IOCTL is not set
# CONFIG_IDE_TASKFILE_IO is not set

#
# IDE chipset support/bugfixes
#
CONFIG_IDE_GENERIC=y
# CONFIG_BLK_DEV_CMD640 is not set
CONFIG_BLK_DEV_IDEPCI=y
# CONFIG_IDEPCI_SHARE_IRQ is not set
# CONFIG_BLK_DEV_OFFBOARD is not set
# CONFIG_BLK_DEV_GENERIC is not set
# CONFIG_BLK_DEV_OPTI621 is not set
# CONFIG_BLK_DEV_RZ1000 is not set
CONFIG_BLK_DEV_IDEDMA_PCI=y
# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
CONFIG_IDEDMA_PCI_AUTO=y
# CONFIG_IDEDMA_ONLYDISK is not set
# CONFIG_BLK_DEV_AEC62XX is not set
# CONFIG_BLK_DEV_ALI15X3 is not set
CONFIG_BLK_DEV_AMD74XX=y
# CONFIG_BLK_DEV_ATIIXP is not set
# CONFIG_BLK_DEV_CMD64X is not set
# CONFIG_BLK_DEV_TRIFLEX is not set
# CONFIG_BLK_DEV_CY82C693 is not set
# CONFIG_BLK_DEV_CS5520 is not set
# CONFIG_BLK_DEV_CS5530 is not set
# CONFIG_BLK_DEV_HPT34X is not set
# CONFIG_BLK_DEV_HPT366 is not set
# CONFIG_BLK_DEV_SC1200 is not set
CONFIG_BLK_DEV_PIIX=y
# CONFIG_BLK_DEV_NS87415 is not set
# CONFIG_BLK_DEV_PDC202XX_OLD is not set
# CONFIG_BLK_DEV_PDC202XX_NEW is not set
# CONFIG_BLK_DEV_SVWKS is not set
# CONFIG_BLK_DEV_SIIMAGE is not set
# CONFIG_BLK_DEV_SIS5513 is not set
# CONFIG_BLK_DEV_SLC90E66 is not set
# CONFIG_BLK_DEV_TRM290 is not set
# CONFIG_BLK_DEV_VIA82CXXX is not set
# CONFIG_IDE_ARM is not set
CONFIG_BLK_DEV_IDEDMA=y
# CONFIG_IDEDMA_IVB is not set
CONFIG_IDEDMA_AUTO=y
# CONFIG_BLK_DEV_HD is not set

#
# SCSI device support
#
CONFIG_SCSI=y
# CONFIG_SCSI_PROC_FS is not set

#
# SCSI support type (disk, tape, CD-ROM)
#
CONFIG_BLK_DEV_SD=y
# CONFIG_CHR_DEV_ST is not set
# CONFIG_CHR_DEV_OSST is not set
# CONFIG_BLK_DEV_SR is not set
# CONFIG_CHR_DEV_SG is not set

#
# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
#
# CONFIG_SCSI_MULTI_LUN is not set
# CONFIG_SCSI_CONSTANTS is not set
# CONFIG_SCSI_LOGGING is not set

#
# SCSI Transport Attributes
#
# CONFIG_SCSI_SPI_ATTRS is not set
# CONFIG_SCSI_FC_ATTRS is not set

#
# SCSI low-level drivers
#
CONFIG_BLK_DEV_3W_XXXX_RAID=y
# CONFIG_SCSI_3W_9XXX is not set
# CONFIG_SCSI_ACARD is not set
# CONFIG_SCSI_AACRAID is not set
# CONFIG_SCSI_AIC7XXX is not set
# CONFIG_SCSI_AIC7XXX_OLD is not set
CONFIG_SCSI_AIC79XX=m
CONFIG_AIC79XX_CMDS_PER_DEVICE=32
CONFIG_AIC79XX_RESET_DELAY_MS=4000
# CONFIG_AIC79XX_ENABLE_RD_STRM is not set
# CONFIG_AIC79XX_DEBUG_ENABLE is not set
CONFIG_AIC79XX_DEBUG_MASK=0
# CONFIG_AIC79XX_REG_PRETTY_PRINT is not set
# CONFIG_MEGARAID_NEWGEN is not set
# CONFIG_MEGARAID_LEGACY is not set
CONFIG_SCSI_SATA=y
# CONFIG_SCSI_SATA_SVW is not set
# CONFIG_SCSI_ATA_PIIX is not set
# CONFIG_SCSI_SATA_NV is not set
# CONFIG_SCSI_SATA_PROMISE is not set
# CONFIG_SCSI_SATA_SX4 is not set
CONFIG_SCSI_SATA_SIL=y
# CONFIG_SCSI_SATA_SIS is not set
# CONFIG_SCSI_SATA_VIA is not set
# CONFIG_SCSI_SATA_VITESSE is not set
# CONFIG_SCSI_BUSLOGIC is not set
# CONFIG_SCSI_DMX3191D is not set
# CONFIG_SCSI_EATA is not set
# CONFIG_SCSI_EATA_PIO is not set
# CONFIG_SCSI_FUTURE_DOMAIN is not set
# CONFIG_SCSI_GDTH is not set
# CONFIG_SCSI_IPS is not set
# CONFIG_SCSI_INIA100 is not set
# CONFIG_SCSI_SYM53C8XX_2 is not set
# CONFIG_SCSI_IPR is not set
# CONFIG_SCSI_QLOGIC_ISP is not set
# CONFIG_SCSI_QLOGIC_FC is not set
# CONFIG_SCSI_QLOGIC_1280 is not set
CONFIG_SCSI_QLA2XXX=y
# CONFIG_SCSI_QLA21XX is not set
# CONFIG_SCSI_QLA22XX is not set
# CONFIG_SCSI_QLA2300 is not set
# CONFIG_SCSI_QLA2322 is not set
# CONFIG_SCSI_QLA6312 is not set
# CONFIG_SCSI_QLA6322 is not set
# CONFIG_SCSI_DC395x is not set
# CONFIG_SCSI_DC390T is not set
# CONFIG_SCSI_DEBUG is not set

#
# Multi-device support (RAID and LVM)
#
CONFIG_MD=y
# CONFIG_BLK_DEV_MD is not set
CONFIG_BLK_DEV_DM=y
CONFIG_DM_CRYPT=y
# CONFIG_DM_SNAPSHOT is not set
# CONFIG_DM_MIRROR is not set
# CONFIG_DM_ZERO is not set

#
# Fusion MPT device support
#
# CONFIG_FUSION is not set

#
# IEEE 1394 (FireWire) support
#
# CONFIG_IEEE1394 is not set

#
# I2O device support
#
CONFIG_I2O=m
# CONFIG_I2O_CONFIG is not set
# CONFIG_I2O_BLOCK is not set
# CONFIG_I2O_SCSI is not set
# CONFIG_I2O_PROC is not set

#
# Networking support
#
CONFIG_NET=y

#
# Networking options
#
CONFIG_PACKET=y
CONFIG_PACKET_MMAP=y
# CONFIG_NETLINK_DEV is not set
CONFIG_UNIX=y
CONFIG_NET_KEY=y
CONFIG_INET=y
CONFIG_IP_MULTICAST=y
# CONFIG_IP_ADVANCED_ROUTER is not set
# CONFIG_IP_PNP is not set
# CONFIG_NET_IPIP is not set
# CONFIG_NET_IPGRE is not set
# CONFIG_IP_MROUTE is not set
# CONFIG_ARPD is not set
# CONFIG_SYN_COOKIES is not set
CONFIG_INET_AH=y
CONFIG_INET_ESP=y
CONFIG_INET_IPCOMP=y
CONFIG_INET_TUNNEL=y

#
# IP: Virtual Server Configuration
#
# CONFIG_IP_VS is not set
CONFIG_IPV6=y
# CONFIG_IPV6_PRIVACY is not set
CONFIG_INET6_AH=y
CONFIG_INET6_ESP=y
CONFIG_INET6_IPCOMP=y
CONFIG_INET6_TUNNEL=y
# CONFIG_IPV6_TUNNEL is not set
CONFIG_NETFILTER=y
# CONFIG_NETFILTER_DEBUG is not set

#
# IP: Netfilter Configuration
#
# CONFIG_IP_NF_CONNTRACK is not set
# CONFIG_IP_NF_QUEUE is not set
# CONFIG_IP_NF_IPTABLES is not set
# CONFIG_IP_NF_ARPTABLES is not set
# CONFIG_IP_NF_COMPAT_IPCHAINS is not set
# CONFIG_IP_NF_COMPAT_IPFWADM is not set

#
# IPv6: Netfilter Configuration
#
# CONFIG_IP6_NF_QUEUE is not set
# CONFIG_IP6_NF_IPTABLES is not set
CONFIG_XFRM=y
CONFIG_XFRM_USER=y

#
# SCTP Configuration (EXPERIMENTAL)
#
# CONFIG_IP_SCTP is not set
# CONFIG_ATM is not set
# CONFIG_BRIDGE is not set
# CONFIG_VLAN_8021Q is not set
# CONFIG_DECNET is not set
# CONFIG_LLC2 is not set
# CONFIG_IPX is not set
# CONFIG_ATALK is not set
# CONFIG_X25 is not set
# CONFIG_LAPB is not set
# CONFIG_NET_DIVERT is not set
# CONFIG_ECONET is not set
# CONFIG_WAN_ROUTER is not set
# CONFIG_NET_HW_FLOWCONTROL is not set

#
# QoS and/or fair queueing
#
CONFIG_NET_SCHED=y
CONFIG_NET_SCH_CLK_JIFFIES=y
# CONFIG_NET_SCH_CLK_GETTIMEOFDAY is not set
# CONFIG_NET_SCH_CLK_CPU is not set
# CONFIG_NET_SCH_CBQ is not set
# CONFIG_NET_SCH_HTB is not set
# CONFIG_NET_SCH_HFSC is not set
# CONFIG_NET_SCH_PRIO is not set
# CONFIG_NET_SCH_RED is not set
# CONFIG_NET_SCH_SFQ is not set
# CONFIG_NET_SCH_TEQL is not set
# CONFIG_NET_SCH_TBF is not set
# CONFIG_NET_SCH_GRED is not set
# CONFIG_NET_SCH_DSMARK is not set
# CONFIG_NET_SCH_NETEM is not set
CONFIG_NET_SCH_INGRESS=y
CONFIG_NET_QOS=y
# CONFIG_NET_ESTIMATOR is not set
CONFIG_NET_CLS=y
# CONFIG_NET_CLS_TCINDEX is not set
# CONFIG_NET_CLS_ROUTE4 is not set
# CONFIG_NET_CLS_ROUTE is not set
# CONFIG_NET_CLS_FW is not set
# CONFIG_NET_CLS_U32 is not set
# CONFIG_NET_CLS_RSVP is not set
# CONFIG_NET_CLS_RSVP6 is not set
CONFIG_NET_CLS_ACT=y
CONFIG_NET_ACT_POLICE=y
CONFIG_NET_ACT_GACT=y
CONFIG_GACT_PROB=y

#
# Network testing
#
# CONFIG_NET_PKTGEN is not set
CONFIG_NETPOLL=y
# CONFIG_NETPOLL_RX is not set
# CONFIG_NETPOLL_TRAP is not set
CONFIG_NET_POLL_CONTROLLER=y
# CONFIG_HAMRADIO is not set
# CONFIG_IRDA is not set
# CONFIG_BT is not set
CONFIG_NETDEVICES=y
# CONFIG_DUMMY is not set
# CONFIG_BONDING is not set
# CONFIG_EQUALIZER is not set
CONFIG_TUN=y

#
# ARCnet devices
#
# CONFIG_ARCNET is not set

#
# Ethernet (10 or 100Mbit)
#
CONFIG_NET_ETHERNET=y
CONFIG_MII=y
# CONFIG_HAPPYMEAL is not set
# CONFIG_SUNGEM is not set
# CONFIG_NET_VENDOR_3COM is not set

#
# Tulip family network device support
#
# CONFIG_NET_TULIP is not set
# CONFIG_HP100 is not set
CONFIG_NET_PCI=y
# CONFIG_PCNET32 is not set
CONFIG_AMD8111_ETH=y
# CONFIG_AMD8111E_NAPI is not set
# CONFIG_ADAPTEC_STARFIRE is not set
# CONFIG_B44 is not set
CONFIG_FORCEDETH=y
# CONFIG_DGRS is not set
# CONFIG_EEPRO100 is not set
# CONFIG_E100 is not set
# CONFIG_FEALNX is not set
# CONFIG_NATSEMI is not set
# CONFIG_NE2K_PCI is not set
CONFIG_8139CP=m
CONFIG_8139TOO=m
# CONFIG_8139TOO_PIO is not set
# CONFIG_8139TOO_TUNE_TWISTER is not set
# CONFIG_8139TOO_8129 is not set
# CONFIG_8139_OLD_RX_RESET is not set
# CONFIG_SIS900 is not set
# CONFIG_EPIC100 is not set
# CONFIG_SUNDANCE is not set
# CONFIG_VIA_RHINE is not set
# CONFIG_VIA_VELOCITY is not set

#
# Ethernet (1000 Mbit)
#
# CONFIG_ACENIC is not set
# CONFIG_DL2K is not set
CONFIG_E1000=y
# CONFIG_E1000_NAPI is not set
# CONFIG_NS83820 is not set
# CONFIG_HAMACHI is not set
# CONFIG_YELLOWFIN is not set
# CONFIG_R8169 is not set
# CONFIG_SK98LIN is not set
CONFIG_TIGON3=y

#
# Ethernet (10000 Mbit)
#
# CONFIG_IXGB is not set
# CONFIG_S2IO is not set

#
# Token Ring devices
#
# CONFIG_TR is not set

#
# Wireless LAN (non-hamradio)
#
# CONFIG_NET_RADIO is not set

#
# Wan interfaces
#
# CONFIG_WAN is not set
# CONFIG_FDDI is not set
# CONFIG_HIPPI is not set
# CONFIG_PPP is not set
# CONFIG_SLIP is not set
# CONFIG_NET_FC is not set
# CONFIG_SHAPER is not set
CONFIG_NETCONSOLE=y

#
# ISDN subsystem
#
# CONFIG_ISDN is not set

#
# Telephony Support
#
# CONFIG_PHONE is not set

#
# Input device support
#
CONFIG_INPUT=y

#
# Userland interfaces
#
CONFIG_INPUT_MOUSEDEV=y
CONFIG_INPUT_MOUSEDEV_PSAUX=y
CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
# CONFIG_INPUT_JOYDEV is not set
# CONFIG_INPUT_TSDEV is not set
CONFIG_INPUT_EVDEV=y
# CONFIG_INPUT_EVBUG is not set

#
# Input I/O drivers
#
# CONFIG_GAMEPORT is not set
CONFIG_SOUND_GAMEPORT=y
CONFIG_SERIO=y
CONFIG_SERIO_I8042=y
# CONFIG_SERIO_SERPORT is not set
# CONFIG_SERIO_CT82C710 is not set
# CONFIG_SERIO_PCIPS2 is not set
# CONFIG_SERIO_RAW is not set

#
# Input Device Drivers
#
CONFIG_INPUT_KEYBOARD=y
CONFIG_KEYBOARD_ATKBD=y
# CONFIG_KEYBOARD_SUNKBD is not set
# CONFIG_KEYBOARD_LKKBD is not set
# CONFIG_KEYBOARD_XTKBD is not set
# CONFIG_KEYBOARD_NEWTON is not set
CONFIG_INPUT_MOUSE=y
CONFIG_MOUSE_PS2=y
# CONFIG_MOUSE_SERIAL is not set
# CONFIG_MOUSE_VSXXXAA is not set
# CONFIG_INPUT_JOYSTICK is not set
# CONFIG_INPUT_TOUCHSCREEN is not set
# CONFIG_INPUT_MISC is not set

#
# Character devices
#
CONFIG_VT=y
CONFIG_VT_CONSOLE=y
CONFIG_HW_CONSOLE=y
# CONFIG_SERIAL_NONSTANDARD is not set

#
# Serial drivers
#
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_CONSOLE=y
# CONFIG_SERIAL_8250_ACPI is not set
CONFIG_SERIAL_8250_NR_UARTS=4
# CONFIG_SERIAL_8250_EXTENDED is not set

#
# Non-8250 serial port support
#
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y
CONFIG_UNIX98_PTYS=y
CONFIG_LEGACY_PTYS=y
CONFIG_LEGACY_PTY_COUNT=256

#
# IPMI
#
# CONFIG_IPMI_HANDLER is not set

#
# Watchdog Cards
#
CONFIG_WATCHDOG=y
# CONFIG_WATCHDOG_NOWAYOUT is not set

#
# Watchdog Device Drivers
#
# CONFIG_SOFT_WATCHDOG is not set
# CONFIG_ACQUIRE_WDT is not set
# CONFIG_ADVANTECH_WDT is not set
# CONFIG_ALIM1535_WDT is not set
# CONFIG_ALIM7101_WDT is not set
# CONFIG_SC520_WDT is not set
# CONFIG_EUROTECH_WDT is not set
# CONFIG_IB700_WDT is not set
# CONFIG_WAFER_WDT is not set
# CONFIG_I8XX_TCO is not set
# CONFIG_SC1200_WDT is not set
# CONFIG_SCx200_WDT is not set
# CONFIG_60XX_WDT is not set
# CONFIG_CPU5_WDT is not set
# CONFIG_W83627HF_WDT is not set
# CONFIG_W83877F_WDT is not set
# CONFIG_MACHZ_WDT is not set

#
# PCI-based Watchdog Cards
#
# CONFIG_PCIPCWATCHDOG is not set
# CONFIG_WDTPCI is not set

#
# USB-based Watchdog Cards
#
# CONFIG_USBPCWATCHDOG is not set
CONFIG_HW_RANDOM=y
# CONFIG_NVRAM is not set
CONFIG_RTC=y
# CONFIG_DTLK is not set
# CONFIG_R3964 is not set
# CONFIG_APPLICOM is not set

#
# Ftape, the floppy tape device driver
#
CONFIG_AGP=y
CONFIG_AGP_AMD64=y
# CONFIG_AGP_INTEL_MCH is not set
# CONFIG_DRM is not set
# CONFIG_MWAVE is not set
CONFIG_RAW_DRIVER=y
CONFIG_HPET=y
# CONFIG_HPET_RTC_IRQ is not set
CONFIG_HPET_MMAP=y
CONFIG_MAX_RAW_DEVS=256
CONFIG_HANGCHECK_TIMER=y

#
# I2C support
#
CONFIG_I2C=y
# CONFIG_I2C_CHARDEV is not set

#
# I2C Algorithms
#
# CONFIG_I2C_ALGOBIT is not set
# CONFIG_I2C_ALGOPCF is not set
# CONFIG_I2C_ALGOPCA is not set

#
# I2C Hardware Bus support
#
# CONFIG_I2C_ALI1535 is not set
# CONFIG_I2C_ALI1563 is not set
# CONFIG_I2C_ALI15X3 is not set
# CONFIG_I2C_AMD756 is not set
CONFIG_I2C_AMD8111=y
# CONFIG_I2C_I801 is not set
# CONFIG_I2C_I810 is not set
# CONFIG_I2C_ISA is not set
# CONFIG_I2C_NFORCE2 is not set
# CONFIG_I2C_PARPORT_LIGHT is not set
# CONFIG_I2C_PROSAVAGE is not set
# CONFIG_I2C_SAVAGE4 is not set
# CONFIG_SCx200_ACB is not set
# CONFIG_I2C_SIS5595 is not set
# CONFIG_I2C_SIS630 is not set
# CONFIG_I2C_SIS96X is not set
# CONFIG_I2C_VIA is not set
# CONFIG_I2C_VIAPRO is not set
# CONFIG_I2C_VOODOO3 is not set
# CONFIG_I2C_PCA_ISA is not set

#
# Hardware Sensors Chip support
#
# CONFIG_I2C_SENSOR is not set
# CONFIG_SENSORS_ADM1021 is not set
# CONFIG_SENSORS_ADM1025 is not set
# CONFIG_SENSORS_ADM1031 is not set
# CONFIG_SENSORS_ASB100 is not set
# CONFIG_SENSORS_DS1621 is not set
# CONFIG_SENSORS_FSCHER is not set
# CONFIG_SENSORS_GL518SM is not set
# CONFIG_SENSORS_IT87 is not set
# CONFIG_SENSORS_LM75 is not set
# CONFIG_SENSORS_LM77 is not set
# CONFIG_SENSORS_LM78 is not set
# CONFIG_SENSORS_LM80 is not set
# CONFIG_SENSORS_LM83 is not set
# CONFIG_SENSORS_LM85 is not set
# CONFIG_SENSORS_LM90 is not set
# CONFIG_SENSORS_MAX1619 is not set
# CONFIG_SENSORS_SMSC47M1 is not set
# CONFIG_SENSORS_VIA686A is not set
# CONFIG_SENSORS_W83781D is not set
# CONFIG_SENSORS_W83L785TS is not set
# CONFIG_SENSORS_W83627HF is not set

#
# Other I2C Chip support
#
# CONFIG_SENSORS_EEPROM is not set
# CONFIG_SENSORS_PCF8574 is not set
# CONFIG_SENSORS_PCF8591 is not set
# CONFIG_SENSORS_RTC8564 is not set
# CONFIG_I2C_DEBUG_CORE is not set
# CONFIG_I2C_DEBUG_ALGO is not set
# CONFIG_I2C_DEBUG_BUS is not set
# CONFIG_I2C_DEBUG_CHIP is not set

#
# Dallas's 1-wire bus
#
# CONFIG_W1 is not set

#
# Misc devices
#
# CONFIG_IBM_ASM is not set

#
# Multimedia devices
#
# CONFIG_VIDEO_DEV is not set

#
# Digital Video Broadcasting Devices
#
# CONFIG_DVB is not set

#
# Graphics support
#
CONFIG_FB=y
CONFIG_FB_MODE_HELPERS=y
# CONFIG_FB_CIRRUS is not set
# CONFIG_FB_PM2 is not set
# CONFIG_FB_CYBER2000 is not set
# CONFIG_FB_ASILIANT is not set
# CONFIG_FB_IMSTT is not set
# CONFIG_FB_VGA16 is not set
# CONFIG_FB_VESA is not set
CONFIG_VIDEO_SELECT=y
# CONFIG_FB_HGA is not set
# CONFIG_FB_RIVA is not set
# CONFIG_FB_MATROX is not set
# CONFIG_FB_RADEON_OLD is not set
# CONFIG_FB_RADEON is not set
# CONFIG_FB_ATY128 is not set
# CONFIG_FB_ATY is not set
# CONFIG_FB_SIS is not set
# CONFIG_FB_NEOMAGIC is not set
# CONFIG_FB_KYRO is not set
# CONFIG_FB_3DFX is not set
# CONFIG_FB_VOODOO1 is not set
# CONFIG_FB_TRIDENT is not set
# CONFIG_FB_VIRTUAL is not set

#
# Console display driver support
#
CONFIG_VGA_CONSOLE=y
CONFIG_DUMMY_CONSOLE=y
CONFIG_FRAMEBUFFER_CONSOLE=y
# CONFIG_FONTS is not set
CONFIG_FONT_8x8=y
CONFIG_FONT_8x16=y

#
# Logo configuration
#
# CONFIG_LOGO is not set

#
# Sound
#
CONFIG_SOUND=y

#
# Advanced Linux Sound Architecture
#
CONFIG_SND=y
CONFIG_SND_TIMER=y
CONFIG_SND_PCM=y
CONFIG_SND_RAWMIDI=y
# CONFIG_SND_SEQUENCER is not set
# CONFIG_SND_MIXER_OSS is not set
# CONFIG_SND_PCM_OSS is not set
# CONFIG_SND_BIT32_EMUL is not set
# CONFIG_SND_RTCTIMER is not set
# CONFIG_SND_VERBOSE_PRINTK is not set
# CONFIG_SND_DEBUG is not set

#
# Generic devices
#
CONFIG_SND_MPU401_UART=y
# CONFIG_SND_DUMMY is not set
# CONFIG_SND_MTPAV is not set
# CONFIG_SND_SERIAL_U16550 is not set
# CONFIG_SND_MPU401 is not set

#
# PCI devices
#
CONFIG_SND_AC97_CODEC=y
# CONFIG_SND_ALI5451 is not set
# CONFIG_SND_ATIIXP is not set
# CONFIG_SND_ATIIXP_MODEM is not set
# CONFIG_SND_AU8810 is not set
# CONFIG_SND_AU8820 is not set
# CONFIG_SND_AU8830 is not set
# CONFIG_SND_AZT3328 is not set
# CONFIG_SND_BT87X is not set
# CONFIG_SND_CS46XX is not set
# CONFIG_SND_CS4281 is not set
# CONFIG_SND_EMU10K1 is not set
# CONFIG_SND_KORG1212 is not set
# CONFIG_SND_MIXART is not set
# CONFIG_SND_NM256 is not set
# CONFIG_SND_RME32 is not set
# CONFIG_SND_RME96 is not set
# CONFIG_SND_RME9652 is not set
# CONFIG_SND_HDSP is not set
# CONFIG_SND_TRIDENT is not set
# CONFIG_SND_YMFPCI is not set
# CONFIG_SND_ALS4000 is not set
# CONFIG_SND_CMIPCI is not set
# CONFIG_SND_ENS1370 is not set
# CONFIG_SND_ENS1371 is not set
# CONFIG_SND_ES1938 is not set
# CONFIG_SND_ES1968 is not set
# CONFIG_SND_MAESTRO3 is not set
# CONFIG_SND_FM801 is not set
# CONFIG_SND_ICE1712 is not set
# CONFIG_SND_ICE1724 is not set
CONFIG_SND_INTEL8X0=y
# CONFIG_SND_INTEL8X0M is not set
# CONFIG_SND_SONICVIBES is not set
# CONFIG_SND_VIA82XX is not set
# CONFIG_SND_VX222 is not set

#
# ALSA USB devices
#
# CONFIG_SND_USB_AUDIO is not set
# CONFIG_SND_USB_USX2Y is not set

#
# Open Sound System
#
CONFIG_SOUND_PRIME=y
# CONFIG_SOUND_BT878 is not set
# CONFIG_SOUND_CMPCI is not set
# CONFIG_SOUND_EMU10K1 is not set
# CONFIG_SOUND_FUSION is not set
# CONFIG_SOUND_CS4281 is not set
# CONFIG_SOUND_ES1370 is not set
# CONFIG_SOUND_ES1371 is not set
# CONFIG_SOUND_ESSSOLO1 is not set
# CONFIG_SOUND_MAESTRO is not set
# CONFIG_SOUND_MAESTRO3 is not set
CONFIG_SOUND_ICH=y
# CONFIG_SOUND_SONICVIBES is not set
# CONFIG_SOUND_TRIDENT is not set
# CONFIG_SOUND_MSNDCLAS is not set
# CONFIG_SOUND_MSNDPIN is not set
# CONFIG_SOUND_VIA82CXXX is not set
# CONFIG_SOUND_OSS is not set
# CONFIG_SOUND_TVMIXER is not set
# CONFIG_SOUND_ALI5455 is not set
# CONFIG_SOUND_FORTE is not set
# CONFIG_SOUND_RME96XX is not set
# CONFIG_SOUND_AD1980 is not set

#
# USB support
#
CONFIG_USB=y
# CONFIG_USB_DEBUG is not set

#
# Miscellaneous USB options
#
CONFIG_USB_DEVICEFS=y
# CONFIG_USB_BANDWIDTH is not set
# CONFIG_USB_DYNAMIC_MINORS is not set
# CONFIG_USB_SUSPEND is not set
# CONFIG_USB_OTG is not set

#
# USB Host Controller Drivers
#
CONFIG_USB_EHCI_HCD=y
# CONFIG_USB_EHCI_SPLIT_ISO is not set
# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
CONFIG_USB_OHCI_HCD=y
# CONFIG_USB_UHCI_HCD is not set

#
# USB Device Class drivers
#
# CONFIG_USB_AUDIO is not set
# CONFIG_USB_BLUETOOTH_TTY is not set
# CONFIG_USB_MIDI is not set
# CONFIG_USB_ACM is not set
CONFIG_USB_PRINTER=y
CONFIG_USB_STORAGE=y
# CONFIG_USB_STORAGE_DEBUG is not set
# CONFIG_USB_STORAGE_RW_DETECT is not set
# CONFIG_USB_STORAGE_DATAFAB is not set
# CONFIG_USB_STORAGE_FREECOM is not set
# CONFIG_USB_STORAGE_ISD200 is not set
# CONFIG_USB_STORAGE_DPCM is not set
# CONFIG_USB_STORAGE_HP8200e is not set
# CONFIG_USB_STORAGE_SDDR09 is not set
# CONFIG_USB_STORAGE_SDDR55 is not set
# CONFIG_USB_STORAGE_JUMPSHOT is not set

#
# USB Human Interface Devices (HID)
#
CONFIG_USB_HID=y
CONFIG_USB_HIDINPUT=y
# CONFIG_HID_FF is not set
# CONFIG_USB_HIDDEV is not set
# CONFIG_USB_AIPTEK is not set
# CONFIG_USB_WACOM is not set
# CONFIG_USB_KBTAB is not set
# CONFIG_USB_POWERMATE is not set
# CONFIG_USB_MTOUCH is not set
# CONFIG_USB_EGALAX is not set
# CONFIG_USB_XPAD is not set
# CONFIG_USB_ATI_REMOTE is not set

#
# USB Imaging devices
#
# CONFIG_USB_MDC800 is not set
# CONFIG_USB_MICROTEK is not set
# CONFIG_USB_HPUSBSCSI is not set

#
# USB Multimedia devices
#
# CONFIG_USB_DABUSB is not set

#
# Video4Linux support is needed for USB Multimedia device support
#

#
# USB Network adaptors
#
# CONFIG_USB_CATC is not set
# CONFIG_USB_KAWETH is not set
# CONFIG_USB_PEGASUS is not set
# CONFIG_USB_RTL8150 is not set
# CONFIG_USB_USBNET is not set

#
# USB port drivers
#

#
# USB Serial Converter support
#
# CONFIG_USB_SERIAL is not set

#
# USB Miscellaneous drivers
#
# CONFIG_USB_EMI62 is not set
# CONFIG_USB_EMI26 is not set
# CONFIG_USB_TIGL is not set
# CONFIG_USB_AUERSWALD is not set
# CONFIG_USB_RIO500 is not set
# CONFIG_USB_LEGOTOWER is not set
# CONFIG_USB_LCD is not set
# CONFIG_USB_LED is not set
# CONFIG_USB_CYTHERM is not set
# CONFIG_USB_PHIDGETSERVO is not set
# CONFIG_USB_TEST is not set

#
# USB Gadget Support
#
CONFIG_USB_GADGET=m
CONFIG_USB_GADGET_NET2280=y
CONFIG_USB_NET2280=m
# CONFIG_USB_GADGET_PXA2XX is not set
# CONFIG_USB_GADGET_GOKU is not set
# CONFIG_USB_GADGET_SA1100 is not set
# CONFIG_USB_GADGET_LH7A40X is not set
# CONFIG_USB_GADGET_DUMMY_HCD is not set
# CONFIG_USB_GADGET_OMAP is not set
CONFIG_USB_GADGET_DUALSPEED=y
# CONFIG_USB_ZERO is not set
# CONFIG_USB_ETH is not set
# CONFIG_USB_GADGETFS is not set
# CONFIG_USB_FILE_STORAGE is not set
# CONFIG_USB_G_SERIAL is not set

#
# Firmware Drivers
#
# CONFIG_EDD is not set

#
# File systems
#
CONFIG_EXT2_FS=y
CONFIG_EXT2_FS_XATTR=y
CONFIG_EXT2_FS_POSIX_ACL=y
CONFIG_EXT2_FS_SECURITY=y
CONFIG_EXT3_FS=y
CONFIG_EXT3_FS_XATTR=y
CONFIG_EXT3_FS_POSIX_ACL=y
CONFIG_EXT3_FS_SECURITY=y
CONFIG_JBD=y
# CONFIG_JBD_DEBUG is not set
CONFIG_FS_MBCACHE=y
CONFIG_REISERFS_FS=y
# CONFIG_REISERFS_CHECK is not set
# CONFIG_REISERFS_PROC_INFO is not set
CONFIG_REISERFS_FS_XATTR=y
CONFIG_REISERFS_FS_POSIX_ACL=y
CONFIG_REISERFS_FS_SECURITY=y
# CONFIG_JFS_FS is not set
CONFIG_FS_POSIX_ACL=y
# CONFIG_XFS_FS is not set
# CONFIG_MINIX_FS is not set
# CONFIG_ROMFS_FS is not set
CONFIG_QUOTA=y
# CONFIG_QFMT_V1 is not set
CONFIG_QFMT_V2=y
CONFIG_QUOTACTL=y
CONFIG_AUTOFS_FS=y
# CONFIG_AUTOFS4_FS is not set

#
# CD-ROM/DVD Filesystems
#
CONFIG_ISO9660_FS=y
CONFIG_JOLIET=y
CONFIG_ZISOFS=y
CONFIG_ZISOFS_FS=y
# CONFIG_UDF_FS is not set

#
# DOS/FAT/NT Filesystems
#
CONFIG_FAT_FS=y
CONFIG_MSDOS_FS=y
CONFIG_VFAT_FS=y
CONFIG_FAT_DEFAULT_CODEPAGE=437
CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
# CONFIG_NTFS_FS is not set

#
# Pseudo filesystems
#
CONFIG_PROC_FS=y
CONFIG_PROC_KCORE=y
CONFIG_SYSFS=y
# CONFIG_DEVFS_FS is not set
CONFIG_DEVPTS_FS_XATTR=y
CONFIG_DEVPTS_FS_SECURITY=y
CONFIG_TMPFS=y
CONFIG_HUGETLBFS=y
CONFIG_HUGETLB_PAGE=y
CONFIG_RAMFS=y

#
# Miscellaneous filesystems
#
# CONFIG_ADFS_FS is not set
# CONFIG_AFFS_FS is not set
# CONFIG_HFS_FS is not set
# CONFIG_HFSPLUS_FS is not set
# CONFIG_BEFS_FS is not set
# CONFIG_BFS_FS is not set
# CONFIG_EFS_FS is not set
# CONFIG_CRAMFS is not set
# CONFIG_VXFS_FS is not set
# CONFIG_HPFS_FS is not set
# CONFIG_QNX4FS_FS is not set
# CONFIG_SYSV_FS is not set
# CONFIG_UFS_FS is not set

#
# Network File Systems
#
CONFIG_NFS_FS=y
CONFIG_NFS_V3=y
CONFIG_NFS_V4=y
CONFIG_NFS_DIRECTIO=y
CONFIG_NFSD=y
CONFIG_NFSD_V3=y
CONFIG_NFSD_V4=y
CONFIG_NFSD_TCP=y
CONFIG_LOCKD=y
CONFIG_LOCKD_V4=y
CONFIG_EXPORTFS=y
CONFIG_SUNRPC=y
CONFIG_SUNRPC_GSS=y
CONFIG_RPCSEC_GSS_KRB5=y
# CONFIG_RPCSEC_GSS_SPKM3 is not set
# CONFIG_SMB_FS is not set
# CONFIG_CIFS is not set
# CONFIG_NCP_FS is not set
# CONFIG_CODA_FS is not set
# CONFIG_AFS_FS is not set

#
# Partition Types
#
# CONFIG_PARTITION_ADVANCED is not set
CONFIG_MSDOS_PARTITION=y

#
# Native Language Support
#
CONFIG_NLS=y
CONFIG_NLS_DEFAULT="iso8859-1"
# CONFIG_NLS_CODEPAGE_437 is not set
# CONFIG_NLS_CODEPAGE_737 is not set
# CONFIG_NLS_CODEPAGE_775 is not set
# CONFIG_NLS_CODEPAGE_850 is not set
# CONFIG_NLS_CODEPAGE_852 is not set
# CONFIG_NLS_CODEPAGE_855 is not set
# CONFIG_NLS_CODEPAGE_857 is not set
# CONFIG_NLS_CODEPAGE_860 is not set
# CONFIG_NLS_CODEPAGE_861 is not set
# CONFIG_NLS_CODEPAGE_862 is not set
# CONFIG_NLS_CODEPAGE_863 is not set
# CONFIG_NLS_CODEPAGE_864 is not set
# CONFIG_NLS_CODEPAGE_865 is not set
# CONFIG_NLS_CODEPAGE_866 is not set
# CONFIG_NLS_CODEPAGE_869 is not set
# CONFIG_NLS_CODEPAGE_936 is not set
# CONFIG_NLS_CODEPAGE_950 is not set
# CONFIG_NLS_CODEPAGE_932 is not set
# CONFIG_NLS_CODEPAGE_949 is not set
# CONFIG_NLS_CODEPAGE_874 is not set
# CONFIG_NLS_ISO8859_8 is not set
# CONFIG_NLS_CODEPAGE_1250 is not set
# CONFIG_NLS_CODEPAGE_1251 is not set
# CONFIG_NLS_ASCII is not set
# CONFIG_NLS_ISO8859_1 is not set
# CONFIG_NLS_ISO8859_2 is not set
# CONFIG_NLS_ISO8859_3 is not set
# CONFIG_NLS_ISO8859_4 is not set
# CONFIG_NLS_ISO8859_5 is not set
# CONFIG_NLS_ISO8859_6 is not set
# CONFIG_NLS_ISO8859_7 is not set
# CONFIG_NLS_ISO8859_9 is not set
# CONFIG_NLS_ISO8859_13 is not set
# CONFIG_NLS_ISO8859_14 is not set
# CONFIG_NLS_ISO8859_15 is not set
# CONFIG_NLS_KOI8_R is not set
# CONFIG_NLS_KOI8_U is not set
# CONFIG_NLS_UTF8 is not set

#
# Profiling support
#
CONFIG_PROFILING=y
CONFIG_OPROFILE=y

#
# Kernel hacking
#
CONFIG_DEBUG_KERNEL=y
CONFIG_MAGIC_SYSRQ=y
CONFIG_DEBUG_SLAB=y
CONFIG_DEBUG_SPINLOCK=y
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
CONFIG_DEBUG_INFO=y
# CONFIG_INIT_DEBUG is not set
# CONFIG_SCHEDSTATS is not set
# CONFIG_IOMMU_DEBUG is not set

#
# Security options
#
CONFIG_SECURITY=y
CONFIG_SECURITY_NETWORK=y
CONFIG_SECURITY_CAPABILITIES=y
CONFIG_SECURITY_ROOTPLUG=m
CONFIG_SECURITY_SECLVL=m
CONFIG_SECURITY_SELINUX=y
CONFIG_SECURITY_SELINUX_BOOTPARAM=y
CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=1
CONFIG_SECURITY_SELINUX_DISABLE=y
CONFIG_SECURITY_SELINUX_DEVELOP=y
# CONFIG_SECURITY_SELINUX_MLS is not set
CONFIG_SECURITY_BSDJAIL=m

#
# Cryptographic options
#
CONFIG_CRYPTO=y
CONFIG_CRYPTO_HMAC=y
CONFIG_CRYPTO_NULL=m
CONFIG_CRYPTO_MD4=m
CONFIG_CRYPTO_MD5=y
CONFIG_CRYPTO_SHA1=y
CONFIG_CRYPTO_SHA256=m
# CONFIG_CRYPTO_SHA512 is not set
# CONFIG_CRYPTO_WP512 is not set
CONFIG_CRYPTO_DES=y
# CONFIG_CRYPTO_BLOWFISH is not set
# CONFIG_CRYPTO_TWOFISH is not set
# CONFIG_CRYPTO_SERPENT is not set
# CONFIG_CRYPTO_AES is not set
# CONFIG_CRYPTO_CAST5 is not set
# CONFIG_CRYPTO_CAST6 is not set
# CONFIG_CRYPTO_TEA is not set
# CONFIG_CRYPTO_ARC4 is not set
# CONFIG_CRYPTO_KHAZAD is not set
CONFIG_CRYPTO_DEFLATE=y
# CONFIG_CRYPTO_MICHAEL_MIC is not set
# CONFIG_CRYPTO_CRC32C is not set
# CONFIG_CRYPTO_TEST is not set

#
# Library routines
#
# CONFIG_CRC_CCITT is not set
CONFIG_CRC32=y
# CONFIG_LIBCRC32C is not set
CONFIG_ZLIB_INFLATE=y
CONFIG_ZLIB_DEFLATE=y

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: kswapd in tight loop 2.6.9-rc3-bk-recent
  2004-10-08  3:01               ` Andrew Morton
@ 2004-10-08  3:13                 ` Nick Piggin
  2004-10-08  3:30                   ` Andrew Morton
  2004-10-08  3:15                 ` Nick Piggin
  1 sibling, 1 reply; 24+ messages in thread
From: Nick Piggin @ 2004-10-08  3:13 UTC (permalink / raw)
  To: Andrew Morton; +Cc: chrisw, nickpiggin, linux-kernel, Dave Jones



Andrew Morton wrote:

>Nick Piggin <piggin@cyberone.com.au> wrote:
>
>>>Chris Wright <chrisw@osdl.org> wrote:
>>>
>> >
>> >>(whereas I could get the mainline code, and the
>> >> one-liner to spin right off).  
>> >>
>> >
>> >How?  (up to and including .config please).
>> >
>> >
>> >
>>
>> Ah, free_pages <= pages_high, ie. 0 <= 0, which is true;
>> commence spinning.
>>
>
>Maybe.  It requires that the zonelists be screwy:
>
> Node 1 DMA free:0kB min:0kB low:0kB high:0kB active:0kB inactive:0kB present:0kB
> protections[]: 0 0 0
> Node 1 Normal free:25272kB min:1020kB low:2040kB high:3060kB active:624172kB inactive:282700kB present:1047936kB
> protections[]: 0 0 0
> Node 1 HighMem free:0kB min:128kB low:256kB high:384kB active:0kB inactive:0kB present:0kB
> protections[]: 0 0 0
> Node 0 DMA free:728kB min:12kB low:24kB high:36kB active:788kB inactive:7848kB present:16384kB
> protections[]: 0 0 0
> Node 0 Normal free:27200kB min:1004kB low:2008kB high:3012kB active:332792kB inactive:422744kB present:1032188kB
> protections[]: 0 0 0
> Node 0 HighMem free:0kB min:128kB low:256kB high:384kB active:0kB inactive:0kB present:0kB
> protections[]: 0 0 0
>
>See that DMA zone on node 1?  Wonder how it got like that.  It
>should not be inside pgdat->nrzones anyway.
>
>
Oh? Why not? I didn't think empty zones were filtered out? (perhaps
they should be).

>David, is your setup NUMA?  Can you show us a sysrq-M dump?
>
>

Yes. Incase he's alseep, I'll quote:

"I saw the same thing yesterday, also on an amd64 box though that
could be coincidence. The kswapd1 process was pegging the cpu at 99%
kswapd0 was idle. After a few minutes, the box became so unresponsive"


^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: kswapd in tight loop 2.6.9-rc3-bk-recent
  2004-10-08  3:01               ` Andrew Morton
  2004-10-08  3:13                 ` Nick Piggin
@ 2004-10-08  3:15                 ` Nick Piggin
  1 sibling, 0 replies; 24+ messages in thread
From: Nick Piggin @ 2004-10-08  3:15 UTC (permalink / raw)
  To: Andrew Morton; +Cc: chrisw, nickpiggin, linux-kernel, Dave Jones



Andrew Morton wrote:

>Nick Piggin <piggin@cyberone.com.au> wrote:
>
>>>Chris Wright <chrisw@osdl.org> wrote:
>>>
>> >
>> >>(whereas I could get the mainline code, and the
>> >> one-liner to spin right off).  
>> >>
>> >
>> >How?  (up to and including .config please).
>> >
>> >
>> >
>>
>> Ah, free_pages <= pages_high, ie. 0 <= 0, which is true;
>> commence spinning.
>>
>
>Maybe.  It requires that the zonelists be screwy:
>
>

Note that if this *was* the problem, then it would not be the fault of
my recent patch, rather *every* allocation (when memory is lowish)
would cause kswapd to wind through its priority loop then stop.
Probably not using enough CPU for anyone to really notice though.


^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: kswapd in tight loop 2.6.9-rc3-bk-recent
  2004-10-08  3:13                 ` Nick Piggin
@ 2004-10-08  3:30                   ` Andrew Morton
  2004-10-08  3:54                     ` Nick Piggin
  2004-10-08  5:21                     ` Chris Wright
  0 siblings, 2 replies; 24+ messages in thread
From: Andrew Morton @ 2004-10-08  3:30 UTC (permalink / raw)
  To: Nick Piggin; +Cc: chrisw, nickpiggin, linux-kernel, davej

Nick Piggin <piggin@cyberone.com.au> wrote:
>
> >> Ah, free_pages <= pages_high, ie. 0 <= 0, which is true;
>  >> commence spinning.
>  >>
>  >
>  >Maybe.  It requires that the zonelists be screwy:
>  >
>  > Node 1 DMA free:0kB min:0kB low:0kB high:0kB active:0kB inactive:0kB present:0kB
>  > protections[]: 0 0 0
>  > Node 1 Normal free:25272kB min:1020kB low:2040kB high:3060kB active:624172kB inactive:282700kB present:1047936kB
>  > protections[]: 0 0 0
>  > Node 1 HighMem free:0kB min:128kB low:256kB high:384kB active:0kB inactive:0kB present:0kB
>  > protections[]: 0 0 0
>  > Node 0 DMA free:728kB min:12kB low:24kB high:36kB active:788kB inactive:7848kB present:16384kB
>  > protections[]: 0 0 0
>  > Node 0 Normal free:27200kB min:1004kB low:2008kB high:3012kB active:332792kB inactive:422744kB present:1032188kB
>  > protections[]: 0 0 0
>  > Node 0 HighMem free:0kB min:128kB low:256kB high:384kB active:0kB inactive:0kB present:0kB
>  > protections[]: 0 0 0
>  >
>  >See that DMA zone on node 1?  Wonder how it got like that.  It
>  >should not be inside pgdat->nrzones anyway.
>  >
>  >
>  Oh? Why not? I didn't think empty zones were filtered out?

That ininitialised zone should be outside pgdat->nr_zones, no?

>  (perhaps they should be).

They will be.

Chris, do you have time to test this, against -linus?

diff -puN mm/vmscan.c~vmscan-handle-empty-zones mm/vmscan.c
--- 25/mm/vmscan.c~vmscan-handle-empty-zones	2004-10-07 19:10:52.844797784 -0700
+++ 25-akpm/mm/vmscan.c	2004-10-07 19:11:49.804138648 -0700
@@ -851,6 +851,9 @@ shrink_caches(struct zone **zones, struc
 	for (i = 0; zones[i] != NULL; i++) {
 		struct zone *zone = zones[i];
 
+		if (zone->present_pages == 0)
+			continue;
+
 		zone->temp_priority = sc->priority;
 		if (zone->prev_priority > sc->priority)
 			zone->prev_priority = sc->priority;
@@ -999,6 +1002,9 @@ static int balance_pgdat(pg_data_t *pgda
 			for (i = pgdat->nr_zones - 1; i >= 0; i--) {
 				struct zone *zone = pgdat->node_zones + i;
 
+				if (zone->present_pages == 0)
+					continue;
+
 				if (zone->all_unreclaimable &&
 						priority != DEF_PRIORITY)
 					continue;
@@ -1033,6 +1039,9 @@ static int balance_pgdat(pg_data_t *pgda
 		for (i = 0; i <= end_zone; i++) {
 			struct zone *zone = pgdat->node_zones + i;
 
+			if (zone->present_pages == 0)
+				continue;
+
 			if (zone->all_unreclaimable && priority != DEF_PRIORITY)
 				continue;
 
_


^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: kswapd in tight loop 2.6.9-rc3-bk-recent
  2004-10-08  3:30                   ` Andrew Morton
@ 2004-10-08  3:54                     ` Nick Piggin
  2004-10-08  4:48                       ` Nick Piggin
  2004-10-08  5:21                     ` Chris Wright
  1 sibling, 1 reply; 24+ messages in thread
From: Nick Piggin @ 2004-10-08  3:54 UTC (permalink / raw)
  To: Andrew Morton; +Cc: chrisw, nickpiggin, linux-kernel, davej



Andrew Morton wrote:

>Nick Piggin <piggin@cyberone.com.au> wrote:
>
>>>>Ah, free_pages <= pages_high, ie. 0 <= 0, which is true;
>>>>
>> >> commence spinning.
>> >>
>> >
>> >Maybe.  It requires that the zonelists be screwy:
>> >
>> > Node 1 DMA free:0kB min:0kB low:0kB high:0kB active:0kB inactive:0kB present:0kB
>> > protections[]: 0 0 0
>> > Node 1 Normal free:25272kB min:1020kB low:2040kB high:3060kB active:624172kB inactive:282700kB present:1047936kB
>> > protections[]: 0 0 0
>> > Node 1 HighMem free:0kB min:128kB low:256kB high:384kB active:0kB inactive:0kB present:0kB
>> > protections[]: 0 0 0
>> > Node 0 DMA free:728kB min:12kB low:24kB high:36kB active:788kB inactive:7848kB present:16384kB
>> > protections[]: 0 0 0
>> > Node 0 Normal free:27200kB min:1004kB low:2008kB high:3012kB active:332792kB inactive:422744kB present:1032188kB
>> > protections[]: 0 0 0
>> > Node 0 HighMem free:0kB min:128kB low:256kB high:384kB active:0kB inactive:0kB present:0kB
>> > protections[]: 0 0 0
>> >
>> >See that DMA zone on node 1?  Wonder how it got like that.  It
>> >should not be inside pgdat->nrzones anyway.
>> >
>> >
>> Oh? Why not? I didn't think empty zones were filtered out?
>>
>
>That ininitialised zone should be outside pgdat->nr_zones, no?
>
>
>> (perhaps they should be).
>>
>
>They will be.
>

I don't think the DMA side will be skipped though? Because you're
always counting down from nr_zones... That would be what it is
what it is spinning on.

>
>Chris, do you have time to test this, against -linus?
>
>

I think my patch would be sufficient to handle the kswapd side
(yours would be valid too, but no need to add the extra checks).

>diff -puN mm/vmscan.c~vmscan-handle-empty-zones mm/vmscan.c
>--- 25/mm/vmscan.c~vmscan-handle-empty-zones	2004-10-07 19:10:52.844797784 -0700
>+++ 25-akpm/mm/vmscan.c	2004-10-07 19:11:49.804138648 -0700
>@@ -851,6 +851,9 @@ shrink_caches(struct zone **zones, struc
> 	for (i = 0; zones[i] != NULL; i++) {
> 		struct zone *zone = zones[i];
> 
>+		if (zone->present_pages == 0)
>+			continue;
>+
> 		zone->temp_priority = sc->priority;
> 		if (zone->prev_priority > sc->priority)
> 			zone->prev_priority = sc->priority;
>

...but could probably use something like this as well, for the
direct reclaim side.


^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: kswapd in tight loop 2.6.9-rc3-bk-recent
  2004-10-08  3:54                     ` Nick Piggin
@ 2004-10-08  4:48                       ` Nick Piggin
  2004-10-08  4:57                         ` Andrew Morton
  0 siblings, 1 reply; 24+ messages in thread
From: Nick Piggin @ 2004-10-08  4:48 UTC (permalink / raw)
  To: Nick Piggin; +Cc: Andrew Morton, chrisw, linux-kernel, davej

[-- Attachment #1: Type: text/plain, Size: 576 bytes --]

Nick Piggin wrote:

> 
> I think my patch would be sufficient to handle the kswapd side
> (yours would be valid too, but no need to add the extra checks).

Here is the combined patch with Andrew's hunk added.

I guess it doesn't _really_ matter which gets tested, but this
one is probably the preferred way to go because it doesn't even
wake up kswapd for empty zones. Andrew, do you agree?

I guess it should get into -bk pretty soon if it passes testing.
It is fairly easy to see the failure cases that are fixed (and
hopefully it doesn't domino yet another latent bug :P).

[-- Attachment #2: vm-fix-empty-zones.patch --]
[-- Type: text/x-patch, Size: 1445 bytes --]



Signed-off-by: Nick Piggin <nickpiggin@yahoo.com.au>


---

 linux-2.6-npiggin/mm/vmscan.c |    9 ++++++---
 1 files changed, 6 insertions(+), 3 deletions(-)

diff -puN mm/vmscan.c~vm-fix-empty-zones mm/vmscan.c
--- linux-2.6/mm/vmscan.c~vm-fix-empty-zones	2004-10-08 12:44:14.000000000 +1000
+++ linux-2.6-npiggin/mm/vmscan.c	2004-10-08 14:28:04.000000000 +1000
@@ -851,6 +851,9 @@ shrink_caches(struct zone **zones, struc
 	for (i = 0; zones[i] != NULL; i++) {
 		struct zone *zone = zones[i];
 
+		if (zone->present_pages == 0)
+			continue;
+
 		zone->temp_priority = sc->priority;
 		if (zone->prev_priority > sc->priority)
 			zone->prev_priority = sc->priority;
@@ -1003,7 +1006,7 @@ static int balance_pgdat(pg_data_t *pgda
 						priority != DEF_PRIORITY)
 					continue;
 
-				if (zone->free_pages <= zone->pages_high) {
+				if (zone->free_pages < zone->pages_high) {
 					end_zone = i;
 					goto scan;
 				}
@@ -1035,7 +1038,7 @@ scan:
 				continue;
 
 			if (nr_pages == 0) {	/* Not software suspend */
-				if (zone->free_pages <= zone->pages_high)
+				if (zone->free_pages < zone->pages_high)
 					all_zones_ok = 0;
 			}
 			zone->temp_priority = priority;
@@ -1142,7 +1145,7 @@ static int kswapd(void *p)
  */
 void wakeup_kswapd(struct zone *zone)
 {
-	if (zone->free_pages > zone->pages_low)
+	if (zone->free_pages >= zone->pages_low)
 		return;
 	if (!waitqueue_active(&zone->zone_pgdat->kswapd_wait))
 		return;

_

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: kswapd in tight loop 2.6.9-rc3-bk-recent
  2004-10-08  4:48                       ` Nick Piggin
@ 2004-10-08  4:57                         ` Andrew Morton
  0 siblings, 0 replies; 24+ messages in thread
From: Andrew Morton @ 2004-10-08  4:57 UTC (permalink / raw)
  To: Nick Piggin; +Cc: piggin, chrisw, linux-kernel, davej

Nick Piggin <nickpiggin@yahoo.com.au> wrote:
>
> -				if (zone->free_pages <= zone->pages_high) {
>  +				if (zone->free_pages < zone->pages_high) {

This is too subtle.  An open-coded test for non-zero ->present_pages is far
more readable and maintainable.


^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: kswapd in tight loop 2.6.9-rc3-bk-recent
  2004-10-08  3:30                   ` Andrew Morton
  2004-10-08  3:54                     ` Nick Piggin
@ 2004-10-08  5:21                     ` Chris Wright
  2004-10-08  5:27                       ` Chris Wright
  2004-10-08 10:10                       ` Nick Piggin
  1 sibling, 2 replies; 24+ messages in thread
From: Chris Wright @ 2004-10-08  5:21 UTC (permalink / raw)
  To: Andrew Morton; +Cc: Nick Piggin, chrisw, nickpiggin, linux-kernel, davej

* Andrew Morton (akpm@osdl.org) wrote:
> Chris, do you have time to test this, against -linus?

Yeah.  This patch held up against the simple testing, as did Nick's (not
the most recent combined one from him).

Here's some sample output from annotation I added:

balance_pgdat:1050: zone->DMA present_pages == 0
balance_pgdat:1050: zone->DMA present_pages == 0
balance_pgdat:1050: zone->DMA present_pages == 0
balance_pgdat:1050: zone->DMA present_pages == 0
balance_pgdat:1013: zone->DMA present_pages == 0
balance_pgdat:1050: zone->DMA present_pages == 0
balance_pgdat:1050: zone->DMA present_pages == 0
balance_pgdat:1050: zone->DMA present_pages == 0

thanks,
-chris
-- 
Linux Security Modules     http://lsm.immunix.org     http://lsm.bkbits.net

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: kswapd in tight loop 2.6.9-rc3-bk-recent
  2004-10-08  5:21                     ` Chris Wright
@ 2004-10-08  5:27                       ` Chris Wright
  2004-10-08 10:10                       ` Nick Piggin
  1 sibling, 0 replies; 24+ messages in thread
From: Chris Wright @ 2004-10-08  5:27 UTC (permalink / raw)
  To: Chris Wright; +Cc: Andrew Morton, Nick Piggin, nickpiggin, linux-kernel, davej

* Chris Wright (chrisw@osdl.org) wrote:
> * Andrew Morton (akpm@osdl.org) wrote:
> > Chris, do you have time to test this, against -linus?
> 
> Yeah.  This patch held up against the simple testing, as did Nick's (not
> the most recent combined one from him).

err, meaning:  I have not tested Nick's most recent combined patch.

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: kswapd in tight loop 2.6.9-rc3-bk-recent
  2004-10-08  5:21                     ` Chris Wright
  2004-10-08  5:27                       ` Chris Wright
@ 2004-10-08 10:10                       ` Nick Piggin
  1 sibling, 0 replies; 24+ messages in thread
From: Nick Piggin @ 2004-10-08 10:10 UTC (permalink / raw)
  To: Chris Wright; +Cc: Andrew Morton, Nick Piggin, linux-kernel, davej

Chris Wright wrote:
> * Andrew Morton (akpm@osdl.org) wrote:
> 
>>Chris, do you have time to test this, against -linus?
> 
> 
> Yeah.  This patch held up against the simple testing, as did Nick's (not
> the most recent combined one from him).
> 

Thanks. Any/all patches should do much the same job.

I'm pretty confident this was just a minor artifact brought out
by an earlier change, and things still look good for 2.6.9.

^ permalink raw reply	[flat|nested] 24+ messages in thread

end of thread, other threads:[~2004-10-08 10:12 UTC | newest]

Thread overview: 24+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-10-07 21:20 kswapd in tight loop 2.6.9-rc3-bk-recent Chris Wright
2004-10-07 21:39 ` Dave Jones
2004-10-07 21:49   ` Chris Wright
2004-10-07 23:40 ` Andrew Morton
2004-10-08  0:34   ` Nick Piggin
2004-10-08  0:37     ` Andrew Morton
2004-10-08  0:51       ` Chris Wright
2004-10-08  1:40         ` Andrew Morton
2004-10-08  0:42     ` Andrew Morton
2004-10-08  1:41       ` Chris Wright
2004-10-08  1:51         ` Chris Wright
2004-10-08  1:53           ` Andrew Morton
2004-10-08  2:46             ` Nick Piggin
2004-10-08  3:01               ` Andrew Morton
2004-10-08  3:13                 ` Nick Piggin
2004-10-08  3:30                   ` Andrew Morton
2004-10-08  3:54                     ` Nick Piggin
2004-10-08  4:48                       ` Nick Piggin
2004-10-08  4:57                         ` Andrew Morton
2004-10-08  5:21                     ` Chris Wright
2004-10-08  5:27                       ` Chris Wright
2004-10-08 10:10                       ` Nick Piggin
2004-10-08  3:15                 ` Nick Piggin
2004-10-08  3:05             ` Chris Wright

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox