BeagleBone Black – configure NTP client

The BeagleBone black do not have Real Time Clock and as a consequence each time you reboot, you’re back at time 0. To get it updated to the local hour, you can configure NTP client (if connected to network) using the following commands:

root@beaglebone:~# opkg update
root@beaglebone:~# opkg install ntp ntpdate
root@beaglebone:~# mv /etc/localtime /etc/localtime.old
root@beaglebone:~# ln -s /usr/share/zoneinfo/Europe/Paris /etc/localtime
root@beaglebone:~# killall -KILL ntpd
root@beaglebone:~# ntpdate pool.ntp.org
root@beaglebone:~# /etc/init.d/ntpd start
root@beaglebone:~# date
Sun Jun  2 17:41:10 CEST 2013

BeagleBone Black – General Overview

I just got my BeagleBone black device, this is really looking like a Raspberry PI, but personally I found multiple advantage for this card compare to RPI, the first one is related to the embedded 2GB of flash memory that do not require to add external storage. Thank to that, for the first start, you just need to connect the device to your network and a screen and it run ! After about 30s you are connected to a graphical interface and able to surf the web.

The first issue I got with this device is the micro-hdmi connector located really close to the USB connector, due to the current use of an micro-hdmi 2 hdmi adaptor, i’m not able to connect correctly a USB device.I highly recommend to use a micro-hdmi cable instead of a monoblock micro-hdmi to hdmi adaptor for this reason.

By the way, the device is accessible using ssh (root/rootme) and display can be exported easily.

The next part of the article will be about different comparison between BeagleBone and other systems like Raspberry Pi.

Continue to read this article …

Continue reading

TP-Link MR3040, autonomy test

As promise, I’m looking for MR-3040 information about autonomy. This device is really interesting as it provides an internal battery to power the device on. The question was, how many time can we use it, is the autonomy good enough to have a real mobile device you don’t have to care about autonomy when bring out to public !

The first thing is to reload the battery, from 0 to 100% it takes 3:10 using the given equipment.  The next thing is to empty the battery by just doing nothing else than switch it on, as a result, the MR-3040 ran during 7hours. This is a really good result as it means that we can bring it out most of one day (or night).

The last step is to empty the battery transferring file from & to to mr3040, in this scenario, the battery autonomy should be smaller but the result is an autonomy of 5 full hours with a transfer rate about 1.5MB/s. I was expecting a shorter time so it is a good news.

The main issue I can raised after this test is the coverage area of these kind of devices (MR3040 or MR3020) really limited to a some meters and really blocked by rock walls. This is limiting the share with the neighborhood capability. It makes it more recommended to have a share into a room.

PirateBox creation based on TP-Link MR3020

Some days ago I bought a TpLink MR3020 with the objective to create a pirate box and experience this kind of solution. I already tried to do a stuff like this some month ago based on a netgear wifi router having the capability of sharing usb storage. But the system was not easily portable and not extensible.

The proposed solution, based on this low cost router is an interesting opportunity to made the solution mobile.

Continue reading

Test de performance d’un serveur Kimsufi

Après avoir utilisé un serveur RPS durant 1 an, j’ai choisi de migrer sur un serveur Kimsufi. Le serveur RPS n’est pas mal mais le disque pose problème : il y a le principe du disque partagé à la bande passante vraiment trop limitée d’une part et la taille de ce disque elle aussi trop contraignante d’autre part.
Le serveur RPS offre un processeur normalement un peu plus rapide (double coeur et fréquence plus élevée) mais dont l’usage semble vraiment limité par le disque pour un usage web faisant appel à une BDD.

Le but de cet article est donc de comparer la performance avec mes petits outils habituels : bonnie++ et lmbench

Test du disque

  • Seq Out Char : Kim ( 33 M/s ) – RPS ( 5 M/s )
  • Seq Out Blk : Kim ( 50 M/s ) – RPS ( 6 M/s )
  • Seq In Char : Kim ( 38 M/s ) – RPS ( 4.7 M/s )
  • Seq In Blk : Kim ( 106 M/s ) – RPS ( 5.7 M/s )
  • Rand. Seek : Kim ( 186 /s ) – RPS ( 113 /s )

Avec un facteur de l’ordre de 10, il est clair que la performance du serveur kimsufi est très loin devant celle du RPS. La perf du RPS est de l’ordre de celle d’un disque NFS sur reseau 100Mb ; soit de l’ordre de 2 fois moindre qu’un disque USB suivant d’autres tests que j’ai pu réaliser. La performance du disque Kimsufi est conforme à des tests effectués sur des disques classiques sata. Ce facteur limitant impacte fortement les performances d’accès à la base de donnée par exemple ; pour le reste, sur un serveur web, hors temps de backup c’est moins critique.

