Optimisation dans CatchChallenger

0

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

0

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é.

Cotas LTDA + ntp

Hello,

ntp is dropped from Cotas LTDA in bolivia. Then I have used the ntp on the first router after my gateway to sync my. On http://www.cotas.com.bo/ no informations. For cotas cable modem I use 10.112.0.1, for general cotas user, you can try: 190.186.222.1, 190.168.210.1, 190.168.210.38 or the dns server found into your modem config.

Cheers,

Haswell

Salut,

Je viens de changer mon vieux core i5 750 contre un Intel haswell i5-4670 avec une ASUS B85M-G, je suis passé de 65W idle – 120W max, à 27W idle – 87W max.

Je viens de recevoir mon cubox i4 pro, donc je fait plein de teste, je vais pouvoir reconvertir mon RPI en programmateur de bios, et je tente de faire marché gentoo à la place de debian sur l’un de mes cubox i pour avoir un serveur de backup. Debian + xbmc debian semble être buggé, et l’installation de RetroPie meme avec des adaptations ne marche pas. J’aurai bien aimer avoir lecteur DVD, film + console de jeu retro. Je tenterai le noyau 3.14 qui supporte HummingBoard et cubox i, mais j’ai pas compris ce qu’il supportais précisment: affichage (drm + kms), boot, ethernet, eSata, …?

Bye

Quesqu’une bonne monnaie virtuelle?

Bonjour,

Avec les monnaies virtuelle 2.0 qui arrive, et tout les forks, j’en suis venu à me poser la question: Quesqu’une bonne monnaie virtuelle?

Je suis dans l’informatique (même dans l’e-commerce en partie), pas dans la finance. Je vie en Bolivie. Ce ci est donc mon point de vue personnel basé sur mon vécu. Petit précision pour bien me comprendre, en Bolivie, n’importe qui, qui peu ne pas payer ces impôts le fait, il y as énormément de disparité sociale, de violence gratuite, et un taux d’arnaque 10x plus grands que dans les pays européen.

Une monnaie utilisable

Avant tout la monnaie doit être utilisable, ça veux dire qu’un utilisateur lamba doit pouvoir envoyer et recevoir de l’argent sans grosse contrainte:

  • Transfère instantané
  • Pas temps d’attente pour installé le système (gros téléchargement) et système qui passe partout (pas 30Go de hdd pris et plein de cpu).

Les frais de transaction

Cette monnaie doit apporter un plus concret et effectif. Actuellement c’est les frais de transaction réduit, même à l’international.

Mais que sont ces frais? Que contiennent t’ils?

  • Le paiement d’un intermédiaire, avec les monnaies virtuelles il n’y en as pas. Ce qui représente une belle économie entre les ressources premières et le produits fini.
  • Les fonctionnements de l’infrastructure. Si faire marché l’infrastructure coûte 10 millions par ans, pour valider une transaction, les validateurs ne vont prendre que les transaction avec les fraits qui couvrirons leurs dépenses. Les PoW sont d’une inefficacité incroyable de ce coté (bitcoin, litecoin, …). Les nombres de confirmations consomment des ressources, je ne comprends pas pourquoi cela n’as pas été limité dés le début.
  • Frais de base pour éviter le DDOS. Pour éviter que quelqu’un ralentisse le réseau en envoyant sont argent d’une porte monnaie à l’autre sans arrêt, un frais de base est obligatoire pour épuiser sont porte monnaie. Si le réseau est 1000x plus performant, alors il faut 1000x de transfére pour saturé le reseau, les fraits peuvent donc être 1000x plus bas.

Confiance ou pas?

Beaucoup dise, il faut faire confiance au système. Je réponds au même titre, que dans ce cas, il n’y as pas besoin d’antivirus, https, code secret sur la carte bancaire.. car le système est fait par des pro…
Et non, le système doit prouver ça fiabilité (ouverture de code), ce qui induit la confiance. La confiance n’as jamais produit de la fiabilité. Quand je parle de système, je parle du code. Il ne faut en aucun cas devoir faire confiance à une personne ou groupe.
Si je garde de l’or chez moi, je n’est pas besoin de faire confiance à personne. Hors à la banque, l’or peu être pris (Chypre). En Bolivie, beaucoup de banque ferme régulièrement, et leur client perde tout l’argent sans conséquence pour les banques.
Quand je sort de l’argent du distributeur, je ne sais pas qui l’as installé ou construit. Mais le système me garantie dans une certaine mesure que l’argent vas sortir. C’est la même chose avec les monnaie virtuelle, je n’est pas besoin de savoir qui en son les auteurs. Qui se dit, je vais regarder les auteurs de mon navigateur web, et si j’aime pas une personne, je l’utiliserai pas…

