jeudi 19 avril 2007

Bien démarrer avec Arch Linux


Bien démarrer avec Arch Linux

Arch Linux est une distribution simple, rapide et très modulable. Elle a la mauvaise réputation d'être compliquée. Arch Linux est une distribution très optimisée. Ici, il n'est pas question d'avoir un système avec des fichiers de configuration un peu partout et des tonnes de service démarés par défaut. L'accent est mis sur la légèreté. Il faut aussi mentionner que Arch Linux ne repose pas sur des rpm ou deb mais plutôt sur son propre système de paquet.

Après avoir essayé plusieurs distributions et être resté durant plusieurs années avec Suse, j'ai décidé de tenter l'aventure avec Arch Linux. Mes craintes étaient la complexité de configurer le système, mais étant donné tous le bien que j'entendais depuis plusieurs mois de cette distribution, j'ai tenté ma chance. Cet article nécessite d'avoir un minimum de connaissance sous Linux.

Installation de Arch

Téléchargez la dernière version iso de Arch Linux. Dans cet exemple, nous utiliserons la version 0.8.
Lorsque vous allez insérer votre cd de Arch dans votre lecteur, c'est la première image que vous verrez. Appuyez sur la touche Entrée



Tapez /arch/setup et ensuite appuyez sur la touche enter.

Choisisez cd-rom comme source d'installation.

Voilà le menu d'installation et ses différentes étapes.

J'ai opté pour l'option la plus simple: auto preprare. Cette option va tout enlever sur le disque dur.

J'ai pris les options par défaut pour les dimensions du disque dur.

Sélectionner un système de fichier. J'ai pris ext3.

Nous allons maintenant effectuer l'étape de sélection de paquet (logiciel, application).

La source des paquets choisie est est le cd-rom.

La sélection de paquet est fait par catégorie. Si vous désirez un système sans interface graphique, prenez base. Vous allez pouvoir installer kde et cie par la suite. Pour éviter les problèmes, je vous conseille de tout sélectionner ce qui se trouve dans le système de base. Nous installerons par la suite l'environnement graphique.

Les paquets choisis seront maintenant installés.

La configuration du système va commencer.

Optez pour la préconfiguration afin de vous faciliter la tâche.

Le système demandera si vous avez besoins du usb, firewiere, pcmia, nfs, raid, raid2, lvm... pour démarrez le système, réponsez yes si vous en avez besoin.

Choix de l'éditeur texte, j'ai choisi vi, mais nano est plus simple d'emploi.

Quelques fichiers ont besoin d'information pour que le système puisse bien fonctionner.

Dans le fichier: rc.conf , inscrivez ses valeurs pour utilisez le clavier canadien français.
LOCALE="fr_CA.utf8"
HARDWARECLOCK="localtime"
TIMEZONE="Canada/Eastern"
KEYMAP="cf.map.gz"
CONSOLEFONT="lat9w-16"
CONSOLEMAP="8859-15"
USECOLOR="yes"

MOD_AUTOLOAD="yes"

HOSTNAME="linux"

lo="lo 127.0.0.1"
eth0="dhcp"
INTERFACES=(lo eth0)

#nécessaire si vous avez un routeur
gateway="default gw 192.168.0.1"
ROUTES=(!gateway)

DAEMONS=(syslog-ng network netfs crond )
Je n'ai rien modifié dans les fichiers hosts, fstab, mkinitcpio.conf, modprobe.conf, resolv.conf.
Pour le fichier locale.gen, enlevez le caractère # devant la ligne correspondant à votre langue. Pour le français au canada, c'est la ligne suivante
fr_CA.UTF-8     UTF-8
N'oubliez pas de donner un mot de passe pour l'utilisateur root, une fois fait, retournez au menu principal.

L'étape de l'installation du noyau est arrivée.

Installation du gestionnaire de démarrage du système. Si vous avez un autre système Linux, vous pouvez sauter cette étape.

