Odroid u3

0

Hello,

How to

Cut one wire of power source, connect your 2 wire of you ampermetter to the 2 part of one wire, take care to be in 10A mode to don’t burn the fuse.

Result

Here you have the power consumption on 5V line (then without the adaptador power, I have used an DT-830B):

ODROID-GameStation-Turbo-0.10_20140525-X
4 thread: 1.42A, 7.1W
1 thread: 0.75A, 3.75W
0 thread: 0.58A, 2.9W
99°C max temp

USB not work, then my usb joystick not work, 100% at all time.

It’s just crazy in fonction of ubuntu server:

4 thread: 1.20A->1.46A, grow slowly and after is random: 6-7.3W
1 thread: 0.48A, 2.4W
0 thread: 0.29A, 1.45W
85°C max temp

Only use micro SD card, network (1000Mbps), no thing more. No HDMI, no sound, …

Cheers,

Kernel 3.10 ipv4 performance

Hello,

You have here for 3.10 kernel the performance on lo (127.0.0.1) via iperf of different hardware:

  • Fit pc1 Geode lx800 @500Mhz: 828Mbits/sec, 1.6Mbits/sec/MHz
  • Cubox-i4 pro, iMX6 quad @1000MHz: 2.16Gbits/sec, 2.16Mbits/sec/MHz
  • Fit pc2, Intel Atom z530 @1600MHz: 3.05Gbits/sec, 1.9Mbits/sec/MHz
  • Intel Haswell Core i5-4670 @3400MHz: 36.7Gbits/sec, 10.8Mbits/sec/MHz
  • Intel Core2Duo P8600 @2400MHz: 3.79Gbits/sec, 1.6Mbits/sec/MHz

Note: ARM need of of optimisation in kernel and in compiler to be exploited.

Have good day.

Technologie utilisé dans CatchCallenger

Manipulation du buffer réseau

0 copy

La technologie 0 copy technologie est un moyen pour ne jamais copier un buffer dans un autre (bien sur qu’en interne ont ne peu y échapper, par exemple pour transférer le buffer de la carte réseau jusqu’au programme). Vous déplacez seulement le curseur sur les données et vous controlez les données. Aprés vous pouvez:

  • Isolez le code principal et retournez les données comme une structure
  • Directement tout passer comme une structure

La structure de donnée est exclusivement de taille fixe car les tailles dynamique exige pointer et copie mémoire. (Et vous ne pouvez pas envoyé un pointeur au travers du réseau)

Si une donnée est supérieur à 8Bits, alors vous devez corrigez l’endianness, cela coute principalement des petites transactions mémoire.
Cela est pour envoyer des commandes avec des arguments temporaires. Les données persistantes ont besoin d’être stocker et donc n’autorise pas le 0 copy. Vous devez les garder quelque part car le buffer vas être purger.

SIMD

Sur Arm c’est neon, sur x86 c’est SSE-X, AVX-X. Pour en savoir plus, voir: http://en.wikipedia.org/wiki/SIMD
Ils permettent de copier un block mémoire avec une seuls instruction, c’est plus puissant qu’une boucle car cela exploite mieux le hardware sans avoir besoin d’utiliser les capacités de Vectorization du compilateur, voir: http://en.wikipedia.org/wiki/Vectorization_(parallel_computing)
Si une plage d’octet est valide, vous pouvez avoir un structure similaire as: 99x8Bits dans le buffer,  »’vous pouvez utiliser memcpy() pour transférer une plage d’octet directement depuis le buffer sur la structure »’.
Si une donnée est supérieur à 8Bits, alors vous devez corriger l’endianness, cela coute principalement des petites transactions mémoire. Voir le déserialiseur.
Cela est plus orienté pour le stockages des données mais peu être utilisé avec des données temporaire dans certains circonstances..

Déserialiseur

Cela est plus lent que le SIMD, mais cela est adapté pour les stockages d’informations qui doit être traités. Par exemple en chaine qui doit être transformer en pointeur + taille (mix avec les SIMD arrive souvent), vous devez changer l’Endianness pour la plus part des entiers, …
Priviligez de démarrer avec les adresses basses (buffer[0]) jusqu’au adresses haute (buffer[99]) pour améliorer les performances.

0 Allocation mémoire

La plus par du temps, n’ayez pas d’allocation mémoire, ou dans le pire des cas sur la stack. Grace à un protocole binaire, une taille fixe, un buffer permanent pour déserialiser les données est une bonne solution.
Toutes les opérations réseau lourdes comme le chargement du datapack peuvent être externalisé. Sur des serveurs hautes performances seul le trafic utile est envoyé et reçu, il y as donc de meilleur latences et un serveur plus légé, …

