Scheduler & semaphore patch for 2.2.14 ...
Ed Tomlinson
tomlins en cam.org
Dom Ene 23 19:32:54 CST 2000
Hi,
Here are some numbers. My (java) application is moving lots of data thru
a pipeline, where each stage of the pipeline is a thread. The code for each
stage is small (1-20K) and the support class are about 20K each (plus netrexx
and java). This implies that most of code should be cachable. Another point,
all the locks are encapsulated in the support class(s). When using my stuff
you do not normally have to worry about locking.
In the example run below I am looking to see just how fast data is moved in the
pipeline. Normally there will only be one thread that is runnable. Suspect that
the goodness check in wakeup is helping me. In any case I see slightly better
performance with Davide's patch applied.
The stats include the run of my test pipeline. The numbers in it are in ms.
I have also included vmstat output, in the vmstat you can see fewer runnable
processes and more context switches with the patch applied.
I would be very interested to see a SAP benchmark run with and without this
patch.
Ed Tomlinson <tomlins en cam.org>
http://www.cam.org/~tomlins/njpipes.html
Davide Libenzi wrote:
>
> Hi guys,
>
> here's the patch coded for 2.2.14.
> It contains :
>
> * A clustering subdivision of processes in function of their goodness
> This avoid the linear scan of the running queue to find the
> next process to run.
> My test prove that even in high workloaded environment
> not more than two goodnesses are calculated.
>
> * As IBM guys suggested I've reorganized a bit the fields in task_struct
> to reduce the cache footprint
>
> * A wake_up patch that has the goodness calculation inside it.
> This avoid flushing all waiting threads onto the scheduler
> shoulders.
> IMVHO this is better than the current because avoid the thread
> flushing, and is better then a simple FIFO coz it try to select the
> best taks to run.
> This is 100% precise in UP while it's not in SMP due to the fact
> that we don't know which CPU will reschedule the task.
> Anyway even if in SMP the precision is not 100%, it's better
> than FIFO.
>
> I don't know if this patch will be usefull or not, the thing the is true is that
> it reduces scheduling times on high loaded runqueues, and that can speed up
> process wakeup in long waitqueue.
>
> I hope someone having a better suite than mine, should test the patch
> reporting me ( and others ) own impressions and measurements.
------------ próxima parte ------------
K6-3 400 192M (128dimm/64simm)
Linux oscar 2.2.15pre2 #1 Sat Jan 22 20:42:18 EST 2000 i586 unknown
2.2.14pre2
oscar% vmstat 2 20
procs memory swap io system cpu
r b w swpd free buff cache si so bi bo in cs us sy id
1 0 0 1764 5464 57680 70604 0 1 8 5 155 1176 64 2 34
2 0 0 1764 4280 57680 70604 0 0 0 0 151 269 97 3 0
4 0 0 1712 3148 57656 69732 0 0 0 0 186 61343 67 33 0
2 0 0 1712 3148 57656 69732 0 0 0 1 137 88462 54 46 0
3 0 0 1712 3148 57656 69732 0 0 0 0 129 88785 52 48 0
3 0 0 1712 3004 57796 69732 0 0 0 35 120 88175 54 46 0
6 0 0 1712 3132 57796 69604 0 0 0 0 102 85732 59 41 0
2 0 0 1712 3100 57796 69604 0 0 0 0 102 87082 55 45 0
3 0 0 1712 3088 57796 69604 0 0 0 1 103 84098 61 39 0
3 0 0 1712 3072 57796 69604 0 0 0 0 102 79152 61 39 0
6 0 0 1712 3192 57784 69488 0 0 0 0 102 80071 54 46 0
2 0 0 1708 6868 57784 69484 0 0 0 0 217 63028 65 35 0
2 0 0 1708 6100 57784 69484 0 0 0 0 117 116 99 1 0
2 0 0 1708 6100 57784 69484 0 0 0 0 152 175 99 1 0
oscar% java bench
speed1
timer_3 79
timer_3 25 104 RC=0
speed2
timer_3 3
timer_3 9269 9272 RC=0
speed3
timer_3 4
timer_3 990 994 RC=0
timer_3 2
timer_3 965 967 RC=0
timer_3 2
timer_3 888 890 RC=0
timer_3 1
timer_3 1004 1005 RC=0
timer_3 1
timer_3 1050 1051 RC=0
timer_3 1
timer_3 994 995 RC=0
timer_3 1
timer_3 1037 1038 RC=0
timer_3 2
timer_3 992 994 RC=0
timer_3 2
timer_3 1044 1046 RC=0
timer_3 1
timer_3 1031 1032 RC=0
oscar%
2.2.15pre2 with scheduler patch
procs memory swap io system cpu
r b w swpd free buff cache si so bi bo in cs us sy id
1 0 0 0 96176 11340 40068 0 0 34 8 197 10900 12 10 78
0 0 0 0 96176 11340 40068 0 0 0 0 170 344 1 1 98
1 0 0 0 92588 11340 40068 0 0 0 0 103 29184 48 19 33
1 0 0 0 92588 11340 40068 0 0 0 0 102 93694 55 45 0
1 0 0 0 92588 11340 40068 0 0 0 1 103 93444 50 50 0
2 0 0 0 93040 11340 40068 0 0 0 0 102 93403 51 49 0
3 0 0 0 93036 11340 40068 0 0 0 0 102 90483 55 45 0
4 0 0 0 93016 11340 40068 0 0 0 6 108 83894 53 47 0
1 0 0 0 93000 11340 40068 0 0 0 0 102 84280 58 42 0
2 0 0 0 92988 11340 40068 0 0 0 0 102 84494 58 42 0
3 0 0 0 92976 11340 40068 0 0 0 0 102 85225 54 46 0
0 0 0 0 96588 11340 40068 0 0 0 0 102 62206 38 32 30
0 0 0 0 96588 11340 40068 0 0 0 0 133 116 0 1 99
0 0 0 0 96588 11340 40068 0 0 0 0 102 116 0 1 99
oscar% java bench
speed1
timer_3 65
timer_3 21 86 RC=0
speed2
timer_3 3
timer_3 8656 8659 RC=0
speed3
timer_3 5
timer_3 993 998 RC=0
timer_3 2
timer_3 978 980 RC=0
timer_3 1
timer_3 1018 1019 RC=0
timer_3 1
timer_3 891 892 RC=0
timer_3 1
timer_3 979 980 RC=0
timer_3 1
timer_3 958 959 RC=0
timer_3 1
timer_3 978 979 RC=0
timer_3 2
timer_3 945 947 RC=0
timer_3 1
timer_3 975 976 RC=0
timer_3 2
timer_3 906 908 RC=0
Más información sobre la lista de distribución Ayuda