Crazy data…

My current research project is the implementation of a failure detection service based on the SNMP standard. One important aspect of this service is sending heartbeat messages over SNMP. The prototype works quite well and I’m currently doing some performance measures, but last week in stumbled on a small mystery. My current experiment is rather simple, set the service to transmit heartbeat messages at high rate and measure the CPU load. I did some preliminary tests from and to my laptop and the Sun station I use here, no problem. But when I run the same code on the Linux cluster, I get something strange. The code runs fine, but the CPU load varies at lot, reaching nearly 50% and then dropping to 2%. So while I have reasonable average CPU loads, I get wild distributions.

I plotted the CPU load as a function of time, and I get this really strange curve. The X axis is the time in seconds and the Y axis is the CPU load, in percentage. I get this very regular pattern, with a period of around 198.5 seconds. This is much to slow to be the garbage collector, and the GC logs show no activity that could even be related to this phenomenon. When CPU load is around 50%, the CPU spends around 25% of the time in the kernel, so I might hit some strange kernel problem. I’m now trying to figure out if the same phenomenon has the same periodicity on other cluster nodes, and if it is related to the frequency of heartbeats.

CPU load graph

I tried running some profiling tools, but no dice. My process is eating away 40% of the CPU with the following stack trace

Full thread dump Java HotSpot(TM) Client VM (1.5.0_02-b09 mixed mode, sharing):

“Notifier:[c1.jaist.ac.jp, 0, Test, 1000, 3, 1, 2%, 1.3.6.1.4.1.999.2.1.1.1.14.99.49.46.106.97.105.115.116.46.97.99.46.106.112.0, 1, 1, ]” daemon prio=1 tid=0x083938f0 nid=0×7025 in Object.wait() [0xb1e49000..0xb1e49fb0]
at java.lang.Object.wait(Native Method) – waiting on <0x89038e10> (a jp.ac.jaist.snmpd.basic_fd.BasicFailureDetectorTable$FailureDetectorRow$StateChangeNotifier)
at java.lang.Object.wait(Object.java:474)
at jp.ac.jaist.snmpd.basic_fd.BasicFailureDetectorTable$FailureDetectorRow$StateChangeNotifier.waitNext(BasicFailureDetectorTable.java:393) – locked <0x89038e10> (a jp.ac.jaist.snmpd.basic_fd.BasicFailureDetectorTable$FailureDetectorRow$StateChangeNotifier)
at jp.ac.jaist.snmpd.basic_fd.BasicFailureDetectorTable$FailureDetectorRow$StateChangeNotifier.run(BasicFailureDetectorTable.java:412)

“DefaultUDPTransportMapping_0.0.0.0/1616″ daemon prio=1 tid=0×08310808 nid=0×7022 runnable [0xb1f4b000..0xb1f4c130]
at java.net.PlainDatagramSocketImpl.receive0(Native Method)
at java.net.PlainDatagramSocketImpl.receive(PlainDatagramSocketImpl.java:136) – locked <0x8901a5f0> (a java.net.PlainDatagramSocketImpl)
at java.net.DatagramSocket.receive(DatagramSocket.java:712) – locked <0x88b85490> (a java.net.DatagramPacket) – locked <0x8901ac28> (a java.net.DatagramSocket)
at org.snmp4j.transport.DefaultUdpTransportMapping$ListenThread.run(Unknown Source)

“Timer-1″ daemon prio=1 tid=0x0817fd88 nid=0×7021 in Object.wait() [0xb1fcd000..0xb1fcd1b0]
at java.lang.Object.wait(Native Method) – waiting on <0x89014cc0> (a java.util.TaskQueue)
at java.lang.Object.wait(Object.java:474)
at java.util.TimerThread.mainLoop(Timer.java:483) – locked <0x89014cc0> (a java.util.TaskQueue)
at java.util.TimerThread.run(Timer.java:462)”Timer-0″ prio=1 tid=0x0817a3e0 nid=0×7020 in Object.wait() [0xb204d000..0xb204de30]
at java.lang.Object.wait(Native Method) – waiting on <0x89014d38> (a java.util.TaskQueue)
at java.util.TimerThread.mainLoop(Timer.java:509) – locked <0x89014d38> (a java.util.TaskQueue)
at java.util.TimerThread.run(Timer.java:462)”Low Memory Detector” daemon prio=1 tid=0x080a00d8 nid=0x701e runnable

