[LWN Logo]
[LWN.net]
From:	 rwhron@earthlink.net
To:	 linux-kernel@vger.kernel.org, ltp-list@lists.sourceforge.net
Subject: VM test on 2.4.12-ac1, 2.4.12aa1, and 2.4.13-pre2
Date:	 Sun, 14 Oct 2001 01:03:33 -0400



Kernels test summary:

2.4.12-ac1	Wide variance in memory allocation
2.4.12aa1	Interesting vmstat/mp3blaster pattern
2.4.13-pre2	Locked up on 7th iteration

Test:	

Run loop of 10 iterations of Linux Test Project's "mtest01 -p80 -w"
This test attempts to allocate 80% of virtual memory and write to
each page.  Simulataneously listen to mp3blaster.

Reboot before each test.

Hardware:
Athlon 1333
512 Mb RAM
1024 Mb swap

Note: On all kernels I tested, mp3blaster plays smoothly with "mtest01 -p30 -w",
(allocate 30% of virtual memory).  I put this in an infinite loop.

When I bumped up the percentage, so the test would start to use swap, 
mp3blaster would begin to stutter.  Using a higher percentage, like 60 
made it clear that going into swap is the stutter trigger.  However, 
I discovered something interesting with Andrea's kernel.  More on that below.


Notes from each kernel:


2.4.12-ac1

The odd thing here is the enormous variation of memory allocated per run:

PASS ... 1224736768 bytes allocated.
PASS ... 857735168 bytes allocated.
PASS ... 727711744 bytes allocated.
PASS ... 964689920 bytes allocated.
PASS ... 455081984 bytes allocated.
PASS ... 636485632 bytes allocated.
PASS ... 960495616 bytes allocated.
PASS ... 332398592 bytes allocated.
PASS ... 881852416 bytes allocated.
PASS ... 394264576 bytes allocated.

mp3blaster stuttered the entire run.  It finished fast, but since it didn't
allocate the full 80% of memory after the first run, timing may not be meaningful.

Below is vmstat 1 from approximately 3 iterations of "mmtest01 -p80 -w" on 2.4.12-ac1:

   procs                      memory    swap          io     system         cpu
 r  b  w   swpd   free   buff  cache  si  so    bi    bo   in    cs  us  sy  id
 0  1  0      0 456060  21348  16160   0   0   283    11  173   225   0   4  95
 2  0  0      0 199644  21348  16164   0   0    24     0  282   590  47  50   3
 1  0  1   1444   2780  21348   8208   0   0    32     0  276   734  40  60   0
 7  1  2 466392   2048   1244   2388   0 126816    12 126828 1394  2699   1  23  76
 2  5  0 466392   5724   1236   2480 304 323536   500 323604 5876 73316   4  12  83
 7  3  1 909752   3064   1252   1884 2016 373688  3208 373716 5480 58698   4  18  78
 1  3  0 201388 299828   1288   3436 1800   0  3228    16  391   437   0   3  97
 2  0  0 201348 162784   1316   4112 1600   0  2296     0  431   706  44  26  31
 1  0  0 120756   3060   1328   5116 140   0  1152     0  418   622  44  56   0
 1  3  1 438156   2840   1332   1812  28   0   344    12  389   864  13  87   0
 0  2  3 416380   1296   1240   1744 140 72700   256 72696  437   874   7  26  67
 3  6  3 416380   3064   1256   1748  76 79548    80 79564 1062  9106   1  12  87
 2  4  2 423448   3724   1240   1752  60 120032    72 120044 1476  2115   4  15  81
 1  4  1 423448   3660   1252   1644  48 61552    92 61568  771   697   7  19  73
 0  3  0 267416 239308   1284   2268 1212 80868  2128 80912 2274  2218   3  15  82
 1  1  0 267376  73188   1308   3644 448   0  1840     0  520   446  32  32  37
 3  0  1 337996   2684   1304   1972 316 280   780   292  421   821  28  72   0
 1  1  1 390856   4280   1312   1732 368 5220   652  5224  392   645  22  78   0
 0  8  2 317276   3064   1248   1748 212 67616   264 67596  422   872  20  58  22
 1  8  2 317276   3064   1252   1752   0 27276     4 27276  378   225   0   2  98
 0  6  2 317276   2840   1252   1752   0 22680     0 22680  315   287   0   4  96

The vmstat 1 command didn't seem like it was pulsing smoothly every second.



2.4.12aa1 - Andrea's patch

This kernel behaved the best for the test.  

It allocated 1.2 gigs of virtual memory for each run.

