Newsgroup: it.comp.os.linux.sys
Titolo: Performance Test fra Voluntary e Preemptible kernel

Come consigliatomi ho fatto dei test per verificare diff. di performance 
fra l'utilizzo di Voluntary o Preemptible kernel.
Benchmark utilizzati: sysbench (I/O,RAM,CPU) e bonnie++ (I/O)
Kernel e HW utilizzato:
Linux slack 2.6.19.2 #9 Mon Jan 15 22:54:31 CET 2007 i686 athlon-4 i386
Il riassunto IMHO è il seguente:
1) FILE I/O  leggermente meglio VOLUNTARY KERNEL
2) CPU	     leggermente meglio PREEMPTIBLE
3) MEM       leggermente meglio PREEMPTIBLE (ma quasi simili)
4) File I/O  Il test di I/O fatto con Bonnie++ risulta avvantaggiare 
l'Output per il VOLUNTARY KERNEL mentre l'Input è migliore con il 
PREEMPTIBLE.
I test sono stati eseguiti con questo ordine:
1) sysbench --num-threads=16 --test=fileio --file-total-size=3G 
--file-test-mode=rndrw run
2) sysbench --num-threads=16 --test=cpu --cpu-max-prime=10000 run
3) sysbench --num-threads=16 --test=memory --memory-total-size=3G 
--memory-access-mode=rnd run
4) bonnie++ -d /test -s 1760 -u 0:0
A chi interessa posto di seguito i risultati dei test, per avere un 
vostro migliore quadro della situazione.
PREEMPTIBLE
1)
Operations performed:  6001 Read, 3999 Write, 12800 Other = 22800 Total
Read 93.766Mb  Written 62.484Mb  Total transferred 156.25Mb  (2.5134Mb/sec)
   160.86 Requests/sec executed
Test execution summary:
     total time:                          62.1662s
     total number of events:              10000
     total time taken by event execution: 395.1162
     per-request statistics:
          min:                            0.0000s
          avg:                            0.0395s
          max:                            1.8034s
          approx.  95 percentile:         0.1626s
Threads fairness:
     events (avg/stddev):           625.0000/71.06
     execution time (avg/stddev):   24.6948/1.92
2)
Test execution summary:
     total time:                          38.9823s
     total number of events:              10000
     total time taken by event execution: 621.4513
     per-request statistics:
          min:                            0.0039s
          avg:                            0.0621s
          max:                            2.6045s
          approx.  95 percentile:         0.0042s
Threads fairness:
     events (avg/stddev):           625.0000/8.15
     execution time (avg/stddev):   38.8407/0.07
3)
Operations performed: 3145728 (47997.39 ops/sec)
3072.00 MB transferred (46.87 MB/sec)
Test execution summary:
     total time:                          65.5396s
     total number of events:              3145728
     total time taken by event execution: 974.2331
     per-request statistics:
          min:                            0.0000s
          avg:                            0.0003s
          max:                            45.1017s
          approx.  95 percentile:         0.0000s
Threads fairness:
     events (avg/stddev):           196608.0000/176065.66
     execution time (avg/stddev):   60.8896/7.76
4)
	------Sequential Output------ --Sequential Input- --Random-
	-Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Size 	K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
1760M 	55487  95 67141  15 26280   5 37193  82 60655   4 240.0   0
	------Sequential Create------ --------Random Create--------
	-Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
files    /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
    16    3657  99 +++++ +++ +++++ +++  3727  99 +++++ +++ 13241  97
slack,1760M,55487,95,67141,15,26280,5,37193,82,60655,4,240.0,0,16,3657,99,+++++,+++,+++++,+++,3727,99,+++++,+++,13241,97
VOLUNTARY
1)
Operations performed:  6006 Read, 3994 Write, 12800 Other = 22800 Total
Read 93.844Mb  Written 62.406Mb  Total transferred 156.25Mb  (2.5666Mb/sec)
   164.27 Requests/sec executed
Test execution summary:
     total time:                          60.8772s
     total number of events:              10000
     total time taken by event execution: 409.7101
     per-request statistics:
          min:                            0.0000s
          avg:                            0.0410s
          max:                            0.5338s
          approx.  95 percentile:         0.1691s
Threads fairness:
     events (avg/stddev):           625.0000/41.83
     execution time (avg/stddev):   25.6069/0.93
2)
Test execution summary:
     total time:                          40.3680s
     total number of events:              10000
     total time taken by event execution: 644.0635
     per-request statistics:
          min:                            0.0040s
          avg:                            0.0644s
          max:                            2.3036s
          approx.  95 percentile:         0.0043s