[0x00000000..0x00000000]“CompilerThread0″ daemon prio=1 tid=0x0809eb88 nid=0x701d waiting on condition

[0x00000000..0xb2409998]“Signal Dispatcher” daemon prio=1 tid=0x0809dcb0 nid=0x701c runnable

[0x00000000..0x00000000]“Finalizer” daemon prio=1 tid=0×08099348 nid=0x701b in Object.wait() [0xb270b000..0xb270c0b0]
at java.lang.Object.wait(Native Method) – waiting on <0x88fffe90> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:116) – locked <0x88fffe90> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:132)
at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159)”Reference Handler” daemon prio=1 tid=0×08098648 nid=0x701a in Object.wait() [0xb278d000..0xb278d130]
at java.lang.Object.wait(Native Method) – waiting on <0x88ffff10> (a java.lang.ref.Reference$Lock)
at java.lang.Object.wait(Object.java:474)
at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:116) – locked <0x88ffff10> (a java.lang.ref.Reference$Lock)”main” prio=1 tid=0x0805b720 nid=0×7018 waiting on condition [0xbfffd000..0xbfffd658]
at java.lang.Thread.sleep(Native Method)
at jp.ac.jaist.snmpd.FDAgent.main(FDAgent.java:245)”VM Thread” prio=1 tid=0x08095b50 nid=0×7019 runnable “VM Periodic Task Thread” prio=1 tid=0x080a1568 nid=0x701f waiting on condition

On Mac OS X I use Shark for doing the profiling, but I have not found such a nice tool for Linux. The cluster nodes run 2.6.11-1.14_FC3 i686 i386 GNU/Linux with the 1.5.0_02 Sun JVM.

flattr this!

De la complexité des kanjisOf the complexity of kanji


Un des gros problèmes lorsqu’on apprend le japonais, c’est la maîtrise des kanjis. Les kanjis sont les caractères utilisés pour écrire le chinois, ces caractères n’ont de base pas de signification phonétique (même s’ils sont parfois utilisés de manière phonétique), mais représentent des concepts. Comme le japonais est une langue complètement différente du chinois, cela pose toute une série de problèmes, de fait ces problèmes peuvent assez bien être exprimés si on essaye d’utiliser les kanjis en français.

Le kanji pour cheval est 馬, donc au lieu d’écrire «J’ai un cheval», on pourrait écrire «J’ai un 馬». La première chose qu’on remarque, c’est que le texte est devenu plus compact, mais si on ne connaît pas le kanji, incompréhensible. Un autre effet, moins évident, concerne la vitesse de lecture, comme on a supprimé le stade phonétique et rendu la représentation très compacte, on peut lire le mot directement. Si on est habitué, la lecture est, parait-il, très rapide. Le problème du kanji illisible est souvent réglé au moyen de furigana, c’est une écriture phonétique du mot au dessus. Notre phrase deviendrait donc «J’ai un cheval.» On trouve des furiganas dans les livres pour enfants, mais aussi dans des textes plus sérieux pour les kanjis difficiles (notamment ceux dans les noms de personnes ou de lieux).

Un problème qui n’est pas présent en japonais concerne les pluriels, vu qu’ils ne sont en général pas exprimés explicitement. Comme en français, le nombre est indiqué par l’article on peut décider d’écrire «j’ai des 馬», mais on se retrouve avec deux lectures pour le kanji 馬: cheval et chevaux. L’alternative est de décider que 馬 se lit «cheva» et qu’on écrit donc «j’ai un 馬l» et «j’ai des 馬ux», cette solution me paraît plus japonaise: en général c’est seulement le radical d’un mot qui est représenté par le kanji, les parties variantes sont en général écrites phonétiquement.

Jusqu’à là, rien de tragique. Le problème c’est que 馬 représente le concept de cheval, qui peut en français être exprimé par les termes issus du grec, du latin et de l’italien. Si on prend la phrase «Au concours hippique, j’ai vu beaucoup de cavaliers et de chevaux.», ça pourrait s’écrire «Au concours 馬ique, j’ai vu beaucoup de 馬liers et de 馬ux.» On réalise à présent que le kanji pour un concept simple aurait, en français, au moins quatre lectures:

  1. cheva-
  2. hipp-
  3. equ-
  4. cava-