Binaire

Le texte peu être utile pour débugger, mais il utilise beaucoup de réseau et ressources.
Moins d’un accès sur un millards sur http est lu directement depuis le dump réseau (par des hackers, admin réseau, développeur -> vous devez avoir le niveau pour travailler avec, au même titre que manipuler des images/videos), cela veux dire que le reste du temps les ressources sont consommés sans raison, un protocole http binaire serai afficher de la même manière que le protocole http text dans un navigateur.
Pour utiliser les données « Data: 654654″‘ vous devez extraire « 654654″ (vérifier la longueur, faire une allocation dynamique) puis  »’le convertir en nombre »’. En binaire faite juste une copie (a=b;) et corriger l’endianness si besoin. ce qui est beaucoup plus puissant en binaire. La negociation du protocol en binaire été de 66 octets, en binaire elle est seulement de 5, avec un gain de 50x d’utilisation du cpu sur les opérations de lecture et comparaison.

Anti DDOS et cout de l’infrastructure

Toutes ces technologies et un bon usage du compilateur comme -march=XXX, permette d’être anti-DDOS par nature car cela permet de supporter un grand nombre de requêtes par seconde. Cela minimise le cout de l’infrastructure, autorise un jeu moins chère, plus de serveur pour les joueurs. Cela est donc plus dur à DDOS, C’est aussi plus facile à administré.

Epoll

Epoll est utilisé pour résoudre le problème C10K. Le serveur peu facilement supporter beaucoup de joueur sur un ordinateur de 25ans. Il ne saute pas la couche tcp du noyau pour fonctionner correctement en para-visualization, mais un bonne optimisation permet de résoudre le problème C10M sur un bon hardware.

Plugin

La plus par des parties standard comme la visibilité sur la map, base de données sont dans des classes et géré comme des plugin pour être changé, testé et benchmarké facilement.
Les plugins des bases de données en mode texte demande beaucoup de conversion du text vers des entiers (utilisation du cpu sur le serveur), la manipulation des chaines due à SQL prends aussi beaucoup de cpu/memoire/allocation mémoire aussi, et finalement la base de données sur le même serveur consomme aussi des ressources.
Inclut avec index et optimisé, la base de données est largement la partie la plus lente du serveur (tant coté cpu, memoire que IO disk), c’est pourquoi les requêtes sont asynchronisés.

Traduit de: http://catchchallenger.first-world.info/wiki/Technologies_used

Note: le protocole ftp en plus d’être text oblige de supprimer le contenu des dossiers pour supprimer ces dossiers. Vous passez donc de l’envoie de quelque octet et quelque ms 0 des Mo et des minutes heures pour supprimer les gros dossiers… Et vous contourner toutes les optimisations des FS sur la suppression des dossiers…

Wikibooks

Bonjour,

Je tiens a vous faire découvrir wikibooks, c’est une version livre de wikipedia, c’est a dire que l’information n’est pas dans des articles lier avec des liens, mais grouper dans des livres avec des chaphitres. Telechargable au format eBook et PDF.

Bye

Datacenter in bolivia (santa cruz)

Hello,

I can setup datacenter in bolivia santa cruz, tell me if you are interrested. Is very usefull to have low latency in bolivia.

The hardware configuration (by bulk):

  • Dual/Quad, 2GB DDR3, 16GB SD (10$/month, installation 60$) with storage extention SSD/HDD at the price of it
  • Octa core CPU, 2GB DDR3, 32GB SD (15$/month, installation 150$)
  • 48 Core, 128GB DDR4, 240GB SSD or 3TB HDD (50$/month, installation 1200$)
  • More hardware is available on ask. Add the hardware cost to the installation cost.
The connexion:
  • 50KB/s, 512Kbps, with rendudency in option (25$/month)
The server is lxc container instance, you can be alone on your hardware, or shared with other to have lower cost.
In case of bulk command, we can have lower cost (mostly on internet part).
Cheers,

cubox i power consumption

Hello,

How to

Cut one wire of power source, connect your 2 wire of you ampermetter to the 2 part of one wire, take care to be in 10A mode to don’t burn the fuse.

Result

Here you have the power consumption on 5V line (then without the adaptador power, I have used an DT-830B):

- 1.35W at idle (0.27A)

- 3.9W at full (0.78A)

- 0.8W at idle without ethernet cable (0.16A)

- 0.9W at idle with ethernet speed 100Mbps (0.18A)

