Le mot du blog : QoS i'm in too deep…

Pré-requis :

kB/s = kilobYtes per sec = Ko/s = kilo-Octets par secondes = unité qu’on l’aime fort

kb/s = kilobItes per sec = kbps : kilobite par seconde = à diviser par 8 pour avoir des ko/s  = aussi une unité très utilisé en réseau devenue de la branlette marketing de FAI.

 

Ce billet est la suite de mon exploration dans le monde de Tomato et du routeur WNR3500Lv2 sur lequel je l’ai posé. Cette fois on parle de qualité de service.

La qualité de service. Ca sert à quoi ? Pourquoi j’en veux ? Pourquoi t’en voudras ? Ca mange quoi l’hiver ?

 

Le cas concret :

Tu es en train de jouer à ton jeu préféré d’amour sur ta console ou ton PC. Quand SOUDAIN le lag de la mort. Quelqu’un ou quelque chose chez toi est en train de taper dans la BP ce qui fait tomber ton ping et génère le lag.

L’autre cas concret :

Tu télécharges un truc et quelqu’un ou quelque chose vient gueuler à raison que « Tu prends toute la bande passante petit enculé ! ». Dans le respect de la personne.

La solution : La QoS

Je t’emmène dans un univers aux problématiques que je trouve personnellement passionnantes mais qui peuvent te faire simplement chier. Je vais donc essayer d’être le plus didactique et distrayant possible pour ne pas te perdre jeune filou.

Le principe de base de la QoS c’est de séparer le traffic en classes suivant leurs destinations, fonctions, et typologies et d’appliquer des règles de priorisation que nous aurons définies au préalable. Par exemple, si on décide que le trafic prioritaire sur tous les autres c’est le surf, alors tu pourras foutre tous les DL que tu veux, dès que quelqu’un aura besoin de la BP pour surfer, ton DL sera relégué plus bas dans la pile de priorités et son trafic amoindris pour laisser de « la place » au surf.

C’est pas un peu magique et génial ça ?! Génial : Absolument. Magique : pas du tout, comme nous allons le voir dans la suite.

Ce que tu dois savoir

Sur un réseau, pour X kb reçus il y a Y kb envoyés. Avec Y < X sinon c’est complètement pas rentable et tu t’es bien fait niquer dans ton rapatriement de data.

Par exemple, à chaque fois que je reçois 100 Ko via les Newsgroups, j’ai envoyé 2 Ko pour les demander. Et c’est avec ces paquets envoyés (le upstream) qu’on va pouvoir travailler pour gérer au mieux notre bande passante.

Prenons une analogie d’un monde sans QoS avec une boite aux lettres pouvant contenir 100 plis postaux dont la livraison est assurée par les P&T :

Tu cherches une voiture. Tu demandes donc à 3 commerciaux de t’envoyer des brochures sur des voitures et ils t’envoient 10 brochures chacun (une par voiture) et chacune avec sa propre enveloppe (Bravo l’environnement putain ! ). Tu en reçois donc 30 dans ta boîte aux lettres quelques temps plus tard. Tu les lis et tu te dis tel un jeune insouciant  « Bah ça a été vite c’est cool ! J’vais en demander 10 fois plus ».

Du coup tu refais la même demande mais à 30 commerciaux. Bien que tu en attendes 300, tu as 100 brochures dans ta boîte aux lettres (saturée) quelques temps plus tard.

Bilan des courses jeune branleur :

  • En plus d’être complètement con d’en avoir demandé autant, tu te retrouves à devoir traiter tout ça avant de continuer à en demander d’autres ;
  • 200 brochures attendent pour arriver chez toi que tu vides cette boîte aux lettres ;
  • D’autres lettres n’ayant rien à voir ont pu t’être envoyées mais tu ne les as pas vu parce que le facteur voyant ta boîte au lettre pleine ne les a pas ajouté. Et il reviendra tenter de les déposer plus tard. Jusqu’à ce que ce soit possible. Ou qu’il en ait marre de venir pour rien.