Threads fairness:
     events (avg/stddev):           625.0000/5.01
     execution time (avg/stddev):   40.2540/0.06
3)
Operations performed: 3145728 (47884.58 ops/sec)
3072.00 MB transferred (46.76 MB/sec)
Test execution summary:
     total time:                          65.6940s
     total number of events:              3145728
     total time taken by event execution: 1006.9798
     per-request statistics:
          min:                            0.0000s
          avg:                            0.0003s
          max:                            26.9035s
          approx.  95 percentile:         0.0000s
Threads fairness:
     events (avg/stddev):           196608.0000/73533.28
     execution time (avg/stddev):   62.9362/3.11
4)
        ------Sequential Output------ --Sequential Input- --Random-
        -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Size   K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
1760M  56964  96 71545  16 25612   4 35277  84 59923   4 248.5   0
        ------Sequential Create------ --------Random Create--------
        -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
   16   3252  99 +++++ +++ +++++ +++  3122  98 +++++ +++ 12042  98
slack,1760M,56964,96,71545,16,25612,4,35277,84,59923,4,248.5,0,16,3252,99,+++++,+++,+++++,+++,3122,98,+++++,+++,12042,98

 Benchmark utilizzati: sysbench (I/O,RAM,CPU) e bonnie++ (I/O)
Perdonami, ma penso tu abbia perso tempo :)
La differenza sostanziale tra i due sistemi non e` sulle prestazioni nei
benchmark, ma sull'interazione con l'utente.
In pratica devi vedere se, lavorando normalmente, uno ti sembra piu`
responsivo dell'altro. Se, per esempio, mentre una finestra si ridisegna
tu riesci a spostarne un'altra, o se mentre stai comprimendo un file con
gzip riesci a visualizzare un filmato senza scatti, ecc. ecc.
Bye.


Quindi dovrebbe gioviarne solo il multitasking, beh se effettivamente
è così farò altre prove in via personale.

 che culo!
Tra l'altro, a me sybench da dei risultati "strani" sulla memoria, passa
da:
Operations performed: 1048576 (173464.92 ops/sec)
1024.00 MB transferred (169.40 MB/sec)
Test execution summary:
    total time:                          6.0449s
    total number of events:              1048576
    total time taken by event execution: 5.9996
    per-request statistics:
         min:                            0.0000s
         avg:                            0.0000s
         max:                            0.0021s
         approx.  95 percentile:         0.0000s
a:
Operations performed: 1048576 (35233.66 ops/sec)
1024.00 MB transferred (34.41 MB/sec)
Test execution summary:
    total time:                          29.7606s
    total number of events:              1048576
    total time taken by event execution: 29.5516
    per-request statistics:
         min:                            0.0000s
         avg:                            0.0000s
         max:                            0.0091s
         approx.  95 percentile:         0.0000s
Senza motivo apparente, test eseguiti più volte sempre col computer "a
riposo"..
Mah..
Ciao.
-- 
*** Linux user # 198661 --- ICQ 33500725 ***
***  Home  
http://web.tiscali.it/kailed
  ***
       ***  Powered by SuSeLinux  ***

 da:
io ho fatto la media su 3 test per ogni modifica del kernel, ma i valori 
discostavano di pochi Mb/s, la diversità che risulta sul tuo è veramente 
esagerata. E' l'ultima ver. di sysbench?
Potresti provare anche con bonnie++ e vedere se ti risulta anche con lui il 
problema.

Andrea wrote:

La cosa è strana, incuriosito dal tuo post ho deciso di provare sysbench
per valutare alcune ottimizzazioni del kernel.
Ho fatto il test 2-3 volte con risultati analoghi. Reboot con il nuovo
kernel, eseguo il test e triste sopresa, crollo totale delle
prestazioni e anche qui, test ripetuto più volte.
Rifaccio il boot con il vecchio kernel, test e mi ritornano i valori del
primo test, quelli "buoni". Dopo un paio d'ore, ho rifatto il test e
sono saltati fuori i risultati sballati che sono in linea con quelli
ottenuti con il kernel di prova. Ho appena rifatto il test e continua a
darmi i valori "bassi", boh.. 
Ho usato questi parametri: 
sysbench --test=memory --memory-total-size=1G run 
I test sulla cpu rimangono stabili...
Ho utilizzato sysbench-0.3.2-38


 Ho utilizzato sysbench-0.3.2-38
un pò vecchiotta (supportava i primi kernel 2.6)!  prova l'ultima
(0.4.8)
eventualmente potresti anche specificare il tipo di test sulla memoria
(random,seq, etc..)

 (random,seq, etc..)