PASS ... 1244659712 bytes allocated.
PASS ... 1251999744 bytes allocated.
PASS ... 1253048320 bytes allocated.
PASS ... 1254096896 bytes allocated.
PASS ... 1255145472 bytes allocated.
PASS ... 1254096896 bytes allocated.
PASS ... 1254096896 bytes allocated.
PASS ... 1255145472 bytes allocated.
PASS ... 1256194048 bytes allocated.
PASS ... 1255145472 bytes allocated.


mp3blaster with Andrea's patch stuttered during a portion of each run, then 
played continuously for the rest of each test.  

Here is a sample of vmstat 1 during an iteration.  vmstat output was consistant 
for each loop iteration.  This is just one cycle.  There is a note in the output 
where mp3blaster goes from smooth to stutter.  

This vmstat picks up towards the end of an mtest01 iteration.  You can see where 
swapd drops, which indicates the new run.  Note that mp3blaster is playing fine for
about 45 seconds before this vmstat output:

   procs                      memory    swap          io     system         cpu
 r  b  w   swpd   free   buff  cache  si  so    bi    bo   in    cs  us  sy  id
 0  3  1 696556   3256   1188   2460   0 15456    88 15504  486   762   4  11  86
 1  1  1 714984   1560   1176   2456  64 17380   136 17384  478   742   6   9  85
 0  3  1 732392   1624   1188   2448   0 18072    96 18076  513   784   2  12  87
 2  0  0   9912 372812   1236   2632 296 3216   540  3216  376   647  19  34  47


 Here mp3blaster begins to stutter.

   procs                      memory    swap          io     system         cpu
 r  b  w   swpd   free   buff  cache  si  so    bi    bo   in    cs  us  sy  id
 2  0  0   9912 107668   1236   2660   0   0    28     0  282   557  39  61   0
 0  4  1  30812   3352   1184    820 504 28016  2676 28060 1434  1515   5  11  84
 0  5  1  49592   2592   1180    860 124 14664   692 14692  538   477   2   3  95
 0  3  1  62760   2604   1192    844 172 12240   624 12244  473   331   3   4  93
 0  3  1  74440   2212   1184    900  96 11392   440 11392  342   215   3   4  93
 2  1  1  84048   2404   1184    904 120 10560   336 10560  366   239   3   3  95
 0  4  1  95716   2624   1212    948 104 12136   316 12160  388   349   2   4  94
 1  3  1 104268   3112   1184    940 152 8868   400  8868  365   348   3   6  90
 0  4  1 115468   2180   1176   1000  64 10752   276 10752  358   315   5   1  94
 0  4  1 126120   2592   1180    952 100 11116   324 11116  351   355   4   5  91
 0  4  0 137308   3880   1184   1020  96 11152   316 11152  334   342   3   5  92

 Interestingly, when swapd gets around 130000 - 140000, mp3blaster plays great 
 for the rest of the iteration, even though swap usage continues to increase.


   procs                      memory    swap          io     system         cpu
 r  b  w   swpd   free   buff  cache  si  so    bi    bo   in    cs  us  sy  id
 1  4  1 146956   2548   1180    976 140 9752   424  9776  308   326   4   7  90
 1  3  1 157544   2636   1184   1060 104 10984   632 10984  465   405   3   3  93
 0  3  1 167696   3148   1192   1068  88 10432   528 10432  397   369   2   3  96
 0  3  1 178800   3340   1176   1096 212 10560   588 10560  425   365   0   5  95
 1  3  2 188948   1624   1200   1244 104 10012   488 10028  355   370   2   2  96
 1  2  1 199088   1680   1192   1184 104 9840   296  9848  366   389   2   4  94
 1  3  1 211804   2004   1180   1108  84 11384   400 11384  379   395   3   3  94
 0  2  1 220852   1540   1176   1232 168 12264   480 12264  433   353   3   7  90
 0  2  1 237652   2564   1184   1108  96 15936   148 15936  391   367   2   7  91
 2  1  1 252852   1908   1180   1108 160 14696   220 14720  406   395   2   7  91
 0  2  1 269640   3556   1184   1108 112 17560   180 17560  479   385   4   4  93
 1  4  1 281324   3244   1184   1164 216 12612   392 12612  448   634   3   5  92
 1  4  1 290992   3076   1196   1260  68 8928   400  8928  442   691   5   4  92
 0  5  1 300672   1652   1208   1164  48 10604   308 10604  477   731   1   7  92
 0  4  1 309328   2904   1172   1384  68 8152   392  8184  414   657   3   6  91
 0  4  1 320032   2380   1192   1208  40 10616   328 10616  465   742   4   4  92
 0  4  1 334800   2020   1192   1228 100 9984   272  9984  449   704   4   7  89
 0  3  1 346044   1940   1192   1260  24 9224   476  9224  440   685   2   6  92
 1  1  1 354232   1908   1180   1280   4 15036   180 15036  478   697   5   6  90
 2  1  1 371640   2228   1180   1284   0 17164   184 17188  473   679   2   6  93
 2  2  1 388532   1864   1184   1280   4 16936    92 16940  487   716   6   4  89
 0  2  1 405428   1556   1180   1284   0 17568    76 17572  474   648   2  12  86
 0  1  1 420276   1960   1180   1284   0 15688    76 15692  473   685   6   7  87
 2  1  2 436660   2340   1212   1328   0 15260   208 15284  474   698   4  12  85
 2  3  1 459700   2032   1188   1284   0 20104    84 20128  541   793   4   7  89
 1  2  1 472500   1568   1176   1280   0 16296    68 16300  456   639   6  10  84
 2  1  1 496564   1908   1180   1280   0 23732    84 23736  598   841   2   9  88
 3  1  1 511252   2260   1184   1128   0 13880    96 13884  465   682   5   6  88
 1  3  1 531220   2940   1184   1124   0 20820   312 20848  491   705   1  12  87
 0  2  0 549140   3696   1180   1120   0 17852    88 17856  506   725   6  11  83
 1  0  1 565012   2860   1176   1128   0 16108   100 16112  502   727   6   5  89
 3  1  1 585480   1788   1180   1124  64 16576   200 16580  532   777   2   9  89
 2  1  2 601352   1900   1204   1132   0 16924    80 16952  500   721   4  10  87
 0  3  1 613636   2536   1188   1128  64 13948   136 13952  426   619   3   5  92
   procs                      memory    swap          io     system         cpu
 r  b  w   swpd   free   buff  cache  si  so    bi    bo   in    cs  us  sy  id
 1  2  1 627460   2920   1188   1128   0 14568    96 14572  481   692   6   9  85
 1  0  1 642308   2008   1184   1136   0 13724    72 13724  439   605   4   8  88
 1  2  1 660228   3572   1176   1128   0 18600    64 18600  472   682   4  11  85
 3  0  1 673540   3568   1172   1132   0 14320   328 14352  499   687   6   6  88
 1  3  1 691972   2268   1196   1156   0 17636   120 17636  530   740   4   9  86
 0  3  1 701684   3656   1192   1180  16 10592   292 10592  441   674   5   3  93
 0  3  1 711920   2592   1196   1176   4 8928   248  8928  427   657   5   6  90
 2  1  1 725732   1856   1184   1240  12 15124   236 15124  486   697   5   6  89
 0  2  0 741084   3696   1176   1188  44 15360   188 15396  505   728   4   5  90
 1  0  0  10136 411540   1236   2232 240   0  1336     0  437   700  18  22  60


 mp3blaster played beautifully to this point.  Now as the next iteration of the 
 loop begins to hit swap, mp3blaster stutters again.  
 
 This cycle of smooth until RAM is gone, stutter until swap about 140000, 
 then smooth until the loop completes repeated over and over.

 Note: I moved the vmstat headers around in the output above, but didn't remove
 any data.  