On voit donc bien qu’avec une seule requête on peut tout faire péter à l’arrivée. Heureusement on va tout faire pour que ça n’arrive pas. C’est la promesse de la QoS.

Un autre point extrêmement important, c’est qu’on ne travaille jamais « Full Stream ». C’est à dire qu’on ne travaille jamais à capacité max d’une connexion que ce soit en UP ou en DOWN, même « pile » à 100%. La raison est très simple. Reprenons l’analogie de la boîte aux lettres et ton épisode des 300 brochures :

Finalement, avant même d’avoir jeté un oeil sur les 300 brochures tu te rends compte que c’est pas une voiture mais un camion qu’il te faut (T’aurais pu y réfléchir avant MERDE ! ). Du coup tu demandes à 3 commerciaux de fabricants de camions de t’envoyer des brochures (4 chacun). MAIS OUI MAIS NON MON P’TIT GARS !!! T’as 200 brochures de bagnoles dans la nature d’une précédente demande là ! Alors même si ce qui t’intéresse vraiment maintenant c’est les gros MionMions bah t’attendras d’avoir eu tes 200 autres brochures de bagnoles pour recevoir les 12 de MionMions !

Voilà, basiquement comment ça se passe dans un monde sans QoS : Par chronologie des demandes ; le TimeOut (la patience du facteur si tu préfères) faisant foi.

Si la QoS existait dans ce bas monde, on demanderait toujours moins d’infos que ce que peut contenir la boîte aux lettres (moins de 100 plis donc) pour que lorsque des enveloppes prioritaires arrivent elles puissent rentrer et que tu les choppes tout de suite. Et on aurait pas TF1.

Les autres trucs que tu dois savoir

La QoS n’est PAS une science exacte. On peut même assez facilement la qualifer de pute avant de l’aimer fort fort fort (Mein Göt !!!). Mais retiens que si ça merde c’est de ta faute et que tu ne pourras pas avoir une classification parfaite (ou tu mourras en essayant). Enfin, il n’est pas possible de télécharger à pleine blinde et d’avoir une QoS qui fonctionne. T’as un débit de 600 ko/s descendant ? TU NE POURRAS PAS AVOIR UNE QoS EFFICACE EN TELECHARGEANT A CETTE VITESSE. Clair ?!

Le concret, c’est du béton

Après ce trait d’humour incroyable, on va créer des classes. Les classes sont des catégories dans lesquelles on va mettre les paquets de trafic triés. Ici : Service, VOIP et jeux, Media, Admin à distance, Surf, Mail, Messagerie, Téléchargements (http), P2P et Newsgroups, le reste tout pourrave qu’on veut pas qui nous emmerde (avec un nom rigolo mais que j’aimerais quand même bien en avoir un peu).

QOS CLASS

Comme tu peux le constater, ces classes ont un ordre de priorités allant de 1 à 10. Ici par exemple, le trafic jeux vidéos est bien plus important pour moi que le téléchargement mais moins que Service (requêtes DNS, NTP etc). Ce qui signifie qu’en cas de besoin, le routeur baissera le trafic du DL pour laisser la place à celui du jeu. #PouceVertSitAimesCa

Donc le premier truc à faire c’est de réfléchir à ces classes pour avoir une « pile de priorités » ressemblant vaguement à tes besoins. Celle que j’ai fonctionne pas trop mal à part « Media » mais nous y reviendrons je l’espère pour en discuter.

Up & Down

Tu te souviens, au début du billet je te disais qu’on allait agir sur le flux en UP pour gérer aussi bien que possible ce qui nous était envoyé par la suite. Je t’ai aussi dit qu’on ne travaillait JAMAIS FULL STREAM ! Ni en up, ni en down. La première chose à faire donc, c’est définir quelle est la vitesse basse stable de ta connexion. Pour ça, il faut faire du speedtest encore et encore (sans charge par ailleurs) à différents moments de la journée (et de la semaine si on veut être complet). On prend alors entre 80 et 90% de la valeur la plus basse régulière et c’est avec ça qu’on va travailler. Je me répète, mais si tu veux pas faire ça sérieusement, la QoS ne fonctionnera pas. Point.