Voici un exemple de fichier grub avec un système ayant déjà une autre distribution Linux d'installé (opensuse).Grub n'a donc pas été installé sous Arch. Seul le fichier grub sous opensuse à été modifié.
title Arch Linux
    root (hd0,8)
    kernel /boot/vmlinuz26 root=/dev/sda9 vga=792 ro
    initrd /boot/kernel26.img
Voici comment le disque avait été découpé pour accepter les deux distributions Linux.
/dev/sda1 /boot  #opensuse
/dev/sda5 /      #opensuse
/dev/sda6 /var   #opensuse
/dev/sda7 swap   #opensuse
/dev/sda8 /home  #opensuse
/dev/sda9 /      #archlinux

Pour le gestionnaire de démarrage, le meilleur choix est grub, il est plus puissant et flexible que lilo.

Il faut maintenant spécifier où grub sera installée, j'ai opté pour le premier choix.

L'installation de base est terminée. Redémarrez votre système afin de voir si le tout fonctionne correctement.

Si l'installation s'est bien déroulée, vous devriez arriver à une console.

Gestion des paquets

La gestion de paquet une un outil propre à Arch Linux, il s'appelle pacman. C'est un outil qui offre des fonctionnalités similaires à urpmi. Vous devez taper les prochaines commandes dans une console et utilisez l'utilisateur root.

installer

pacman -S nom_du_soft

rechercher

pacman -Ss nom_du_soft

rechercher un paquet installé

pacman -Qs nom_du_soft

désinstaler un paquet

pacman -R nom_du_soft

désinstaller un paquet et ses depensances

pacman -Rcs nom_du_soft

Synchroniser la base de donnée des paquets

pacman -Sy

Mise à jour du système

pacman -Su

Fichier pour la gestion des paquets

Dans le fichier /etc/pacman.conf, différents dépôts sont disponibles. Votre fichier devrait ressembler à ceci afin d'avoir accès au maximum de paquet.
[current]
# Add your preferred servers here, they will be used first
Include = /etc/pacman.d/current

[extra]
# Add your preferred servers here, they will be used first
Include = /etc/pacman.d/extra

#[unstable]
# Add your preferred servers here, they will be used first
#Include = /etc/pacman.d/unstable

[community]
 Add your preferred servers here, they will be used first
Include = /etc/pacman.d/community

Il faut donc décommenter tous les Includes et les sections entre crochets. Si vous désirez avoir les dernières mises à jour du système au risque de le rendre non fonctionnel, vous pouvez décommentez la section unstable. Maintenant nous allons lancer une commande afin d'utiliser les serveurs les plus rapides.
sortmirrors

Continuité de l'installation

Puisque nous avons installé que le système de base, nous allons maintenant installer le serveur graphique. Les commandes suivantes doivent être faite en mode root.
pacman -Sy xorg xorg-clients xterm
pacman -S hwd
pacman -S xorg-fonts-75dpi xorg-fonts-100dpi

Installation de Kde en français
pacman -S kde pacman -S extra/kde-i18n-fr
Installation des drivers propriétaire Nvidia
pacman -S nvidia

Installation des drivers pour le son
pacman -S alsa-lib alsa-utils

Installation du plugin flash pour le web
pacman -S flashplugin

Installation des applications nécessaires pour l'impression
pacman -S cups ghostscript
pacman -S foomatic-filters