Con la 0.3.2 quelle opzioni non erano disponibili. Adesso, con calma
rifarò per bene tutti i test.
Tu, a parte la questione voluntary/preemptible hai fatto qualche altro
test sulle performance del kernel ? Tipo scelta del processore,
compilarlo con/senza "optimize for size", generic optimization, etc,
etc.. ?


 etc.. ?
ne ho fatti altri con alcune opzioni sullo scheduler, ma non è cambiato 
praticamente nulla, tranne forse per i tempi di accesso alla RAM (alla 
fine ho lasciato l'opzione CFQ).
L'optimize for size mi preoccupa un pò per la compatibilità, quindi al 
momento mi occupo solo di snellire il kernel.

Andrea wrote:

Nel kernel suse è di default. Adesso ho provato a togliere quell'opzione
ma non mi pare di notare differenze significative: stando a sysbench ci
sono dei lievissimi miglioramenti ma non ho fatto dei test
approfonditi. In conpenso l'immagine del kernel è circa il 15% più
grande...


 grande...
minkia! no, meglio senza :)
bye

 sono dei lievissimi miglioramenti ma non ho fatto dei test approfonditi.
Continuate a fare benchmark (tipicamente monoprocesso e che mettono alla
prova le potenzialita` di calcolo e dell'hardware) per opzioni che
influenzano soprattutto il multitasking.
Lo scheduler sceglie l'ordine in cui eseguire i processi, eventualmente
distinguendo tra processi realtime e normali (o batch). Se lanciate un
singolo processo batch (il benchmark) lo scheduler non entra nemmeno in
azione, a meno che non muoviate il mouse, suoniate un mp3, montiate o
guardiate un video, contemporaneamente.
La preemption interrompe l'esecuzione di un processo (ora anche di
funzioni del kernel) se lo scheduler richiede priorita` per un processo
piu` importante, quindi vale il discorso di sopra.
E` praticamente impossibile valutare i benefici di queste opzioni con un
normale benchmark. O se ne fa/trova uno apposta o si valuta ad occhio.
Bye.

 Bye.
Direi quindi che la cosa più semplice è far partire il bench e suonare un 
mp3 per sentire se l'mp3 suona bene oppure no, o anche un bel video avi:
In un caso dovresti avere un buon bench ma il video a scatti, nell'altro il 
bench si abbassa ma il video si vede bene..
C'ho azzeccato?
-- 
Roberto Tagliaferri-Linux user #30785 <-> r.tagliaferri@(forse)
tosnet.it
- L'Italia e' il settimo paese industrializzato.
- Guarda un po' Bitonto a che posto sta.
		-- Andrea Pazienza

 il bench si abbassa ma il video si vede bene.. C'ho azzeccato?
Esatto.
Magari mentre fai il tutto prova anche ad clickare qualcosa, aprire altre
applicazioni, ecc. e valutare la responsivita` del sistema.
Bye.

 
infatti ho fatto alcuni test con sysbench mentre compilavo il kernel con 
l'opzione "time" per calcolare il tempo impiegato per la ricompilazione

 che influenzano soprattutto il multitasking.
IO mi sono attaccato a questo thred ma i miei semplici test non erano
indirizzati alla scheduler, alle differenze tra voluntary/preemptible.
Erano più generici sulle ottimizzazioni del kernel.
Personalmente ho attivo il voluntary e impostato gli HZ a 1000.
Un test che non ho ancora fatto, è confrontare il kernel di default
suse-i586 con quello da me ricompilato per athlon e senza lo
switch "optimize for size". A occhiometro però le differenze mi paiono
veramente minime...
Per ora ho confrontato solo kernel ricompilati con differenze minime...
Mi ricordo un vecchio post su ICOLI di un tizio che facendo dei test con
un programmino i c++, su athlon, un kernel i686 era più performante di
un kernel K7, questa cosa mi è rimasta in testa...
Tra l'altro, sbirciando nei sorgenti del kernel, ho trovato un commento
che dice che passare al compilatore athlon o athlon-xp è assolutamente
indifferente. Sarà un problema del gcc (o della versione del gcc..),
del kernel o cosa ?!?
Intendiamoci, non mi aspetto differenze "importanti" ma delle differenze
si :)


Andrea wrote:

Sarebbe da valutare, in fondo una volta che l'immagine del kernel +
eventuali moduli sono caricati, 100-200Kb in più non credo che
impattino in maniera negativa sulle performance. A patto di non avere
16MB di RAM, ovviamente :)
a
Ogni programm fa un po' storia a se, sarebbe da valutare caso per caso..