Paypal 2?

Attention à ne pas tomber dans un paypal 2 ou carte bancaire 2. Le meilleur moyen c’est de bien analyser que le code garantie tel propriété, ou que des devs l’ont vérifié pour vous.

Ont peu imaginer une crypto monnaie ou le créateur décide arbitrairement de dividende qui lui sont versé. Au début (tout comme paypal), il vas mettre cela à 0. Même une fois le système utilisé par beaucoup de monde, il vas changer cela.

Un autre moyen de contrôler cela, c’est de contrôler le cour. (Les DDOS sont une forme de contrôle). Par exemple si le cour est contrôlé par les nombres de création de compte, je peu tricher sur le cour en créant plein de compte.

C’est un marché très juteux, beaucoup de personne de la finance s’y engouffre pour ce faire un l’argent (essaye d’embobiner les masses). Les autres essaye de luter.

Inflation ou pas inflation?

Si il y as de l’inflation, vous devez faire travailler votre argent. Si les dividendes sont directement versé par le système, vous garder X% de la richesse mondial dans tout les cas. Dans ce cas, ça ne fait que perturber les gens en changeant les prix dans un contexte d’économie stable et mature.

L’inflation est du aux prêts (des banques), cela permet au banque de créé de l’argent et de le prêter. Dans un contexte de crypto monnaie, l’inflation reviendrai à dire qu’il faut mettre sont argent dans une banque de crypto monnaie, et que la banque peu créé des crypto monnaie pour les prêter (vous voyez que l’argent est aussi virtuelle que les crypto monnaie, car c’est le système économique actuel que je viens de décrire).

Ce système de prêt n’est donc pas compatible si il n’y as pas de banque au dessus.

Répartition des richesses de début

Je pense que l’en gens ce focalise trop sur ce point. Il sont prêt à perdre en changeant tout le temps de cryto monnaie pour aller la ou il y as une répartition en leur faveur (ou plus équitable).

Il y as des tricheurs, c’est impossible d’avoir des puissances de hash prenant tout l’électricité d’un pays comme ont vois sur certain compte. Si vous forcer l’allongement de ce moment de répartition, plus vous favorisez les tricheurs. Lors de la rué vers l’or, le gouvernement américain n’as pas forcé la répartition de l’or, et il c’est diluer dans la population grace à son abondance et la loi de l’offre et la demande. Et tout le monde n’as pas tout lâché sous prétexte qu’il y avais de l’or à avoir.

Dans tout les cas, des personnes avides prendrons plus d’argent en exploitation les autres. Même à répartition égale. Donc, au même titre que les terres à l’aube des temps, une répartition égale ne veux pas dire la diminution des différences sociales.

La vrai richesse des crypto monnaies c’est cour-circuiter le système bancaire pour récupéré pour tout le monde l’argent qu’il ce font sur les transactions.

Système économique parfait: vainqueur!

Et non, comme nous montre l’histoire (tcp, l’eternet, ipv4, …), c’est pas le meilleur système qui gagne toujours. C’est dés fois le plus compréhensible par tout le monde (surtout utile pour les normes de communication), dés fois le moins chère. Mais dans bien souvent, c’est le plus populaire (média, informations/désinformations, …).

Donc même si vous avez trouvé le système parfait, ça ne veux pas dire qu’il sera celui vainqueur.

Place d’échange

Les places d’échanges vous permettent d’échanger votre argent. Certaines sont fiables, mais cela à un coût, d’autre non. Donc le faite de ne pas avoir des crypto monnaie leader, obligera par zone à utiliser des place d’échange, et donc de perdre de l’argent sur conversion. Car même si c’est très libre concurrence, pour limiter les abus, il faut payer serveur, la fiabilité pour avoir un tiers de confiance, … il existe des système sans tiers de confiance, mais vous pouvez tout perdre.