Dans mon cas j’ai relevé un up tout le temps à 5 Mbps et une valeur basse pour le down à 80 Mbps. J’utilise donc 4500 kbps en up et 70 000 kbps en down.

Outbound Rates : Le calcul du ratio.

Ok là on rentre dans le vif du sujet. Une fois logué dans ton Tomato, tu te rends dans « QoS » > « Basic settings ». Dans ce panneau, voici mon setup pour ma connexion et mes usages :

Outbound

Le pourcentage à gauche c’est le ratio entre les octets envoyés et les octets reçus. Et il est très important. Y en a beaucoup pour lesquels on va pas discuter. Elles se passent depuis des générations, d’admins réseau en admins réseau lors de rites initiatiques à la lumière blafarde des diodes clignotantes de switchs.

Elles ne sont pas de moi, elles sont connues, optimales pour ce type d’application.

Mais Il y en a une que je n’avais pas trouvé cependant c’est celle de la classe P2P/NG que je voulais spécialiser dans les NewsGroups. Alors comment j’ai fait pour partir sur 2% ?

Et bien, évidemment sans RIEN faire d’autre sur la connection, il suffit  de lancer un DL sans QoS et de regarder ce qui sort et ce qui rentre en retour. C’est aussi con que ça.

Voici le tableau dispo dans « IP Traffic » > « Transfer Rate » de ton routeur sous Tomato lors d’un DL limité à 500 Ko/s dans SabNZBD. On remarque que le MacMini (192.158.1.33) download à 561,69 Ko/s et upload à 11,89 Ko/s à cet instant précis.

Rate calc

Retenons 562 Ko/s en down et 12 en up si tu le veux bien. Si on fait un ratio, 562/12 = 46,8 . Retenons 47. Donc lors d’un download via les Newsgroups, le Mini reçoit 47 fois plus de data qu’il n’en envoie. Mais on a besoin d’une valeur sur 100. Donc combien d’octets envoyés pour en recevoir 100 ?

100/47 = 2,12

Retenons 2. TADAAAAAAA ! Pour recevoir 100 octets via les newsgroups, mon Mini d’amour doit en envoyer 2. Soit un ratio de 2%. Excellent. Tu refais tout ça sur une dizaine de mesures pour être sûr et hop !

 

Outbound Limits : Le calcul de la BP allouée (en plein air)

Dans le même écran où nous avons paramètré le ratio envoyés/reçus, il y a un autre pourcentage à saisir pour chaque classe. Ce pourcentage, c’est la part de la bande passante en UP que l’on accepte d’allouer à nos classes. Nous avons mesuré au préalable la valeur effective de notre BP globale en UP (5000 Kbps mesuré dans mon cas), nous en avons retiré 10 % et l’avons saisi dans « Max Bandwidth limit ».

Ce que nous allons faire c’est trouver le meilleur compromis acceptable pour la classe concernant les NewsGroups. Si j’autorise 30% de la BP en UP à être utilisée pour les NewsGroups, alors ça veut dire que je peux avoir 30% de 4500 kbps qui partiront pour ça. Comme on sait que j’aurais en retour 47 fois plus (ratio des Newsgroups de 2% je te le rappelle) combien je me mange à l’arrivée ?

30/100*4500*47 = 63,5 Mbps = 7,9 Mo/s

Ce qu’il faut retenir, c’est qu’il faut des règles pour le flux en UP que ta connexion peut encaisser en DOWN. Ici pas de problème. 63,5 Mbps, c’est dans les 70 de ma connexion. Mais admettons que je sois un tout petit peu plus gourmant et que je décide de passer à 40 % de ma connexion en UP. 10 points de plus c’est pas bien grave hein !

FAUX PETIT IMBECILE !

40/100*4500*47 = 84,6 Mbps = 10,5 Mo/s

C’est trop. On est au delà de mes 70 Mbps assurés.

On ne travaille jamais FULL Stream !