Test du processeur

  • Fork de process : Kim ( 271 ms ) – RPS ( 191 ms )
  • Exec de process : Kim ( 1042 ms ) – RPS ( 654 ms )
  • Calcul int add : Kim ( 0.38 ns ) – RPS ( 0.48 ns )
  • Calcul int mul/div : Kim ( 0.38/23 ns ) – RPS ( 0.19/20.5 ns )
  • Calcul double add : Kim ( 2.26 ns ) – RPS ( 1.91 ns )
  • Calcul double mul/div : Kim ( 3/17 ns ) – RPS ( 1.93 / 10.4 ns)
  • 16p/64K Context switch : Kim ( 24 ms ) – RPS ( 22 ms)
  • Latence TCP : Kim ( 35 us ) – RPS ( 25.2 us)
  • Local comm – TCP : Kim ( 126 M/s ) – RPS ( 474 M/s )
  • Local comm – Bcopy : Kim ( 572 G/s ) – RPS ( 1.1 G/s )
  • Local comm – mem rd : Kim ( 2.2 G/s ) – RPS ( 2.5 G/s )
  • Local comm – mem wr : Kim ( 0.9 G/s ) – RPS ( 1.5 G/s )
  • Memory lantency L1/L2/Main/Rand: Kim ( 1.5/25/70/426 ns ) – RPS ( 1.4/8.1/62.5/180 ns )

Comme convenu la performance du Celeron est en dessous de celle de l’atom d’une génération plus recente avec une fréquence plus élevée et surtout un double coeur. N’empêche que l’écart entre les deux n’est pas d’un facteur 10 pas de 30 à 50% surtout lié aux accès mémoire.

Reste à tester mysql ; pour se faire j’ai utilisé myBench un petit outil tout simple en php :

  • Create 500k record : Kim ( 138 s ) – RPS ( 34 s)
  • Create md5 record / s : Kim ( 3300 ) – RPS ( 12949 )

Résultat plutôt surprenant où je m’attendais à ce que le kimsufi soit largement devant … une petite vérification des fichiers de conf s’impose ! à moins que ce ne soit le bench qui ne travaille que dans le cache …
Voyons donc avec sql-bench qui est distribué avec mysql et couvre plus de tests: (perl run-all-tests –server=mysql –user=.. –password=.. apres avoir créé une base ‘test’ sur mysql)

  • Alter : Kim ( 15s ) – RPS ( 49s )
  • Big-Table : Kim ( 10s ) – RPS ( 7s )
  • Connect : Kim ( 289s ) – RPS ( 121s )
  • Create : Kim ( 119s ) – RPS ( 4680s estimé )
  • Insert : Kim ( 2183s ) – RPS ( 581s estimé )
  • Select : Kim ( 141s ) – RPS ( 58s )
  • Update with key : Kim ( 159s ) – RPS ( 28s )

Etrange comportement du RPS sur les creation de table, j’imagine que celles-ci demande beaucoup d’I/O. Les requetes de select et insert sont beaucoup plus rapide. Ma config ayant beaucoup de cache (pour plier au probleme de disque) la puissance CPU semble prendre le dessus sur les requete insert/select/update et ce avec un facteur important de l’ordre de 2 à 3. Il semble donc, et c’est avec surprise, que la config RPS soit meilleure pour les accès bdd, ce qui pour le coup m’ennuie. On note toutefois que dès lors que l’on sort des conditions optimales, le test n’est pas du tout linéaire …

Voici donc quelques détails supplémentaires avec 1.5M de lignes à traiter:

  • Insert 3×1.5M : Kim ( 705s ) – RPS (146s )

Rien de bien neuf donc… si limite il y a dans la rupture de linéarité, elle est bien au dela des 1.5M de lignes.
Au final, une fois les sites migrés, je constate, à l’aide d’une sonde woozweb, que le temps de chargement moyen du site est 2 fois plus lente avec un KimSufi qu’avec un RPS, mais reste totalement acceptable, situant mes site dans la trache où 40% des sites font mieux pour du java et 9% pour du php basique.

Mesures de performance d’un disque dur

Question du jour alors que j’envisage de remplacer ma machine par une version VIA EPIA equipé d’une compact flash en guise de disque dur… A quelle vitesse tourne mon disque actuel !