Donc ont y gagnerai tous à utiliser une crypto monnaie mondialement, même si ont as investi dans une crypto monnaie et qu’on c’est trompé.

Politique et idéologie

Beaucoup de personne mélange tout. Les suppositions économiques, étique, politique ne sont que des suppositions.

C’est bien de voir aussi cette partie la. Mais ne perdez pas de vu le plus important. De prendre les crypto monnaie pour ce qu’elle sont: un moyen commode et avec des frais minimums pour envoyer et recevoir de l’argent. En gros c’est du western union open source. Ça ne devrai ni être un outils politique, ni spéculatif.

dm-crypt vs ecryptfs, Tor vs I2P

Salut,

dm-crypt vs ecryptfs

Aprés pas mal de temps de pratique de ecryptfs et dm-crypt, je pense pouvoir vous en parler. Le mode de fonctionnement est trés différent. L’un crypte le volume (sdXY), l’autre les fichiers. Donc j’ai choisi dm-crypt pour mes volumes locale que j’utilise, car il est bien plus réactif que ecryptfs qui doit décrypter lentement chaque nom de fichier pour afficher le contenu du dossier, dm-crypt décryte d’un coup la table d’inode, et le dossier s’affiche d’un coup.

Par contre j’utilise ecryptfs pour exporter des backup crypté, cela le permet que si mon serveur de backup se fait espionner je ne risque rien. Et que les volumes sur mon serveur de backup peuvent être en claire (si non à chaque reboot je doit me logger, et monter mes volumes crypté).

Les pirates, espionnage de la vie privée par les états, … avec la sécurité, la sécurité des données, la cryptographie est devenu de plus en plus importante ces derniers temps.

Tor vs I2P

Tor crypte les routes, I2P les packets. Cela veux dire que Tor, c’est une serveur connecté sur un autre, si l’un des serveurs est déconnecté vous perdez la connexion, ce qui est très problématique pour des services où vous devez maintenir votre connexion tcp ouverte. I2P est du routage de packets, si un serveur ce coupe, le packet passe juste par un autre chemin, c’est le principe des routeurs sur internet. Tor est plus un réseau de proxy, I2P est un espace clot spécialisé dans les services caché (pas que les sites), moins de risque de fuite car utilisation d’un logiciel non adapté à l’anonymat, beaucoup plus de services possibles (dons le P2P qui ne gène pas le réseau). Vous pouvez utiliser votre client xmpp sur I2P (attention aux fuite d’intentité), il faut juste mettre le proxy socks 4/5 de I2P.

Hélas, même si je suis utilisateur de I2P, il reste quel défaut (corrigeable): Pas de chat P2P type TorChat accessible aux débutants (tu lance et c’est tout), routage perfectible et optimisable (surtout avec des serveurs avec de faible débit et forte latence). I2P étant pour l’instant moins connu, il y as moins de personne pour le financer et le développer.

User space vs Kernel space

Dans le noyau il n’y as pas les contrôles intensif qu’il y as en espace utilisateur. C’est plus dangereux, mais pour de petit fonction c’est acceptable. L’espace noyau (kernel space) vas être donc plus performant que l’espace utilisateur (user space) où s’exécute les programmes traditionnel.

Les testes que j’ai fait sur aes512 sont sans appelle (peu être que les optimisations assembleur sont moins poussé coté programme), 4-5x de performance en utilisant l’espace noyau via le crypto API de linux pour openssl et dm-crypt (partition crypté).

Et moi dans tout ça?

Ne faites pas l’amalgame, tout ce que je viens de parler plus haut, c’est au même titre que les anti-virus, anti-spyware, … des choses pour protéger les individus. Le cryptage, je l’utilise contre les voleurs, que suite à un vol AUCUN voleurs ne puisse accéder à mes données et clef ssh. I2P c’est plus pour naviguer sur un internet non censuré, pour le plaisir de parcourir le darknet, et parler de politique sans avoir de risque.

Hélas sur le darknet, le pire côtoie le meilleur. J’invite tout le monde à luter contre le pire coté du darknet (drogue, …), cela ne rendra ce réseau que plus légitime pour protéger les libertés individuelles. Aucun logiciel n’est sans faille, et n’est parfait, si vous attirez vraiment l’attention, tot ou tard ont vous piratera ou ont trouvera un moyen de découvrir votre identité (Superman/Batman, ont sais qui tu est), donc ne faite sur ces réseau, que ce que vous pourriez assumer publiquement ou devant un juge.