Is into server node, then no X, CAAN, console only, all kernel module disabled when device not used. Only use micro SD card, network (1000Mbps), no thing more. No HDMI, no eSata, no sound, governor « conservative », …

Factor

The electronic factor is voltage for the major part,  and frequency. That’s mosly depend of CMOS nm process. After the power gating allow part of chip to be disabled.

iMX6 seam to be 40nm, hardware limits: 396 MHz – 996 MHz900mV - 1.5V0.75mm2.

The big.LITTLE allow cut down the power because send the work to small CPU to allow the big cpu (and power hungry) to be down, and the power gating shutdown it.

Cheers,

Ssl et serveur de MMORPG

Bonjour,

Je suis en train de mettre en place l’infrastructure pour commencer dans la prochaine version le supports des clusters.

L’overhead (qui est assez couteux sur http1) de la couche Ssl est peu important sur un serveur de type MMORPG car il garde la connexion ouverte. Par contre, à cause des petits packets envoyé à intervalle éloigné (ont de peu donc pas les grouper), la couche Ssl deviens extrêmement lourde. Le ralentissement vis à vis d’une connexion en claire est de 24x sur un Intel haswell (avec prise en charge matériel).

Les syscall pour les events des trames réseaux sont trés correcte et ont un coût minimum car il sont multipléxé sur epoll avec linux. Ca semble un peu du bricolage pour les timers, … je veux même pas voir d’autre syscall… Par contre une lecture/écriture sur un socket = un syscall, ce qui peu devenir très lourd rapidement. Une suggestion sur le problème C10M est de by-passer le noyau, cela oblige de ré-implémenté TCP, c’est trop dangereux et dur pour être fait (hors mit cas spéciaux). Par contre un syscall pour multipléxé les entrées/sorties sur socket peu être utile.

Comment bien découper votre serveur pour avoir un cluster de serveur? Déjà il faut l’avoir bien optimisé pour maximiser le ratio utilisateur par serveur/nombre de serveur. Car le mode cluster à un cout. Ensuite balancer via un round-robin dns sur plusieurs frontaux (cela permet de s’affranchir de HAPROXY, ou tout autre système qui serai à notre charge et moins fiable). Hors mit les clients, les frontaux doivent avoir le minimum de connexion, alors n’utilisez pas de maillage, mais une structure de serveur en arbre. Dans le cas de CatchChallenger cela vas être une connexion pour la base de données, et une connexion pour un serveur racine (chargé de broadcast, ou de passé le client sur un autre serveur via reconnexion pour séparer les serveurs: une groupe de serveurs = un groupe de maps dans la même zone). La découpe vas influer fortement sur votre cluster, spamer des threads dans tout les sens et n’importe comment vas ralentir votre serveur (apache worker vs nginx/lighttpd). Je vous conseiller d’attaquer votre db en asynchrone, et qu’elle ai plusieurs frontaux. Vous pouvez coder la communication inter-serveurs en claire, et faire des tunnels de communications crypté via openssl pour sécurisé l’échange. Cela permet un maximum de performance sur un réseau de confiance, et de la sécurité sur internet.

Ssl fourni une compression activé par défaut. Je trouve cela assez mauvais, car la compression devrai être séparé de la cryptographie. Pour une question de sécurité, mais aussi de fléxibilité: toutes les formes de compression ne sont pas disponible (xz), et certain protocole comme CatchChallenger à sa propre compression adaptative interne qui est bien plus efficace. La compression devrai être donc si disponible, désactivé par défaut (bien que mon opinion n’est pas tranché sur ce point). La compression, même gzip/zlib doit avoir au moins 100 octets pour être efficace, hors la grosse majorité des packets de CatchChallenger fait moins de 6 octets. Et le reste est compressé…

J’espère vous avoir aidé.

Sécurité de serveur I2P

Bonjour,