Voici donc quelques commandes utiles pour répondre à cette question:

  • hdparm -t /dev/hda donne la vitesse d’accès en lecture sur le disque, toutefois, cette commande est un maximum car les conditions choisies par hdparm sont particulières. Dans mon cas, je trouve 30MB/s
  • L’outil seek dont le source est ici permet lui de donner le plus mauvais cas, on multipliera le nombre de seek par 4 pour obtenir le nombre de KB/s. Dans mon cas, je trouve 220KB/s avec un temps d’accès de 32ms.
  • Avec hdparm -T /dev/hda il est possible de voir ce que donne une lecture dans le cache. pour ma part j’obtiens 206M/s

Les paramètres de hdparm sont un point primordial dans l’optimisation des accès disques. hdparm /dev/hdales résume:

  • multcount : indique combien de secteur sont rappatriés à chaque E/S
  • I/O support : indique si le mode d’accès est 16, 32 ou 32-async
  • unmaskint : indique si le noyau peut traiter d’autres interruption durant un accès disque
  • using_dma : indique si l’usage du DMA est activé.. primodial !

Un autre outil pour les tests d’I/O est bonnie, dans sa version plus récente Bonnie++. Cet outil permet de tester les I/O d’une machine unix en testant les accès par bloc, caractère par caractère, testant les relecture et le temps d’accès. Il semble que ce soit l’outil le plus complet. Avantage de cet outil : il n’utilise par directement le périphérique mais le répertoire courant, du coup il est possible de tester un montagne NFS par exemple.
Mes résultats sont les suivants:

  • Montage NFS (100Mb)
    • Mode char WR/RD: 9MBs / 7MBs
    • Mode block WR/RD: 9MBs / 7.5Mbs
    • Rewrite : 4MB/s
    • Seek : 130/s
    • File seq created /s : 80
    • File seq Read /s : 3791
    • File seq Deleted / s : 164
    • File rand created /s : 91
    • File rand Read /s : 5395
    • File rans Deleted / s : 132
  • Disque local:
    • Mode char WR/RD: 21MBs / 25MBs
    • Mode block WR/RD: 35MBs / 26Mbs
    • Rewrite : 13MB/s
    • Seek : 123/s
    • File seq created /s : 22144
    • File seq Deleted / s : 25867
    • File rand created /s : 22825
    • File rans Deleted / s : 22231

Dell L400 et configuration ACPI

Autant sur une machine de bureau, l’acpi on vit bien sans, autant sur un portable on frole de danger si ca ne marche pas correctement ; à mettre en rapport avec mes remarques sur la suse 10 et 10.1 qui m’on values quelques arrets pour surchauffe ! Une solution qui semble bien fonctionner : couper l’acpi au démarrage (acpi=off) lors du prompt de sorte à laisser le bios se débrouiller…

Pour faire plus propre, il est toutefois possible de “débugger son acpi” : en fait, dans les distro classiques, on va avoir une configuration acpi générique : elle fontionne bien dans beaucoup de cas, mais pas toujours (un portable standard ca existe ?). Il est alors possible de mettre à jour l’acpi pour qu’il supporte correctement la machine… En voici la recette, appliquée sur mon L400.

  • Se procurer le fichier DSDT adapté au portable. (Tout est dans ce fichier de description de l’acpi !). Pour se faire, il faut télécharger le fichier sur cette adresse en précisant le constructeur et la marque.
  • Il faut ensuite compiler se fichier à l’aide de l’utilitaire fournit par Intel ici en choisissant la version source unix. Il faudra d’abord compiler le compilateur (nécessite bison et flex) en lançant make dans le répertoire compiler. Il faudra ensuite compiler la DSDT précedemment télécharger avec la commande suivante :
    iasl -tc dsdt.asl ce qui devrait générer un fichier de type dsdt.hex qui n’est d’autre en fait qu’un fichier de type “.h”
  • L’etape suivante consiste à recompiler son noyau pour ce celà soit pris en compte. Tout d’abord preparrons un noyau : make clean ; make mprpoper; make cloneconfig puis lancer la configuration via X make xconfig
  • La configuration de la nouvelle DSDT est, sur les noyaux 2.6.13 plus simple que ce qui est décrit sur les HOWTO classiques : dans la rubrique Power management options/acpi/ il faut cocher Include Custom DSDT puis double clicker sur Custom DSDT Table file to include et entrez le chemin complet jusqu’au fichier .hex.
  • Il reste à compiler le noyau :make
  • Enfin, il faut recopier le noyau ainsi obtenu dans le répertoire /boot. le noyau se trouve dans le répertoire /usr/src/linux/arch/i386/boot sous le nom de bzImage, il sera compié dans /boot sous le nom de vmlinuz-xxxx-version-xxx-acpi par exemple (voir le format de celui existant) et il faudra alors mettre à jour le lien symbolique de vmlinuz.
  • Pour terminer… on reboote