Bye, bon cryptage.

PS: j’ai installer un relay nextcoin sur i2p ns47dwjzxmg5xi747u3i4mzthmtnh7c5hyshfmtzvjaetf2mutha.b32.i2p si vous voulez dire merci, mon addresse nextcoin: 15504326669229103049

CatchChallenger et son datapack/db

Bonjour,

C’est quoi un datapack? C’est le pack de donnée contenant les données du jeux, les ressources si vous préférez. Pour CatchChallenger, c’est les monstres, les attaques, les images, les items et leurs utilisations, les maps, …

En comparant avec certains datapacks (PWO, PokeNet, Pokemium) pour faire des outils d’importation automatique, pour faciliter le passage sur mon jeu, je me suis rendu compte des problèmes des autres datapack:

http://catchchallenger.first-world.info/wiki/CatchChallenger_vs_other

Les traductions sont dans tout les coins (en plus de pouvoir avoir des choses sans traduction et des traductions qui ne sont relié à rien). Plein d’informations sont sortie de leur contexte, soit j’ai eu du mal à comprends ce que c’été, soit j’ai simplement pas compris. C’est souvent une simple liste d’éléments dans un fichier texte (par exemple ont sais même pas à quel map c’est relié, quel monstre, bot, …). Ça veux dire que si ont supprime un ligne, ça décale tout et tout deviens faux. Pour trouver certaines info sur les map, je doit résoudre la map avec son nom, puis de sont nom vers l’info, et donc si le nom change l’info n’est plus trouvable…

Vous aller me demander, mais quel format utilise t’il? Des fois des fichiers binaires, mais bien souvent un mix de fichiers textes de différents types: texte brute avec de simple retour à la ligne, des fichiers ini et des fichiers xml. Le tout en même temps, cela oblige de lire et de programmer de différente manière, cela est typique quand les développeurs ont beaucoup changé sur un même projet. La perte de performance lié au fichiers texte n’est pas important car tout datapack devrai (coté client et serveur) être chargé en mémoire et pas analysé en temps réel.

Avec CatchChallenger, c’est que du xml. Les traductions sont juste au dessous du texte en anglais (avec un lang= »fr » dans la définition de la balise), les attaques à apprendre pour les monstres sont dans la balise du même montres. Les ids sont la pour garder en base de données des nombres simple, minimiser l’espace en db, ne pas changer les références en cas de changement de nom, faire une indexation plus efficace. J’ai vu dans les autres datapack, qu’il y avais pas mal d’info que je n’utilisais pas, comme la classe, l’habitat, … informations que j’ai rajouter dans le xml car le format le permet. Et plus tard pris en compte dans l’application. Le faite d’avoir du xml permet d’organiser les items sous formes de liste mais aussi sous forme d’arbre, ce qui est trés pratique pour les données lié.

Le format des images est assez anarchique dans les autres datapack, elle n’ont pas le même centrage (raison?), certaines avec un fond transparent, d’autre avec un fond noir ou rose, … CatchChallenger supporte le gif, png et jpeg pour s’adapter aux images les plus diverses (jpeg pour les fonds d’écran, png pour les monstres en grands et miniatures, gif pour les miniatures et attaque animé), au choix de celui qui fait le datapack. Le datapack officiel à des images sur font transparent.

L’avantage lié à ces formats comme le xml, png/jpeg/gif (même si ce n’été pas recherché), c’est qu’il sont utilisable dans un navigateur, par exemple pour afficher comme je le fait actuellement sur le site officiel, les images des items/joureurs dans les pages web. Vous pouvez donc voir la partie statique du datapack, comme les informations en temps réél de la base de donnée.

Les données que j’ai vu sont buggées dans la plus part des datapack, même les liens entre les maps. Souvent car il sont à 2 endroits et qu’il ont été mise à jour des fois d’un coté, des fois d’un autre coté. Donc j’ai du coder un minimum de contrôle pour l’importation. Par exemple les attaques, il y as juste l’information power, et pas le changements de status si besoin, cela à cause du format ini pas adapté pour ça. Le xml permet des éléments optionnel, donc pour les bot de combats, ont peu spécifier ou non les attaques des monstres, pour les montres sauvage, ont peu soit ecrire le niveau min/max avec levelMin/levelMax ou un niveau unique avec level.

