Skip to content

Linux Attitude

Le libre est un état d'esprit

Archive

Archive for June, 2008

Niveau :      
Résumé : C

Le C est plus lisible que le perl, la preuve le code C (test.c) suivant est valide :

%:include <stdio.h>
??=define T 2

int main(void)
??<
        int n<:T:>;

        n??(0??) = 1;
        if(n<:0??) == 1)
        <%
                n??(1:> = ??- n<:0:>;
        %> else
        <%
                n??(1??) = n<:0:> ??! 2;
        %>
        n??(0??) ??'= 3;

        printf( " n0 = %d ??/
                n1 = %d\n", n<:0:>, n<:1:> );

        return 0;
??>

Je le dis et je le prouve :

$ gcc -trigraphs test.c
$ ./a.out
 n0 = 2 		n1 = -2

Hé oui, le C contient quelques spécifications plus ou moins oubliées qui vous permettent ces bizarreries. Il s'agit en fait des trigraphs et des digraphs. Les premiers (3 caractères dont les 2 premiers sont des ?) ont été inventé pour palier un manque dans les tables de caractères pré ASCII (on me souffle qu'en fait c'est post ASCII), dont le petit nom est ISO 646. À l'époque de l'unicode ceci est toujours valable (par une option du compilateur il est vrai).

La deuxième série de caractère spéciaux (basée sur des <, >, % et :) a été introduite en 1999 ! Hé oui, la première écriture était trop peu lisible et devait être simplifiée ...

On peut ainsi créer un bug en C99 sans s'en rendre compte avant longtemps. Exemple :

int a;
a=1;
// Algo a la Kevin ?????????????????/
a++;

Exercice : Pour ceux qui suivent, trouvez la signification de chacun des groupes de caractères. Vous avez le droit à un gcc mais pas au web.

Niveau :      
Résumé : memcached (bis)

Dans un précédent article j'expliquais ce qu'était memcached et comment l'utiliser. Nous allons maintenant nous enfoncer un peu plus dans les détails.

Performances

Tout d'abord parlons performances. Commençons par utiliser les bonnes options :

  • utilisez autant de thread que votre machine a de coeurs (option -c)
  • utilisez autant de ram que possible en n'oubliant pas d'en laisser aux autres applications s'il y en a (option -m)

Si vous utilisez memcached localement sur une seule machine, utilisez l'option -s pour sauter toute la pile tcp/ip et gagner un peu en performances.

Ensuite vous devez modifier votre code pour cacher un maximum de choses, encore faut-il que cela vaille le coup. Heureusement mettre en place le cache et le désactiver est très rapide, vous pouvez donc mesurer facilement vos gains. Sur un site web chargé, il est conseillé de cacher en premier les résultats des requêtes SQL. Mais il peut aussi être judicieux de cacher un tableau, voire toute une page, car elle est probablement une agrégation de plusieurs requêtes SQL (et rien ne vous empêche de faire les 2, voire de mettre des cache partout où vous pouvez). Mais n'oubliez pas, faites des mesures, c'est le meilleur moyen de savoir si votre cache sert à quelque chose.

Choisir quoi cacher est finalement assez simple : la partie la plus grosse possible de la page pouvant être partagé par le plus de monde possible. Donc choisir des éléments ne dépendant pas de l'instant présent. Par exemple ce n'est peut-être pas une bonne idée de cacher une page dépendant d'une session, sauf si votre utilisateur est sensé rester longtemps sur votre site. Contre exemple, quelque chose qui vu par tout le monde mais qui dépend de l'heure qu'il est (le dessin de votre horloge analogique par exemple).

Si votre cache est uniquement local, il peut être plus intéressant d'utiliser une bibliothèque dans votre processus que memcached. Comme le mesure ce site : http://www.mysqlperformanceblog.com... l'api cache interne de php serait 30 fois plus rapide que memcached.

Si votre cache n'est pas uniquement local mais que vous avez toujours des problèmes de performances, il peut être utile d'empiler plusieurs niveaux de cache (local puis distribué).

Et enfin optimisez l'usage de votre cache pour faire en sorte que le maximum de choses demandées au cache s'y trouve déjà. Pour cela faut mesurer son utilisation. Memcached enregistre déjà les mesures et propose une commande pour retourner les résultats.


continue reading...

Il m'arrive parfois de lire internet, tout internet ? Non, un petit nombre de sites résiste encore et toujours à l'envahisseur français ...

Ne vous êtes vous jamais demandé si internet n'était pas divisé en compartiments étanches. Prenons par exemple le monde des sites linux. Qu'est-ce qui me prouve que les sites espagnols n'ont pas 2 ans d'avances sur les sites français en terme de design autant qu'en terme de contenu ? N'y a-t-il pas un blogueur coréen influent qui n'écrit que dans sa langue et qui fait progresser que les linuxiens de Corée sont tous meilleurs que vous ?

Heureusement il y a l'anglais qui fait qu'un certain nombre d'informations transite de temps en temps d'un monde à l'autre (car au final tout le monde reprend des informations d'un peu tout le monde), mais cela prend du temps. Et pendant ce temps, la francophonie linuxienne prend du retard. Notez que c'est valable pour tous les types de site et pas seulement pour ceux traitant de l'informatique.

C'est pourquoi quand j'ai vu dans mes referer un site espagnol je me suis empressé de le lire. Oui, je lis régulièrement la liste des sites qui pointent vers le mien, c'est un très bon moyen de découvrir d'autres sites qui parlent très probablement du même sujet. De plus contrairement aux sites que je pointe, je ne les ai pas encore lus et ils ont plus de chances de me faire pointer vers encore d'autres sites utiles.

Tout ça pour vous dire qu'il est temps, si vous voulez avoir une longueur d'avance d'apprendre une autre langue que l'anglais. De plus lire beaucoup permet d'apprendre rapidement une langue (tout comme parler beaucoup).

Partez à la conquête du reste du monde http://www.wikio.es/tecnologia/info...

Niveau :      
Résumé : memcached

Memcached, cékoidonc ? Tout d'abord c'est un mot, contrairement aux rigolos (comme moi) qui croient savoir parler anglais, on ne dit pas "memcachde" ou "mèmecachède" mais "mèmecachdi". Cette prononciation explique ce qu'est memcached : memory cache daemon, un processus qui utilise une partie de votre RAM pour en faire un cache. Le but est d'accélérer vos applications quasiment gratuitement.

Sur un site web

Ce démon a été créé pour servir de cache réparti entre plusieurs machines pour accélérer des calculs fréquents et répétitifs, comme par exemple récupérer la liste des défaites du PSG sur le site de l'Équipe. Il permet donc sur les très gros sites de réduire la charge des serveurs de base de données en mettant en RAM une bonne partie des informations.

Au lieu d'interroger directement la base de données, le site va commencer par interroger le cache et seulement ensuite la base si les informations ne se trouvent pas dans le cache (et bien sûr remplir le cache suite à ça). Ce cache fonctionne de manière distribuée, ce qui veut dire que l'information ne se trouve pas nécessairement sur la machine qui sert la page web. Plusieurs machines partagent leur mémoire et contiennent chacune une partie du cache.

Le démon

Le fonctionnement du démon est très simple : au lancement il s'alloue de la mémoire et ensuite écoute sur un port tcp les commandes qui lui sont envoyées. Celles-ci sont d'une simplicité extrême, pour simplifier, disons qu'il y en a 2 : get et set. Set permet de stocker dans la mémoire une valeur associée à une clé (exemple 199$ associé à prix_baril), get permet vous l'aurez compris de récupérer la valeur associée à une clé. L'intérêt de ces fonctions est qu'elles sont très rapides. Ajoutons pour faire plus complet une dose de timeout sur les valeurs (oui ce n'est qu'un cache), et la possibilité de supprimer ou de mettre à jour une valeur.

Cette simplicité implique qu'une certaine logique doit être implémentée au niveau du client. La bibliothèque que vous utiliserez pour communiquer avec memcached doit gérer elle même la distribution des données. La solution communément retenue est de faire un hash sur la clé et de choisir le serveur à interroger en fonction de ce hash. Le fait d'avoir le même algorithme sur tous les clients permet de garantir un fonctionnement cohérent.

Cette solution a l'avantage d'être très rapide puisque nécessitant un minimum de logique.


continue reading...

Je suis de retour de vacances ! Pour ceux (nombreux j'en suis sûr) qui veulent savoir, c'était vraiment bien, et j'ai rencontré des gens au moins aussi cools que vous (mais sûrement plus féminins ;-).

Du coup je vais me remettre à écrire ici. Avec un peu de chance on arrivera à faire de bons articles régulièrement. Pour information pendant ces vacances, l'audience est restée stable, ce qui veut dire que les gens continuent à lire les articles que je n'écris pas. Donc je devrais juste les imaginer et l'audience viendra d'elle même. Lisez donc ce magnifique article sur comment avoir un teraflop sur votre pc de bureau.




Voila, le prochain article sera à propos de memcached vu qu'il n'y a eu qu'un seul votant à mon dernier post.