Le truc intéressant, c’est qu’avec cette manière d’écrire, les mots chevalier et cavalier, s’écrivent à présent de la même manière: 馬lier, ce n’est pas très étonnant vu que les deux sont un substantif qui indique une personne qui a une activité lié à la notion de cheval, simplement ces mots ayant des origines différentes, elles ont des connotations différentes.

Pour en revenir au Japonais, les mots ne sont pas construit à partir du grec, du latin ou de l’italien, mais du chinois, ou plutôt une forme archaïque du chinois. De ce fait un kanji a en général deux lectures, une japonaise et une chinoise. Les fameuses lectures ‘kun’ et ‘on’, toutefois certains mots peuvent avec bien plus que deux lectures, typiquement parce que le japonais a plus d’un terme lié à un concept.

Un effet intéressant de ce système est que vu que l’information sémantique est codée dans le texte, la même écriture reste lisible indépendamment de la langue de lecture. Si on prend la ville de Neuchâtel, cela s’écrirait 新城, mais cette séquence de kanji pourrait être lue comme Neuenburg ou Newcastle. La lecture japonaise serait Shinjō, et la chinoise Xincheng.

Le fait de lire dans sa langue un mot est courant ici, les chinois “lisent” les mots différemment, il ne s’agit pas, comme pour des occidentaux d’un jeu sémantique, mais simplement de la lecture directe. Ils est donc courant qu’ils prononcent (entre eux), les noms de lieux comme ils les lisent, cela fait que Tsurugi (鶴来) devient Helai.

flattr this!

義理チョコGirichoko

Mardi dernier, c’était la Saint-Valentin. Même si le Japon n’est en général pas un pays chrétien, c’est une fête qui est célébrée ici. Toutefois la manière dont elle est célébrée est a été quelque peu changée par rapport à ce qui se fait en Europe. Au Japon, la tradition veut que ce soit la fille qui offre à l’élu de son cœur du chocolat. Les garçons n’offrent rien, il y a une autre jour spécial, un mois plus tard, ou les garçons rendent la pareille.

Néanmoins le Japon est pays de diplomatie et d’obligations, et faire un choix semble être quelque chose de très peu diplomatique, d’où la notion de 義理チョコ girichoko, il s’agit de chocolat offert non pas pour des raisons sentimentales, mais des raisons diplomatiques, typiquement à tous les garçons du groupe. De ce fait les magasins sont remplis de jolis paquets de chocolats divers, et c’est une des rares époques ou l’on peut, paraît-il, trouver toutes sortes de chocolat difficiles à trouver le reste de l’année. Certaines filles japonaise, paraît-il ne s’y trompent pas et mangent elles-même le chocolat.

Une des choses qui m’a fasciné, c’est le terme girichoko lui-même. Le giri est un concept central à la société japonaise, de manière très simplifiée, il s’agit des obligations et des devoirs sociaux qu’à une personne. Choko, est, on s’en doute, la version raccourcie de chocolat, qui comme tous les mots d’origine étrangère, s’écrit en katakana. Malgré le fait que ces deux mots sont soigneusement séparés jusqu’au niveau de l’écriture, les japonais en ont quand même fait un mot composé. Cela devrait calmer toute personne qui a des illusions sur le fait qu’on peut garder une langue pure.

flattr this!

Heidiland

Heidiland

Heidiland

スイスの箸を貰いました。 スイスの水を買えます。日本でスイスはハイジの国です。

J’ai reçu des baguettes suisses. On peut acheter de l’eau de Suisse. Au Japon, la Suisse est le pays de Heidi.

I received swiss chop-sticks. One can buy Swiss water. In Japan, Switzerland is the country of Heidi.

Ici quand je dis que je viens de la Suisse, la première réaction des gens est ah, la Suisse, le pays de Heidi, アルプスの少女ハイジ Arupusu no Shōjo Haiji, le dessin animé inspiré du livre de Johanna Spyri est très populaire, et comme toujours on trouve toute une série de produits dérivés: bonbons, cartes de vœux, eau minérale. Ce dernier produit ne semble pas être directement basé sur le dessin animé. En fait, et c’est ce qui m’a le plus étonné c’est que l’eau semble être effectivement produite en Suisse, par contre, je n’en ai jamais vu la moindre bouteille quand j’habitais en Suisse. Les baguettes sont véritables et m’ont été offertes par une amie grecque, quand elle les a vues, elle n’a pas pu résister.