Dans la db, il stocke des données statique, statiquement, je m’explique… La maximum de vie est stocker sous forme de hp, donc si le datapack change le nombre de hp, il faut adapter toutes la base de données. En plus garder quelque chose en base de donnée alors qu’on l’as dans le datapack c’est bête, ça bouffe de la place en base de données. Dans ce cas, pour minimiser la base de donnée, j’aurai fait un type text, avec comme contenu: « HP:+50;SP:-10″. Cela permet de ne pas prendre de place quand il n’y as pas de bonus (90% du temps), et de s’adapter au contenu du datapack. Bien sur si un objet est tenu, il est mieux de calculer les bonus directement depuis l’objet, au lieux de stocker l’effet en db. Cela permet d’adapté l’effet, et de limité le nombre d’effet possible. Ensuite une bonne utilisation des types, tant coté C++ que coté db est important pour limiter la taille mémoire et disque, et les index pour obtenir rapidement les infos en gardant à l’espris qu’une db sera toujours lente (et donc avec un temps d’accès).

Le datapack de CatchChallenger est commun entre le client et le serveur. C’est le même. Cela veux dire que si des personnes essayent de m’attaquer juste pour me faire fermer ou pour essayer de me faire cracher du fric, chaque personne s’étant connecté sur un serveur précis, peu facilement remonté le même serveur avec le même contenu lui même, depuis chez lui avec se petit connexion adsl de campagne. Hors fichiers lourd (image, musique), 80% en balise, et 60% en volume sont commun entre le serveur et le client. Le serveur doit avoir la partie client pour que le client puisse télécharger le datapack pour jouer. Et la partie spécifique au serveur qui se retrouve sur le client est minime (<1%). Une grosse partie la pour pouvoir faire les calcules coté client et coté serveur. Car si c’est fait juste coté serveur, cela oblige d’avoir de RTT (round-trip delay time (RTD) or round-trip time (RTT)).

Grace à cela, je me prémuni aussi des fermetures arbitraire de mon serveur. Imaginons que X essaye de faire fermer mon serveur entier par ovh (donc avec Ultracopier, …). Juste parce-que cette personne dit que mon jeu est trop proche d’un autre. Pas grave, je peu l’héberger chez moi, chaque personne peu le reprendre en plus si besoin. Et donc mon serveur se retrouve avec juste des sites, pas le serveur de jeu, et ont peu donc rien lui reprochez. Cela permet aussi que chaqu’un dispose du datapack pour faire sont propre contenu, et donc cela ne limite pas la créativité.

Apparemment PWO, PokeNet, Pokemium, ont été codé par des amateurs (comme beaucoup de petit jeux et de jeux de fan). Sur l’implémentation c’est pas grave car ça peu facilement être changer. Par contre sur le protocole et le datapack cela est fortement handicapant. Le protocole permet une bonne réactivité, sécurité et communication. Et le datapack, d’être repris, modifié, …

Le projet avance, petit à petit. Vu que je le fait sur mon temps libre, il avance pas aussi rapidement que je le voudrai. Pour la version 0.2 beaucoup de changements ont déjà été fait. Mais le changement de moteur n’as pas toujours été fait (Qt -> Qt Quick 2 pour accélération matériel, scripting, …). La roadmap est défini, et sera surement publié pour la sortie de la version 0.4. Avec la 1.0 prévu pour fin 2014 au pire.

Mantle d’amd

Bonjour,

Mantle d’AMD, c’est la nouvelle API qu’AMD veux pousser, ayant des implications commerciales et financière, je m’en méfie. Le principe ce n’est pas de facilité comme OpenGL, mais bien mettre le développeur à sa place, c’est à dire qu’il fasse le travail qui doivent faire, et qu’il ai tout les éléments en main pour le faire. Je suis 100% d’accords avec cela, surtout si ont peu garder OpenGL.