Vous vous êtes peu être un jour demander quel sécurité il faut pour un serveur I2P (hidden service). Voila une serie de technique qui vont vous aider:

  • Monter votre serveur dans un machine virtuel sur un volume crypté. Cela permet de prévenir qu’un accès directe à votre matériel ne vous trahisse. Cela veux dire que vous ne pouvez pas démarrer votre serveur virtuel au boot, car cela voudrai dire stocker la clef privé dessus, et donc l’encrypté ne servirai à rien… Vous devez à chaque fois donner votre mot de passe pour lancé la machine.
  • Pour le noyau Linux, Grsec + Pax avec PAX_MEMORY_SANITIZE sont une bonne idée pour l’hôte et l’invité.
  • Monté 2 machines, votre machine guest1 qui aurai tout vos services en écoute (serveur) sur une ip interne non accessible de l’extérieur, mais accessible depuis le guest2. Votre guest1 ne doit pas avoir accès à internet, pour éviter de révéler votre ip (et donc identité) si l’un des services hébergé est piraté. Et votre guest2 à un accès complet à internet, pour ce connecté à I2P en hidden, puis ce connecté sur vos services cachés.
  • Testez votre sécurité: Si des informations filtre tel que le serveur http utilisé, la date/heure si elle n’est pas synchronisé avec internet via ntp, si les services cachés sont bien bloqué de l’extérieur, …
  • Il est préférable de désactiver tout ce que vous n’utilisez pas (gentoo est très utile pour cela): php (utilisez du statique tant que possible), TLS heartbeat, … et bien regarder pour n’avoir que le strict minimum. Idem pour les services/serveurs lancé. Mais aussi pour le noyau.
  • Il suffit que une petite informations filtre pour vous trahir. Il peu être donc trés utile de travailler en équipe, et que vos confrère essaye de brisé votre sécurité régulièrement.
Bonne chance.

 

Optimisation dans CatchChallenger

Salut,

J’ai fait de grosse optimisation dans CatchChallenger. J’ai composé le packet pour ensuite l’envoyer sur chaque client au lieu d’envoyer les variables et que chaque client compose le même packet. Cela donne un gros coup de boost sur les fonctions de type broadcast.

Ensuite j’ai fait une boucle ou j’appelle tout les clients, et j’ai connecté un QTimer dessus. Cela est bien plus efficace que de connecté ce timer sur chaque client (8x de performance).

Moins vous allez accéder à de grosse quantité de mémoire, plus il vont tenir dans un cache CPU performant, et donc vous allez gagner en performance (évitez d’allouer la mémoire aussi, si non RTT), sur mon haswell (pris grace à memtest86+):

  • 64Ko L1 202 427Mo/s
  • 256Ko L2 52 675Mo/s
  • 6144Ko L3 37 592Mo/s (répartie entre tout les cpus)
  • 8239Mo Mémoire 9 375Mo/s
Autant vous dire tout de suite, les performances pour un serveur MMORPG même bien fait, c’est:
  • à vide (<20 joueurs) utilisation du L1 trés performant
  • charge moyenne (<100 joueurs) utilisation du L2/L3
  • à forte charge (>2000 joueurs) utilisation de votre mémoire bien lente même si vous avec GDDR5/DDR4 avec un grosse fréquence en comparaison des caches interne (surement dans ce cas que votre config tirerai partie d’un mémoire rapide)
Et pourtant je fait passé sans problème le serveur de MMORPG sur un Intel Atom ou un Cortex-A9 à 1Ghz avec 6000 joueurs (charge simulé en les répartisant sur map map, avec les pires réglages, en débug, et avec génération de chat, déplacement, …). Hors mit les hash qui peuvent être consommateur de CPU, le reste de mon code utilise des variables/tableaux de variable avec presque aucun calcule dessus, donc le temps est passé à attendre la mémoire.
Pour finir, je constate même à l’heure actuelle, 99% du temps pris pas la gestion des events de Qt. Je ne sais pas encore si il y as un truc à faire pour mon cas (pas mal d’objet connecté entre eux pour un même client), ou si je vais devoir m’orienter vers un autre système d’event et donc réseau (boost?).
Limiter la fragementation mémoire aide à avoir des création d’objet et allocation mémoire plus rapide.
Bye,

Squashfs vs tar.xz

Bonjour,

Vous allez peu étre un jour vous demander la différence entre Squashfs et un tar.xz… Voila la réponse.

Squashfs est compressé par block, ce qui permet de seeker (sauter) d’un endroit à l’autre, comme sur un disque dur. Et donc d’aller lire et décompresser que certains fichiers que vous être en train de lire. Très utile pour stocker un OS, ou un site. Le taux de compression est donc moins bon.

Le tar.xz compresse toutes les données dans l’ensemble. Vous devez donc tout décompresser pour lire quelque fichiers. Pour un live CD, cela veux dire que vous devez décompresser tout le contenu en mémoire vive pour l’utiliser. Utile pour l’archivage, ou l’ont doit tout décompresser à chaque fois. Mais le taux de compression est optimal.

Pour juste les html pris du site bulbapedia:

  • Non compressé: 4500Mo et 43000 fichiers
  • squashfs: 194Mo
  • xz compression 6: 141Mo
  • xz compression 9: 93Mo

En espérant vous avoir éclairé.

Go to Top