Les kanjis d’aujourd’hui:
Kanji Kun ON Signification Décomposition Note
はし hashi チョ CHO Baguettes (pour manger) Un vieil homme 老, du bambou 竹 et le soleil 日
すく suku ショウ SHŌ Petit, peu nombreux Petit 小 et un trait. 少ない すくない : rare, peu nombreux (i-adjectif)
少しすこち : un peu

flattr this!

Ex-word Dataplus 2Ex-word Dataplus 2

denshi-jisho

J’avais promis il y a un bon moment de faire un billet sur mon dictionaire électronique français-japonais.
Je m’y mets enfin. Une des raisons pour ce retard est la difficulté de faire la critique d’un objet que je ne sais pas bien utiliser, et donc c’est accessoirement le premier exemplaire que j’utilise.

Les 電子辞書 denshi-jisho (dictionnaires électroniques) sont très courants ici au Japon. Ils remplacent les dictionnaires papiers et les dictionnaires de traduction entre langues. Ils ont l’avantage de permettre de rechercher un mot ou un kanji phonétiquement, ou par radical. Dans mon cas j’étais surtout intéressé par le fait d’avoir un dictionnaire pour passer du japonais à une langue que je connais. Les dictionnaires japonais-anglais sont les plus communs et j’aurais pu me débrouiller sans trop de peine avec un dictionnaire japonais-anglais. Néanmoins j’ai préféré en chercher un qui contiennent aussi la traduction vers le français: une indirection de plus j’ajoute jamais à la qualité. J’ai l’impression de certaines vocables se traduisent plus naturellement sur des mots français.

J’ai été chez Yamada-denki (une chaîne d’électro-ménager très commune) et j’ai pris celui l’unique modèle qu’ils avaient qui contenait le français. Vu mon niveau de japonais à l’époque (c’était l’été dernier) je n’étais pas en position de poser trop de questions au vendeur, j’étais fondamentalement content de réussir à acheter ce que je voulais. Le dictionnaire était assez cher, mais j’ai considéré que c’était un investissement utile, et je ne suis plus étudiant non plus, donc je peux me permettre ce genre de dépenses. Bref, j’ai acheté un Casio XD-LP7200.

La première observation, c’est que si c’est un dictionnaire de traduction l’interface à proprement parler n’a été programmée qu’en japonais. Donc il faut naviguer dans les menus en kanjis, ce qui pour un débutant n’est pas évident, il m’a fallu pas mal de tâtonnements pour trouver les fonctionnalité de base. Le plus gros problème de ce design centré sur le client japonais, c’est que lorsque j’entre un mot en français, j’ai les kanjis du mot en japonais, mais pas la lecture. Donc je peux rapidement trouver l’écriture en japonais d’un mot, mais pas la manière dont on le prononce. La situation n’est néanmoins pas désespérée, en effet une fonctionnalité pratique de ce dictionnaire est qu’on peut sélectionner un mot ou un kanji et faire une nouvelle recherche. Donc ce que je fais, c’est que j’entre le mot en français, je sélectionne le kanji de la traduction et je demande une traduction en sens inverse qui me mène à une page qui contient la lecture. Ouf.

Le dictionnaire contient de fait une dizaine de dictionnaires et d’encyclopédies. Vu mon niveau, je n’utilise que le dictionnaire français-japonais et inverse. Il m’arrive d’utiliser le dictionnaire japonais-anglais quand je ne trouve pas le mot dans le dictionnaire japonais-français. J’ai l’impression que le dictionnaire japonais-anglais est plus complet, c’est à dire qu’il contient plus facilement des mots composés. Au delà, je ne peux malheureusement pas juger de la qualité des différentes encyclopédies. Parmi les fonctionnalités inutiles pour moi, il y a un guide de prononciations japonais (d’où la sortie audio).

Une fonctionnalité qui aurait été utile pour moi est la connection USB. Le dictionnaire comporte en effet un slot SD et une prise mini USB standard. Le dictionnaire offre la possibilité de stocker des fichiers textes sur le dictionnaire, et de les lire. Vu que j’ai très souvent ce dictionnaire sur moi, ça aurait été pratique de stocker mes notes dessus, voire une copie de mon agenda.