Là je te vois venir jeune foufou. Tu va me dire que je pourrais taper encore 6,5 Mbps avant d’atteindre ma limite de 70. Tu as raison, mais on ne travaille jamais Full Stream. Si je le faisais, je pourrais me retrouver dans la situation de la boite au lettre pleine. Et je veux pas parce que ça ralentit la connexion pour toutes les autres classes, même celles qui sont prioritaires. C’est également une des raisons pour laquelle nous allons mettre en plus une limite à l’entrée.

Inbound Class Limit

Inbound class limit

QUOI !? Depuis le début on fait rien qu’à se faire chier à calculer des ratios à la con et tout alors qu’on peut brider tout ce bordel à l’arrivée ?

Absolument. Est-ce que c’est ce qu’on veut ? Non.

Si on limitait uniquement les vitesses à l’arrivée, on vivrait exactement l’expérience de la boîte aux lettres. Tout arrive pleine balle et on en jette au fur et à mesure en demandant à ce qu’on nous le renvoit plus tard. D’un point de vue général, c’est pas une bonne pratique. Il y a de la BP de ton FAI qui est gachée. Tu vas me dire qu’on s’en fout. Soit.

Mais si on faisait uniquement une bride à l’arrivée, on aurait pas l’adaptabilité en temps réel de la QoS. Si tu autorises les DL à débarquer à 500 Ko/s sur tes 600 disponibles, et que tu demandes à charger une vidéo sur Youtube, il n’y aura pas de priorisation. Au mieux au bout d’un moment ton Youtube et tes DLs feront moit-moit. Et une fois ton Youtube fini de chargé, les DLs repartiront à 500 Ko/s. C’est pas ce qu’on veut. Là on veut que les DL ferment bien leurs gueules quand on à besoin d’une grosse charge pour Youtube ou du surf. Et que ça se fasse tout seul.

Cependant, la QoS n’est pas une science exacte. Il se peut que « un peu plus de paquets » passent et donc que « un peu plus de paquets » rentrent. C’est comme ça on peut rien y faire et c’est normal. C’est pour cela qu’on va quand même poser une bride à l’arrivée avec le Inbound Class limit. Rien de sorcier ici, juste dire combien max à l’arrivée une classe peut prendre.

En plus de ne pas devoir mettre 100% il faut cependant faire attention à un point :

Veilles à ce que les limites que tu poses ici soient supérieures ou égales à ce que tu obtiens en théorie avec les règles que l’on a définie précédemment.

Exemple :

En théorie, grâce à mes règles sur le UPstream,  je ne peux recevoir plus que 30/100*4500*47 = 63,5 Mbps pour les Newsgroups. Et du coup, comme je pose une bride à l’arrivée à 66,5 , tout va bien.

Tu remarqueras que dans mon setup que ce n’est pas toujours le cas. En fait c’est pas *très* grave pour le traffic très segmenté (mail, petits fichiers d’une page web, message dans un logiciel de messagerie etc…) Mais ça peut poser de GROS problèmes avec du trafic peu segmenté comme le téléchargement P2P, NG ou le direct download (de bon gros fichiers des familles si tu préfères).

En effet, si tu demandes plus que ce que tu ne laisses entrer en permanence pour ce type de trafic, tu vas te retrouver avec un routeur en train de « lâcher » en permanence des datas et demander qu’on les lui renvoie. Des paquets renvoyés qui vont s’ajouter à ceux légitimement demandés (mais en trop grand nombre). En plus de te retrouver avec un trafic pas vraiment efficace ton routeur vas « loader » sa mère. En effet, ce dernier a un petit processeur et en fonction de la vitesse de ta connection, gaspiller du trafic arrivant, ça peut vite lui demander énormément de boulot. Il en résultera que tout ce qui est lié au réseau ramera.

Ce dernier aspect m’a tenu deux jours avant que je comprenne ce qui se passait. Plus pouvoir charger Google alors qu’à côté, on télécharge pas à 100% de la connection ça fait bizarre. Bah ça vient de ça 🙂 .