2.4.13-pre2

My system became unusable during seventh loop iteration.  I wasn't able to 
abort the test with <ctrl c>, <ctrl \>.  I could switch consoles, but the
keyboard was unresponsive.  Sync in sysrq worked.  showMem, tErm didn't 
work.  I was able to sysrq unmount a couple filesystems, but I had to
hit the reset button to recover.

PASS ... 1243611136 bytes allocated.
PASS ... 1255145472 bytes allocated.
PASS ... 1254096896 bytes allocated.
PASS ... 1253048320 bytes allocated.
PASS ... 1253048320 bytes allocated.
PASS ... 1253048320 bytes allocated.

I won't include vmstat output for this kernel, but it behaved a lot like 2.4.12aa1.



Sound Card:

00:0f.0 Multimedia audio controller: C-Media Electronics Inc CM8738 (rev 10)


Hope the information above is useful to the kernel hackers.


Scripty:


#!/bin/bash

# script to exercise vm.  
#
# Uses "mtest01" memory test from Linux Test Project
#
# see: http://ltp.sourceforge.net/
#

# allocate p percent of virtual memory and write to each page.
# (write implied by -w option in mtest01)

mtest01=/usr/src/sources/l/cvs/ltp/testcases/bin/mtest01
mtest_log=mtest01-`uname -r`.log
vmstat_log=vmstat-`uname -r`.log

# percent of virtual memory to fill
p=80

# iterations
typeset -i i=10

# watch memory usage every second
vmstat 1 > $vmstat_log &

echo running $i iterations of $mtest01
echo "output is going to $mtest_log and $vmstat_log"

# need full featured bash for (( arith )).
while	((i > 0))
do	/usr/bin/time -v $mtest01 -p $p -w
	((i--))
done > $mtest_log  2>&1
# end of script.

-- 
Randy Hron

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