Un développeur qui juste alloue la mémoire, y accède puis la désalloue, c’est facile pour lui, mais il as pas conscience de l’emplacement de la mémoire, des latences, … alors que si ont lui fait charger la mémoire depuis le CPU vers le GPU, il vois ce qu’il fait, il as conscience de la latence (passé par le PCIe), ce qui lui permet de mieux coder. C’est la 1ere fois que un grands s’intéresse à la partie logiciel/algo qui est une grosse partie des performances, autant voir plus que le hardware. La puissance des pc est régulièrement doublé, et pourtant les logiciel/OS ne vont pas 100x plus vite qu’il y as 15ans (ça serai même le contraire). Par contre OpenGL contrairement à DirectX, permet des extension personnalisé, et donc d’exposé des truc de teste, ou spécifique aux matériel, contrairement à ce que j’ai cru lire que critique Mantle.

Attention tout de même à la sécurité, car l’accès aux matériel trop brute est mauvais coté sécurité si ont donne les accès au application. Je m’explique, si pour gagner en performance un laisse l’accés au disque brute car le FS (ntfs, ext4) est trop lent, oui, si le développeur est compétant il peu gagner en performance. Mais il à accès à tout, une application même en utilisateur normale, pour lire/écrire sur le hdd comme un administrateur car la gestion des droits ce fait coté FS, et donc il saute cette gestion des droits.

Sous linux nous avons Gallium3D, qui correspondrai à Mantle, qui lui n’est pas exposé directement à l’espace utilisateur si je ne me trompe pas. Par contre OpenGL comme Gallium3D sont libre, pas de grosse limitation, tout le monde peu participer, faire un driver, mettre en commun le travail. Je ne serai pas surpris si, comme par hazard AMD qui bosse sur leur driver livre Gallium3D, nous disait que Mantle viens de la, ou à un lien. Libre veux dire potentiellement que ce n’est pas limité à une platforme (console, pc, téléphone).

Pour toujours vous donner un exemple avec le FS. Si le FS est lent, c’est pour une raison (goulot d’étranglement, mauvaise organisation des accès disques). Sauter le FS permet de contourner cela, mais tout le monde doit coder plus, ne pas tomber dans les mêmes erreurs que le FS, … alors qu’il serai mieux de corriger le FS pour que tout le monde en profite. Je pense la même chose que Gallium3D/Mantle, donner accès au couche basse permet de contourner les lenteurs des couches hautes correspondante, mais ce qui vas être fait en attaquant directement les couches basses, doit être reporté tant que possible dans les couches hautes.

AMD annonce 10x en performance contre un algo OpenGL directement optimisé. C’est possible, j’ai vu assez souvent ce genre d’optimisation entre du C/C++ correcte et de l’assembleur. Par contre avec du C/C++ optimisé et pas juste correcte (utilisation en plus de tout les mots clef et autre optimisations fourni par le compilateur), l’écart diminue. Par contre je pense que la partie super-scalaire du au très grands nombre de cœur des carte graphique n’est pas exploité correctement. Donc la différence serai la même que entre du C mal fait et de l’assembleur. C’est un peu comme utiliser du multi-thread pour en utiliser, sans faire gaffe de pas faire trop de communication entre les cpu. Ca optimise mais ça tire par vraiment partie du multi-coeur. Encore pire avec une carte graphique. Je demande à voir en pratique avec un moteur déjà bien optimisé type Unreal engine 4. Si ça ce confirme cela veut dire aussi qu’il y as encore du chemin pour que les couches hautes exploite correctement le GPU. Mais je crois, qu’on peu écrire des shaders spécifique (assembleur pour carte graphique), plutot que de faire des shaders compilé. Mais même sur les shaders compilé avec LLVM, c’est de mieux en mieux, mais il y as encore du chemin.

Donc pour résumer rapidement mon point de vue: Attention au grande annonce qui pourrai être la juste pour remettre à flot AMD, attention à la sécurité, attention à la licence, mais concept intéressant si vraiment ça se traduit par des performances, et dans ce cas, optimisé mieux les couches au dessus, et changer si besoin les API au dessus.

Bye

Compression de données pour l’envoi en ligne

Bonjour,