Installation du kit de développement Java (utile seulement pour les programmeurs
pacman -S jdk

Installation de la machine virtuelle Java
pacman -S jre

Installation de la librarie pour lire les dvd
pacman -S libdvdcss

Installation du driver pour les caméras web
pacman -S gspcav1

Afin de faciliter la configuration du matériel, il est conseillé d'installer hal
pacman -S hal

Ceux ayant installe Java, peuvent installer jacman comme gestionnaire de paquet graphique.. Sous kde, il faut utiliser kdesu pour le démarrer en mode root si on a pas démarrer une session kde avec ce dernier.

Configuration du système

Créer un usager

Afin d'éviter de briser le système, nous allons créer un usager avec des droits plus restreints.

Création de l'usager

useradd -m -s /bin/bash  collinm

Création du mot de passe

passwd collinm

Ajout de l'usager à divers groupe

usermod -G users,wheel,slocate,audio,optical,floppy,storage,video, collinm

Imprimante

Si vous utilisez une imprimante usb.
modprobe usblp

Si vous utilisez une imprimante parallèle.
modprobe parport
modprobe parport_pc

Si vous désirez pouvoir accéder à des périphériques de stockage.
modprobe usb_storage

Si vous avez installé le driver pour la webcam, lancez la commande suivante:
modprobe gspca

Configurer xorg

Dans le fichier: xorg.conf, inscrivez ses valeurs
Option "XkbLayout"  "ca"
Option "XkbVariant" "fr"

Tapez la commande ci-dessous afin que la détection du matériel (écran, souris, clavier, carte vidéo) est lieu.
hwd -xa

Ceux ayant une carte vidéo nvidia, exécuté la commande suivante
nvidia-xconfig

X devrait maintenant fonctionner peut-être pas de façon optimale. Au besoin, modifiez le fichier.
/etc/X11/xorg.conf

Démarage de daemon

Les démons disponibles se trouvent dans /etc/rc.d/

Si vous désirez lancez un daemon automatiquement au démarrage, dans /etc/rc.conf, rajouté le daemon dans la section qui lui est consacrée. Le mien ressemble à ceci.
DAEMONS=(syslog-ng @hal network @kdm netfs crond @alsa)

Voici quelques démons qui peut-être très utile.
cups est utilisé pour les imprimantes.
hal est utilisé pour la détection automatique de périphérique.
kdm est utilisé par kde.
alsa sert à avoir du son

N'oubliez pas d'ajouter le gestionnaire de connexion à cet endroit si vous désirez démarrer en mode graphique automatiquement.

Aur

AUR est le dépôt des utilisateurs de Arch Linux. Ainsi n'importe qui ou presque peut créer un paquet et ainsi faire profiter toute la communauté.

Pour faire cet exemple, vous devez avoir décommenter la partie community dans le fichier /etc/pacman.conf. Nous allons installer le programme netbeans, c'est un environnement de développement pour java.
Dans un console, lancez la commande: makepkg. Vous devriez voir apparaitre ces lignes.
==> Making package: netbeans 5.5-1 (Wed Apr  4 22:06:37 PDT 2007)
==> Checking Runtime Dependencies...
==> Checking Buildtime Dependencies...
==> Retrieving Sources...
==>     Found netbeans-5_5.tar.bz2 in build dir
==>     Found netbeans.sh in build dir
==>     Found netbeans.desktop in build dir
==> Validating source files with MD5sums
    netbeans-5_5.tar.bz2 ... Passed
    netbeans.sh ... Passed
    netbeans.desktop ... Passed
==> Extracting Sources...
==>     tar --use-compress-program=bzip2 -xf netbeans-5_5.tar.bz2
==> Starting build()...
==> Removing info/doc files...
==> Compressing man pages...
==> Stripping debugging symbols from libraries...
==> Stripping symbols from binaries...
==> Generating .PKGINFO file...
==> Copying install script...
==> Generating .FILELIST file...
==> Compressing package...
==> Finished making: netbeans  (Wed Apr  4 22:07:13 PDT 2007)
Un fichier netbeans-5.5-1.pkg.tar.gz sera créé. Il vous reste plus qu'à installer ce paquet.
pacman -A netbeans-5.5-1.pkg.tar.gz
loading package data... done.
checking for file conflicts... done.
installing netbeans... done.

Performance

Étant donnée la simplicité du système Arch, cette distribution à des performances supérieures aux distributions dite grande publique: Suse, Mandriva, Kubuntu.
Avec Opensuse avec un 4200+ et 1gig de ram, plus de 55 secondes sont nécessaire avant de se rendre à KDM et ce après avoir désactivés plusieurs services. Arch fait la même chose en 28 secondes de plus, Kde est beaucoup plus réactif.

Réseau

Pensez à désactivié le IPv6. Sous firefox dans la barre d'adresse tapé:
about:config
Mettez la valeur de la clé ci-dessous à false.
network.dns.disableIPv6
Nous allons maintenant désactivé ce protocole pour le système. Dans le fichier /etc/modprobe.conf, ajoutez les deux lignes suivantes:
alias net-pf-10 off
alias ipv6 off
Finalement dans le fichier /etc/sysctl.conf, ajoutez la ligne suivante:
net.ipv6.conf.all.autoconf=0

Conclusion

Nous avons vu différentes étapes afin de pouvoir utiliser Arch Linux.Son principe de fonctionnement fait en sorte que le système est très performant et stable. Cette distribution est assez différente du trio: fedora, opensuse ubuntu, mais reste une excellente alternative pour ceux voulant des performances et qui maîtrise un minimum Linux.

mercredi 7 mars 2007

Les tableaux


Les tableaux

Bash supporte les tableaux à une dimension. Aucune initialisation n'est nécessaire, mais si on tente d'afficher un tableau non initialisé, rien ne sera affiché. Le support des tableaux est un peu différent des autres langages de programmation. Il est possible directement d'assigner une valeur à un index particulier. Bash initialisera les autres index automatiquement.

Création

declare -a mon_tableau

Bash créera un tableau vide.
Il est possible de créer un tableau en lui attribuant des valeurs.

mon_tableau[2]='test'

Bash initilisera mon_tableau[0] et mon_tableau[1] à vide.

Opération

La commande ci-dessous affichera l'item à la position spécifié par l'index.
echo ${mon_tableau[index]}

La commande ci-dessous affichera tous les éléments du tableau
echo ${mon_tableau[*]}

La commande ci-dessous affichera le nombre d'élément du tableau
nbItem=${#mon_tableau[*]}
echo $nbItem

Voici un exemple qui énumère les notions apprisent jusqu'à maintenant
#!/bin/bash

#déclaration d'un tableau
declare -a mon_tableau

#initialisation du tableau
mon_tableau=( nuage soleil neige )

#affiche le deuxième éléments soit neige
echo ${mon_tableau[2]}

#affiche tous les éléments du tableau, soit nuage, soleil et neige
echo ${mon_tableau[*]}

#affiche le nombre d'élément
nbItem=${#mon_tableau[*]}
echo $nbItem

for ((i=0;i<$nbItem;i++)); do
  echo ${mon_tableau[${i}]}
done

Les tableaux en bash peuvent contenir différent type de donnée. Il est donc possible d'avoir des int, des chaînes de caractère dans le même tableau sans problème. Il suffira de faire attention si des opérations sont faites entre les éléments du tableau.

declare -a mon_tableau2

mon_tableau2=( 7 99 avion )

mon_tableau2[3]=`expr ${mon_tableau2[0]} + ${mon_tableau2[1]}`

#affichera 106
echo ${mon_tableau2[3]}

mon_tableau2[4]=`expr ${mon_tableau2[0]} + ${mon_tableau2[2]}`

#ceci générera une erreur car un int ne peut être ajouté à une string
echo ${mon_tableau2[4]}

Il faut donc faire très attention lorsque différents types de donnée sont employé au sein du même tableau.

dimanche 25 février 2007

Les chaînes de caractères


Les chaînes de caractères

Bash possède de nombreuses fonctionnalités pour manipuler les chaînes de caractères qui ne sont pas aissé à maîtriser.

Longueur d'une chaîne de caractère

Il existe au moins 2 méthodes pour y parvenir.
nom="Paul"
${#nom} #retourne 4

nom="Paul"
echo `expr length $nom` #retourne 4

Si la chaîne contient des espaces, il faut mettre des " au tour de la chaîne de caractère lorsqu'on utilise la deuxième méthodes.

nom="Paul Smith"
echo `expr length "$nom"`  #retourne 10

Il faut faire attention lorsque la chaîne de caractère contient des '. Il faut alors utiliser le \.

message='C'\''est froid dehors'
echo ${#message}  #retourne 18
echo ${message}   #retourne C'est froid dehors

Extraction d'une chaîne de caractère

Bash permet d'extraire une chaîne caractère d'une autres à partir de différente position.
Le première paramètre spécifié indique la position de départ et le second indique la longueur.

message="Il fait froid dehors"
echo ${message:3} # retourne fait froid dehors
echo ${message:8:5} # retourne froid
echo ${message:(-6)} # retourne dehors

Enlever des caractères en début de chaîne

Cette possibilité permet d'enlever les caractères se trouvant en début de chaîne, il faut spécifier la chaîne désirer être enlever. Il est possible d'utiliser l'étoile. Elle signifie n'importe quelle caractère.

message="Il fait froid dehors"
echo ${message#Il}   #fait froid dehors
echo ${message#I*d}   #dehors

Dans le seconde cas, il est spécifié, enlever la chaîne débutant par I et se terminant par d.

Enlever des caractères en fin de chaîne

C'est identique à la fonction précédente, excepté qu'elle commence par la fin de la chaîne

message="Il fait froid dehors"
echo ${message%d*s}   #Il fait froid

Remplacer une chaîne par une autre

Le première paramère est la chaîne de caractère initiale, le deuxième est la valeur recherché et le troisière est la valeur qui remplacera le deuxième paramètre.

message="Il fait froid dehors"
echo ${message/froid/chaud}   #Il fait chaud dehors

Prenez note que si vous voulez replacer toutes les occurences du deuxième paramètre par le troisième, il faut doublez le / du deuxième paramètre.

message="Il fait froid dehors"
echo ${message//froid/chaud}   #Il fait chaud dehors

Nous avons vu les quelques fonctions que Bash propose pour manipuler des chaînes de caractères. Leurs syntaxes varie ce qui rend leur utilisation un peu plus difficile.

dimanche 12 novembre 2006

PeerTV, la tv sous Linux


PeerTV, la tv sous Linux

PeerTV est un script Perl qui donne accès au WebTv.

Paquet nécessaire sous Suse 10.1

perl
perl-AppConfig
perl-ExtUtils-Depends
perl-ExtUtils-ParseXS
perl-libwww-perl
perl-libxml-perl
perl-Tk
perl-XML-LibXML
perl-XML-LibXSLT
perl-XML-NamespaceSupport
perl-XML-Parser
perl-XML-SAX
perl-XML-Simple
perl-XML-Writer
perl-URI
tk
mplayer
w32codec-all
N'oubliez par de cliquer la case: Vérification automatique dans YaST2.

Installer PeerCast

Télécharger PeerCast.

Effectuer les commandes suivantes dans un terminal.
tar xzf peercast-linux.tgz

Le fichier peercast peut être mis dans /usr/bin.

Installation de PeerTV

Télécharger PeerTv.
Effectuer les commandes suivantes dans un terminal.
tar xzf PeerTV-033-Linux.tar.gz
cd PeerTV-033-Linux
./PeerTV.pl

Si vous avez bien installé les paquets indiquez, PeerTV se lançera.

Les WebTv vous sont maintenant acessible aisément, bonne TV.

samedi 16 septembre 2006

Comment configurer les boutons de la souris?


Comment configurer les boutons de la souris?

Télécharger imwheel, ce logiciel permettra d'effecutuer une action à la suite d'un clic de souris (selon un bouton donnée). Dans le fichier XF86Config (/etc/X11/) ou Xorg (/etc/X11/xorg.conf)

Section "InputDevice"
  Driver       "mouse"
  Identifier   "Mouse[1]"
  Option       "Buttons" "7"
  Option       "Device" "/dev/input/mice"
  Option       "Name" "Autodetection"
  Option       "Protocol" "explorerps/2"
  Option       "Vendor" "Sysp"
  Option       "ZAxisMapping" "6 7"
EndSection

Dans le fichier xinitrc (etc/X11/xinit/) pour que tous les usagers 
aient accès à cette modification ou dans le fichier xinitrc local de 
l'usager copié ce code
xmodmap -e "pointer = 1 2 3 6 7 4 5"
imwheel -p -k -b "67"

Le fichier: imwheelrc permet de définir des actions à exécuter selon le bouton pressé par application. Si vous employez xorg 6.9 ou supérieur. Le fichier xinitrc pourrait être:

xmodmap -e "pointer = 1 2 3 6 7 4 5 8 9 10 11"
imwheel -p -k -b "89"

jeudi 14 septembre 2006

La face cachée de Konqueror


LA FACE CACHÉE DE KONQUEROR

Konqueror est connue comme étant le navigateur de Kde. Son moteur a été utilisé et modifié pour devenir webkit sous mac os X.

Ses utilisateurs le connaissent aussi comme un navigateur de fichier. Konqueror a beaucoup plus à offrir que ses deux fonctionnalités.

Kde possède des modules d'entrée/sortie (io slaves) très évolués qui permettent d'effectuer diverses opérations au travers de ses applications. Konqueror en profite donc aussi.

Protocole

Audiocd

audiocd:/
Affiche les pistes audio du cd et permet de les copier sur le disque dur.

Media

media:/
Affiche les médias (cd, disquette, disque dur) que le système dispose

Camera

camera:/
Affiche le contenu de l'appareil photo.

Fish

fish:/
Permet de se connecter à un système grâce au protocole ssh

Sftp

sftp:/
Permet de se connecter à un serveur sftp

Ftp

ftp:/
Permet de se connecter à un serveur FTP

Smb

smb://
smb://nom_usager@nom_machine/dossier
smb:/ Affiche tous les systèmes disponibles
Permet d'accéder aux ressources partagées d'un autre système

Ldap

ldap:/
ldap://host:port/resource
Permet d'accéder à des ressources d'un autre système

Info

info:/
info:dir ou info:/dir
Affiche l'aide disponible pour de nombreux programmes.

Man

man:/
man:ls ou man:/ls
Affiche les man pages de disponible sur le système

Settings

settings:/
Affiche les possibilités pour gérer KDE

Trash

trash:/
Affiche ce qui a été supprimez, mais encore possible de restaurez

Ipod

ipod:/
Affiche le contenu du ipod

Locate

locate:/
Effectue une recherche avec à partir de l'indexage

Sysinfo

sysinfo:/
Affiche différentes informations sur le système: vitesse du cpu, mémoire, état du réseau, hd...

Remote

remote:/
Affiche les possibilités d'accéder à un système distant: smb, services réseau, services SLP

Applications

applications:/
Affiche le menu de kde et permet de démarrer les programmes.

Print

print:/
Affcihe de l'information sur l'imprimante ainsi que la queue d'impression.
Konqueror gère d'autres protocoles et ceux présentés ne sont pas nécessairement disponibles sur votre système. Konqueror est aussi en mesure divers types d'images, des fichiers pdf, des fichiers compressés.

Nous avons pu voir que Konqueror est beaucoup plus qu'un simple navigateur, il est un des programmes clés de Kde.

lundi 3 juillet 2006

BENCHMARK 64 bits C++ vs JAVA

BENCHMARK 64 bits C++ vs JAVA

Nous avons déjà réalisé un article sur les performances de C++ et de Java. Les performances se sont grandement améliorées au fil des versions de Java. Java arrivait à compétitionner avec C++ lors de certains tests.

Récemment, Sun à sortir la bêta 2 de Java 1.6, nous avons réalisé de nouveau les tests déjà effectués sur cette nouvelle version.

Détail de la machine de test

Cpu Athlon 64bits 3000+
Carte mère Asus a8n-vm
Mémoire vive 896 megs
Système d'exploitation Suse Linux 10.1
Système de fichier Reiser

Information des tests

Les mêmes tests ont été utilisés, aucun fichier source n'a été modifié. Pour de plus amples renseignements sur les sources et détails de chaque fichier, consulté l'autre article.

Protocole

Les tests en C++ ont été compilés avec g++ (GCC) 4.1.0 (SuSE Linux). La version de Java est 1.5.0_07 et 1.6.0-beta2. GCJ a aussi été utilisé.

En C++ nous avons compilé les fichiers de cette façon :

g++ -O2 -funroll-all-loops -fomit-frame-pointer -ffast-math -march=x86-64 -mfpmath=sse [test].cpp -o [test]

En java, nous avons compilé les fichiers de cette façon:
javac -O [test].java

Les programmes java ont été exécuté en version cliente et serveur.
java [test]
  java -server [test]

Des tests ont été faits afin de voir les performances des programmes Java en natif à l'aide du compilateur gnu.
 
gcj -O2 -march=i686 --main=[test] -o [test] [test].java 
gcj -O2 -fomit-frame-pointer -ffast-math -march=x86-64 -mfpmath=sse  --main=[test] -o [test] [test].java

Paramètre pour chacun des programmes

Les mêmes paramètres que dans le précédent article ont été employé.

Tableau des résultats

C++ x86-64 Java 1.5 Java 1.5 -server Java 1.6 Java 1.6 -server GCJ optimisé
Ackermann 25320 20056 20020 ND ND 59705
Hash2 12080 6398 5957 4995 4920 11176
Matrix 5720 13828 13605 12169 12092 9443
Objinst 14560 5103 4969 4972 4963 28062
Strcat 660 1857 1680 1685 1607 1983
Hash 11440 45638 44915 34216 33982 33661
Methcall 7680 3273 3229 3374 3188 14062
random 3780 14640 14591 14226 14225 17684
fibo 15950 18895 17460 18076 18064 26956
heapsort 9300 11414 11215 11756 11366 10130
Nestedloop 2840 17000 16936 21303 21169 11805
Sieve 6950 14347 14340 13946 13938 10418
Total 116280 172449 168917 140718 139514 235085
ND signifie que le test a échoué

Analyse des résultats

Puisque deux tests ont échoué sous Java 1.6 le total des tests sous Java 1.6 est faussé. Nous pouvons supposer que leurs résultats pourraient être similaires à ceux obtenus sous Java 1.5.

Les résultats de Java 1.6 seraient ainsi globalement inférieurs à ceux de Java 1.5. Le test nestedloop affecte grandement Java 1.6, il semble avoir un problème, sans ce test, nous pouvons remarquer que Java 1.6 a amélioré les performances par rapport à son prédécesseur.

Les résultats sont similaires au premier article, Java s'en sort encore une fois très bien. GCJ continue d'avoir de la difficulté dans ce test.

Java 1.6 prend un avantage sur la version 1.5. Le Code C++ semble poser problème. Il est surement possible d'optimiser cela.

Le C++ se resaisie dans ce test. Il est au minimum deux fois plus vite que les versions Java. Malgré que le processeur soit plus rapide et qu'il y ai plus de mémoire, le C++ en tire beaucoup moins partie que les versions Java.

GCJ obtient des performances déplorables, presque deux fois plus lent que la version C++.Les deux versions de Java obtiennent des performances similaires.

Le code Java emploie des StringBuffer qui sont beaucoup plus rapides que des String. Depuis Java 1.5 des StringBuilder peuvent être employés, elles sont encore plus rapides que les StringBuffer. J'ai modifié le source pour voir le gain apporté par ce nouveau type de donnée et le gain a été de 200.

Nous pouvons remarquer que les performances obtenues par les versions Java sont inférieures à celle obtenue dans le précédent article. La version 64 bits de la JVM serait moins performante que la version 32 bits?

Idem que précèdent les performances sont moins bonnes.

La version C++ est dans une classe à part, elle est 3 fois plus rapide que les versions Java.


Les versions Java se sont rapprochées de la version C++ par rapport à la l'article précédèrent.


L'écart dans l'article précédemment était faible, il augment cette fois-ci.


Les résultats sont décevant pour Java 1.6, la version 1.5 est 24% plus rapide.


Aucune amélioration notable du côté de Java

Emprunte mémoire

Durant l'exécution des tests, le taux de mémoire employée et le taux d'usage du CPU ont été pris. Pour l'ensemble des tests, le CPU était utilisé à 99,9%. Concernant la mémoire, c'est plus complexe étant donné que des librairies sont partagées et ne sont pas prises en compte par les outils d'évaluation. Néanmoins à l'aide de la commande top, j'ai pu remarquer que C++ s'en sortait beaucoup mieux que ses confrères. Les versions de Java font majoritairement 50% mieux que la version de GCJ.

Facteur à prendre en considération

Performance

Les performances sont importantes, afin de bien optimiser un logiciel, l'utilisation de profiler est indispensable. Ce type d'outils permet de savoir où sont les goulots d'étranglement de l'application. Il est plus sage d'investir du temps dans une portion qui exécuté à 45% du temps par le logiciel qu'une autre qui n'est exécutée que 2% du temps.

Java permet de faire appel à du C++ à l'aide de JNI. À partir d'un programme Java, il est ainsi possible de faire appel à des fonctions en C++. Cette approche peut s'avérer intéressante lorsqu'une portion critique d'un programme Java n'atteint pas les performances souhaitées. 

L'expérience du programmeur n'est pas un facteur à négliger. Même s'il est possible de faire du code très rapide en C++, encore faut'-il être en mesure d'y parvenir sans même la stabilité du système en péril.

Temps de développement

Un autre critère qui a pris de l'importance depuis plusieurs années est le temps de développement. D'ailleurs, c'est un des points qui a favorisé le succès de Java. L'api est très riche et permet d'éviter de devoir employer de nombreuses librairies externes telles que bd, gui... qui sont difficilement portable d'un système d'exploitation à l'autre sans compté les risques d'incompatibilité. Il y a quelques années, j'ai dû porter un langage de script de Qnx vers Linux. Énormément de changement ont dû être fait, certaines API n'existaient pas sous Linux et auraient dû être écrites au complet. Cela a contribué à restreindre certaines fonctionnalités lors du portage. Idem pour une application qui fonctionnait sous Unix. Linux ne gérait pas les chaînes de caractère nulles comme le faisait Unix. Java apporte aussi la robustesse aux applications. La JVM effectue de nombreuses opérations qui sont laissées aux programmeurs en C++. C'est surement une des raisons qui fait en sorte que Java devient de plus en plus populaire dans les systèmes embarqués.

Future

Maintenant que les performances de Java sont rendues près du C++, Sun pourrait commencer à regarder d'autre approche pour améliorer Java. La JVM charge au démarrage d'un programme Java que le nécessaire, ensuite le tout est compilé et optimisé pour le processeur en cours. Cette opération est réalisée à chaque que le programme est démarré. La JVM pourrait sauvegarder le tout et réutiliser ce qui a été généré. Il y a de fortes chances que les performances soient meilleures et que moins de mémoire serait utilisée.

Conclusion

GCJ s'est améliorée depuis le premier article. Java 1.6 est encore en phase bêta, mais la majorité des résultats démontrent que les performances se sont améliorées. Les programmes compilés à l'aide de C++ obtiennent souvent les meilleurs résultats, fait à noter, les performances ne font pas tout, d'autres facteurs sont à prendre à considération lors de la phase de développement d'un logiciel. Il semble que la version 64bits de la JVM ne soit pas encore assez optimisée par rapport à la version 32 bits. Ne pas oublier que la version 1.6 est en phase bêta, ce qui influence directement les performances et stabilités.