Pagine

Translate

sabato 14 aprile 2012

Il mio segway - YAS - parte 1

Finalmente dopo un anno di lavoro posso aprire questo post per descrivere e illustrare tutte le fasi che stanno portando al completamento del mio progetto.
Di cosa parliamo? Stiamo parlando di costruire un biciclo autobilanciato simile al più famoso Segway. Il Segway(http://it.wikipedia.org/wiki/Segway) è un dispositivo di trasporto personale che sfrutta un'innovativa combinazione di informatica, elettronica e meccanica, il cui costo si aggira intorno ai 5000€.
Dicevami che lo scopo di questo progetto è quello di costruirlo con un budget nettamente inferiore, a conti fatti per realizzare il mio prototipo ho speso circa 400€. Fatta questa dovuta introduzione nei prossimi post descriverò come ho fatto a realizzarlo. I componenti utilizzati per la meccanico sono stati 2 motori cc da 250w, 2 batterie da 12v più viti, bulloni, dadi, staffe e ferramenta in generale.
Per la parte elettronica(il cuore del autobilanciamento ho utilizzado un piattaforma opensource con microprocessore denominata Arduino, una manciata di resistenze e condensatori e infine un IMU (Inertial mesurement unit) cioè un'unità di misurazione inerziale in grado di determinare l'accelerazione e la velocità angolare alla quale è sottoposta. Quest'ultima è usata massivamente negli smartphone di ultima generazione.
Nei prossimi post ne parleremo più approfonditamente.
Approposito, dovendo scegliere il nome per questo progetto, dopo qualche titubanza ho optato per un classico nome per i progetti DIY, così ho deciso di battezarlo: YAS (Yet Another Segway) :-)

Enjoy.
Antonio

giovedì 23 febbraio 2012

HowTo - Compilazione Kernel Real Time - Parte 4

Installazione

Se tutto è andato liscio nella nostra Home ci ritroveremo due file linux-headers-2.6.33.2-rt13-CustomRT.deb e linux-image-2.6.33.2-rt13-CustomRT.deb. L'installazione può essere fatta anche da interfaccia grafica, semplicemente facendo doppio click sul file linux-image-2.6.33.2-rt13-CustomRT.deb, al termine dell'installazione installiamo anche l'headers linux-headers-2.6.33.2-rt13-CustomRT.deb.

Se tutto è andato per il meglio riavviando il sistema durante il boot, Grub ci presenterà la possibilità di avviare il sistema con il nuovo kernel realtime. Facciamo ora alcuni test per verificare la reale efficienza del nuovo kernel real time.

Alcuni test

Grazie al pacchetto software SysBench(http://sysbench.sourceforge.net) è possibile eseguire test su CPU, RAM, Theads, Performance del disco... sullo stesso PC avviandolo prima con il kernel configurato di default e poi con quello Real Time. Di seguito i risultati del nostro test:

Kernel vanilla (default) 2.6.28-11-generic

Kernel RealTime 2.6.33.2

antonio@antonio-desktop:~$ sysbench --num-threads=20 --test=cpu run

sysbench 0.4.10: multi-threaded system evaluation benchmark

Running the test with following options:

Number of threads: 20

Doing CPU performance benchmark

Threads started!

Done.

Maximum prime number checked in CPU test: 10000

Test execution summary:

total time: 21.9421s

total number of events: 10000

total time taken by event execution: 436.5217

per-request statistics:

min: 4.18ms

avg: 43.65ms

max: 276.19ms

approx. 95 percentile: 140.17ms

Threads fairness:

events (avg/stddev): 500.0000/50.28

execution time (avg/stddev): 21.8261/0.10

antonio@antonio-desktop:~$ sysbench --num-threads=20 --test=cpu run

sysbench 0.4.10: multi-threaded system evaluation benchmark

Running the test with following options:

Number of threads: 20

Doing CPU performance benchmark

Threads started!

Done.

Maximum prime number checked in CPU test: 10000

Test execution summary:

total time: 21.3002s

total number of events: 10000

total time taken by event execution: 425.1002

per-request statistics:

min: 4.22ms

avg: 42.51ms

max: 98.23ms

approx. 95 percentile: 60.25ms

Threads fairness:

events (avg/stddev): 500.0000/10.16

execution time (avg/stddev): 21.2550/0.02

antonio@antonio-desktop:~$ sysbench --num-threads=20 --test=threads run

sysbench 0.4.10: multi-threaded system evaluation benchmark

Running the test with following options:

Number of threads: 20

Doing thread subsystem performance test

Thread yields per test: 1000 Locks used: 8

Threads started!

Done.

Test execution summary:

total time: 9.7286s

total number of events: 10000

total time taken by event execution: 193.7196

per-request statistics:

min: 0.35ms

avg: 19.37ms

max: 235.93ms

approx. 95 percentile: 74.65ms

Threads fairness:

events (avg/stddev): 500.0000/46.77

execution time (avg/stddev): 9.6860/0.10

antonio@antonio-desktop:~$ sysbench --num-threads=20 --test=threads run

sysbench 0.4.10: multi-threaded system evaluation benchmark

Running the test with following options:

Number of threads: 20

Doing thread subsystem performance test

Thread yields per test: 1000 Locks used: 8

Threads started!

Done.

Test execution summary:

total time: 8.4843s

total number of events: 10000

total time taken by event execution: 169.3573

per-request statistics:

min: 0.49ms

avg: 16.94ms

max: 98.36ms

approx. 95 percentile: 43.27ms

Threads fairness:

events (avg/stddev): 500.0000/34.36

execution time (avg/stddev): 8.4679/0.01

In giallo sono evidenziati le più rilevanti differenze di prestazioni tra il Kernel Real Time e il Vanilla.

Spero che questo post sia utile.

Grazie a tutti per l'attenzione.


venerdì 12 agosto 2011

HowTo - Compilazione Kernel Real Time - Parte 3

Compilazione del Kernel:
Per prima cosa effettuaiamo una pulizia del pacchetto rimuovendo residui di precedenti compilazioni.

sudo make-kpkg clean

ora incrociamo le dita, accendiamo un cero alla madonna e lanciamo la compilazione con il comando:

CONCURRENCY_LEVEL=1 fakeroot make-kpkg --append-to-version -CustomRT --initrd kernel_image kernel_headers modules_image

Il parametro 1 nel comando CONCURRENCY_LEVEL indica che abbiamo 1 processore, se ne avessimo 2 o 4 possiamo impostare questo valore a 2 o 4 e dare più potenza di calcolo alla compilazione.
Se ci fossero problemi con il comando fakeroot è possibile sostituirlo con sudo, o in alternativa installare Fakeroot con il comando sudo apt-get install fakeroot*.

La compilazione dura circa un ora, se durante la compilazione doveste ricevere un messaggio di errore del tipo:

echo “The UTS Release version in include/linux/version.h”; echo ” \”\” “; echo “does not match current version:”; echo ” \”2.6.33-CustomRT\” “; echo “Please correct this.”; exit 2 The UTS Release version in include/linux/version.h does not match current version: “2.6.33-CustomRt” Please correct this. make[1]: *** [debian/stamp/install/linux-image-2.6.33-rc1-amd64] Error 2

allora vi trovate di fronte al bug 498747, che impedisce la compilazione del kernel a causa di alcuni errori nel path degli script. Ci sono due modi per risolvere, il primo è scaricare la patch kpkg-2.6.33.patch, oppure utilizzare il medoto più vecchio del mondo, fare le modifiche manualmente.
Visto che amo tanto fare le cose da me, vi illustro il procedimento per fare le modifiche manualmente:

Andare nella directory ~/linux-2.6.33.2/debian/ruleset/misc aprire il file version_vars.mk con sudo gedit version_vars.mk, e rimuovere la riga:

UTS_RELEASE_HEADER=$(call doit,if [ -f include/linux/utsrelease.h ]; then \

e sostituirla con:

UTS_RELEASE_HEADER=$(call doit,if [ -f include/generated/utsrelease.h ]; then \

echo include/generated/utsrelease.h; \

elif [ -f include/linux/utsrelease.h ]; then \

echo include/linux/utsrelease.h; \

else \

echo include/linux/version.h ; \

quindi andare nella directory ~/linux-2.6.33.2/debian/ruleset/targets aprire il file common.mk con sudo gedit common.mk, e rimuovere la riga:

grep LINUX_COMPILER include/linux/compile.h | \

Sostituendola con:

grep LINUX_COMPILER include/generated/compile.h | \

sed -e 's/.*LINUX_COMPILER "//' -e 's/"$$//' >> debian/buildinfo

ifneq ($(strip $(shell test -f version.Debian && cat version.Debian)),)

echo kernel source package used: >> debian/buildinfo


Salvare entrambi i files e rilanciare la procedura di compilazione:

CONCURRENCY_LEVEL=1 fakeroot make-kpkg --append-to-version -CustomRT --initrd kernel_image kernel_headers modules_image

oppure

sudo make-kpkg --append-to-version -CustomRT --initrd kernel_image kernel_headers modules_image

Abbiamo finito, nel prossimo tutorial (parte 4) parleremo di come installarlo.

Enjoy
Antonio