J’ai donc promptement mis une vieille carte SD sortie d’un téléphone portable et connecté le tout à mon laptop. Résultat, rien. J’avais naïvement assumé que le dictionnaire implémenterait la norme USB mass storage – la norme qui définit comment interfacer un espace de stockage via USB – ce n’est pas le cas. Cette norme est supportée par la grande majorité des appareils photos numériques, les clefs USB, les baladeurs MP3, la PSP, les téléphones portables, et les lecteurs de cartes SD, memory-stick et autres. Bref, c’est le standard, que même Sony ne peut pas ignorer.

Mais on ne parle pas d’un appareil Sony, mais Casio. Donc pas, de standard, mais un programme qui officiellement ne fonctionne que sous Windows en japonais. Quelque part, devoir installer un programme pour transférer des bêtes fichiers texte me semble très ⅩⅩème siècle. Du point de vue design c’est complètement idiot, car cela force Casio a implémenter et maintenir un utilitaire. Je suppose que cela leur donne l’impression de pouvoir contrôler l’accès au données dans le dictionnaire et éviter qu’un programme copie ou utilise le dictionnaire depuis un ordinateur.

Cela dit, je ne me suis pas découragé, les données sont stockées sur le SD, regardons quel est le formattage. C’est du FAT, tout n’est pas perdu, cela veut juste dire qu’il est possible modifier les fichiers directement sur le SD. Faux. J’avais encore une fois assumé un design rationnel. Même si les données sont stockées sur le SD, l’index semble être stocké dans le dictionnaire, donc si on change le SD en dehors du dictionnaire, par exemple en effaçant un fichier, le dictionnaire ne s’en rend pas compte, il donne juste un message d’erreur. C’est naturellement un design de grouillot, dupliquer une structure de données d’un file-system, surtout s’il est amovible dans la mémoire du système principal est un bon moyen pour arriver à un état incohérent. Pas que j’ai été jusqu’à présent impressionné par les informaticiens japonais, autant ils comprennent bien le hardware, autant au niveau software, ce n’est pas ça, les programmes japonais sont souvent très mauvais. Il y a une raison pour laquelle le japon exporte du matériel, mais presque pas tellement de logiciel.

En conclusion, je dirais que le dictionnaire est un outil utilisable, certainement plus qu’un dictionnaire papier. Il souffre par contre de mon point de vue d’avoir été conçu pour le marché japonais. Entre les nombreuses encyclopédies que je ne peut pas lire et l’interface USB mal fichue, j’ai l’impression de n’utiliser que 10% des capacités de l’appareil. Quelque part, cet appareil a des meilleures caractéristiques qu’un Mac classic, mais avec des limitations de software terribles.

Fiche Technique

Modèle:
Ex-word dataplus 2 XD-LP7200
Fabricant:
Casio
Batteries:
2 × AA
Clavier:
QWERTY, touches de directions, deux petit hauts parleurs intégrés
Écran:
Noir blanc 480×320 pixels
Interfaces
Sortie audio (mono), slot SD, port USB (mini)
Prix
¥ 36’800

J’ai ajouté une petite page d’instructions.

flattr this!

楽しい鮨の映画Funny Film about SushiUn film amusant sur les sushis

あれは楽しい鮨の映画.

Ceci est un film amusant sur les sushis.

This is a funny film about sushis.

Attention, tout n’est pas vrai dans ce film, tout n’est pas faux non plus…

Warning, everything in this movie is not true, but neither is everything wrong…

Les kanjis d’aujourd’hui:
Kanji Kun ON Signification Décomposition Note
すし sushi KI sushi Fait avec un poisson 魚 et une cuillère (匕) de riz, ne dure qu’un jour (日) Je n’ai jamais vu une utilisation de la lecture ON.
うつ utsu エイ EI reflection, projection Un grand 大
soleil 日
映る うつる : se projeter, se mirer (verbe, 1er groupe, intransitif)
映す うつす : projeter, réfléchir (verbe, 1er groupe, transitif)
かく
kaku

GA
trait de pinceau, image Une 一 rizière 田 dans une boîte 凵. Kaku sert comme compteur pour les traits dans un kanji

Les plus observateurs auront remarqué que j’ai changé de site de référence pour les kanjis. Celui-ci a l’avantage d’avoir les lectures et les décomposition ainsi que l’ordre des traits pour les radicaux. Le nouveau site est mahō (probablement dans le sens magie). Le fait que le meilleur site de référence sur les kanjis soit un site de fan d’animation japonaise est assez intéressant, je trouve.

2007/09/18: Replaced the broken link with an embedded you-tube video

flattr this!