Maintenant qu’on a conceptuellement fait le plus chaud, dans un prochain billet, on va voir comment faire en sorte que le routeur comprenne ce qui lui passe entre les mains. En gros : comment lui faire comprendre que « ça c’est des Newsgroups, ça c’est du surf, ça c’est de la VOIP… » pour qu’il puis le classer et le prioriser correctement.

6 commentaires

  1. phishlite dit :

    T’es mon dieu… Non sans déconner, je recherchais tout ça depuis 2 mois pour gérer correctement transmission sur mon Qnap (et accessoirement éviter de me faire démonter par ma femme qui veux surfer correctement…) \o/

  2. Fran6LaSau6 dit :

    La QoS j’avais déjà vu ce terme quand j’allais dans ma jeunesse, tripatouiller dans ma vieille box club-internet mais sans avoir la curiosité de savoir ce que c’était, peur de tout flingué normal! Déjà que ça marchait pas en temps normal sans rien toucher…
    Mais en fait ça dépote carrément, bon après je sais pas si ça vaut vraiment le coup quand t’as une connec qui plafonne qu’à 600ko/s max, si? Histoire d’être sur avant de me lancer sur ma vieille box connectée à ma Freebox (qui passerait en bridge du coup).

    Sinon j’ai une autre question, ton routeur Netgear une fois que tu lui à claqué le firmware Tomato est-ce que tu peux lui foutre directement un VPN dans la tronche, j’veux dire est-ce qu’il inclut une sorte de client VPN qui tourne et change l’IP WAN pour tout le réseau de la baraque?

  3. Fran6LaSau6 dit :

    Bon pour le VPN j’ai eu ma réponse en fait suffisait que je bouge mon cul sur le site de MyOpenRouter et regarder le contenu de la version Shibby AIO 😉 et on voit client OpenVPN (la crème pour les VPN)!
    Wahou je sens que je vais pas tarder à craquer!

  4. Eric dit :

    :D.

    Oui. Cependant je te mets en garde, après avoir discuter avec le support de Giganews (vyprVpn) apparemment, au moins an PPpT le clien est pas très stable.

    T’as l’air d’être plus sur OPEN VPN mais je te le dis quand même 🙂

  5. Fran6LaSau6 dit :

    Ok tu t’es même renseigné, Klakass le super informaticien! ^^
    ben si veux j’utilise déjà VyprVPN en openvpn avec le soft viscosity et aucun soucis y’a pas de raison que ça foire j’me dis avec le netgear… mais malgrés ce qu’ils t’ont dit tu as essayé de tester ton vpn en pptp avec tomato?
    Après golfenfrog fournit tout ce qu’il faut pour l’openvpn (certificats) si tu pouvais essayer pour moi par la même occasion :p

  6. benJenSaisRien-:) dit :

    bonjour
    bravo pour le tuto excellent
    puis-je vous demander de le mettre à jour : de nouvelles dispositions semblent exister maintenant on ne parle plus de download mais de fileXter et autres bizarreries.
    serait-il possible de savoir comment dresser les priorités ?
    Ainsi sur le tomatousb128 un autre tableau est apparu qui détermine les priorités
    mail est en « priorité classe 6 »
    alors que « crawl » est en classe 10, la dernière
    on trouve messenger en classe 7 alors que microsoft l’a abandonné
    n’est-ce pas paradoxal ?
    comme tu l’as dit très justement Eric est informaticien donc il comprend ce que tu veux faire
    moi je ne suis qu’un « misérable insecte » qui essaie de comprendre les implications de telle ou telle action sur le tuto.
    S’il est bien pratique,
    en retour, je ne vois pas pourquoi telle ou telle décision a été prise au détriment d’une autre…
    Attention : ce n’est pas un cours qui est demandé ( ce n’est ni le site, ni l’endroit)
    mais simplement afin de comprendre pourquoi tu mets en nolimit www et pas les mails – que j’aurai mis personnellement bien plus bas en pourcentage.

    voilà
    ceci étant dit le tuto m’a grandement rendu service.
    Donc merci de tout coeur

Commenter





Page optimized by WP Minify WordPress Plugin