Je vais vous parler de la compression de données pour avoir sur la destination une arborescence. Cela peut être mis en parallèle avec l’html (page web), qui elle aussi a besoin d’avoir une arborescence de fichiers chargé coté client pour fonctionner. La compression de données est là pour que les données mettent moins de temps à télécharger. Mais le temps n’est pas que le temps de téléchargement, c’est temps de téléchargement + temps de compression + temps de décompression (que j’oublie car coté client, et donc par fait une une machine avec concurrence des ressources).

La compression ajoute une taille fixe (un entête) aux données. La grosse majorité des compressions ne commence à être efficace qu’à partir de 100 octets, mais n’est vraiment intéressante qu’après 15Ko. Pour on choisira une compression lourde, plus les tailles de début de compression, et compression optimal seront grosse (avec xz par exemple). De ce fait, compresser un fichier non compressible, ne fera que lui rajouter de la taille. Vous devez donc filtrer ce qui doit être compressé ou pas.

En fonction de votre protocole, les fichiers non compressés peuvent être envoyés à la queue ou dans un block. Dans mon cas, les fichiers sont assez petits <100octets, mais très répétitifs. La mise dans un block (suite binaire des données des différents fichiers), permet de tirer avantage de la compression sur ce genre de fichier. Mais la où l’on pouvait faire simplement un cache par fichier (pré-compresser le fichier, et renvoyer ceux-ci sur demande), c’est plus difficile car la compression et sur plusieurs fichiers. Certains choisiront de compresser dynamiquement à chaque fois. D’autres mettront un cache, car comme moi, le téléchargement du datapack ce fait soit depuis le début, soit depuis la mise à jour, donc la majorité des fichiers envoyés seront contenu dans les mêmes listes. La gestion du cache, ou même de la compression dynamique doit être bien faite car cela rend sensible votre serveur aux attaques DDOS.

Comme dans une page html, les fichiers de mon datapack sont liés entre eux. Les compresser ensemble permet de compresser la référence « toto » dans tout les fichiers d’un coup, ce qui rend la compression encore plus efficace. Or le protocole http actuel (le 1), ne fait pas ça (en plus de compresser en gzip), ce qui fait perdre beaucoup de bande passante.

Pour éviter le transfert et la compression de données inutiles sur le datapack, les ressources sont préalablement bien compressées (ogg en mono dans mon cas, quantization des fichiers png /!\ trés important, …). Je peux aussi virer tout les caractères utiles que pour la compréhension humaine des xml (indentation, retours à la ligne, …), mais qui peux être inversé.

J’ai aussi passé de la définition d’action sur fichiers de 8Bits à 1Bits pour avoir un minimum de compression naturelle, efficace sans compression, ou avec compression légère (gzip/zlib). Cela est applicable à tout. Par exemple pour l’envoi des déplacements des joueurs, il n’y a pas de compression car les données sont censées être toutes aléatoires. Et le reste compressé par le protocole: pas de nom de map, mais un id (de 8 ou 16Bits).

Au final, cela me permet de reduire la taille du datapack original de 4Mo à 200Ko transféré max sans les musiques.

Voila pour la compression des données pour la transmission dans vos applications.

Server Ssl avec Qt

Bonjour,

Il n’existe pas d’exemple en Qt5 de serveur Ssl, et encore moins officiel (alors qu’il y as bien un exemple de client). J’ai donc luté pour faire le miens, et voila:

QSslServer::QSslServer(const QSslCertificate &sslCertificate,const QSslKey &sslKey)
{
    this->sslCertificate=sslCertificate;
    this->sslKey=sslKey;
}

void QSslServer::incomingConnection(qintptr socketDescriptor)
{
   QSslSocket * socket = new QSslSocket;
   socket->setSocketDescriptor(socketDescriptor);
   socket->setPrivateKey(sslKey);
   socket->setLocalCertificate(sslCertificate);
   QList certificates;
   certificates << sslCertificate;    socket->setCaCertificates(certificates);
   socket->setPeerVerifyMode(QSslSocket::VerifyNone);
   socket->ignoreSslErrors();
   socket->startServerEncryption();
   connect(socket,static_cast &errors)>(&QSslSocket::sslErrors),this,&QSslServer::sslErrors);
   addPendingConnection(socket);
}

void QSslServer::sslErrors(const QList &errors)
{
    int index=0;
    while(index(QObject::sender());
    if(socket!=NULL)
        socket->disconnectFromHost();
}

J’espère que cela vous sera utile. Bye.

Go to Top