{"id":201,"date":"2021-03-16T18:34:12","date_gmt":"2021-03-16T17:34:12","guid":{"rendered":"http:\/\/www.fabidouille.com\/?p=201"},"modified":"2021-03-16T19:16:08","modified_gmt":"2021-03-16T18:16:08","slug":"ameliorer-sa-connexion-le-retour-tuning-multipath-tcp","status":"publish","type":"post","link":"https:\/\/www.fabidouille.com\/?p=201","title":{"rendered":"Am\u00e9liorer sa connexion, le retour (tuning MultiPath TCP)"},"content":{"rendered":"<p>Bonjour \u00e0 toi, puisses tu \u00eatre fid\u00e8le lecteur ou pas.<\/p>\n<p>Un petit post pour partager quelques exp\u00e9rimentations faites \u00e0 la va-vite quand \u00e0 l\u2019optimisation des param\u00e8tres MultiPath TCP (via l\u2019interface propos\u00e9e par OpenWRT\/OpenMPTCPRouter).<\/p>\n<p>Voici sans tataouiner, comme diraient nos amis qu\u00e9b\u00e9cois, les r\u00e9sultats:<\/p>\n<p><a href=\"https:\/\/www.fabidouille.com\/wp-content\/uploads\/2021\/03\/Capture_3.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-203 size-full\" src=\"https:\/\/www.fabidouille.com\/wp-content\/uploads\/2021\/03\/Capture_3.jpg\" alt=\"\" width=\"1848\" height=\"795\" srcset=\"https:\/\/www.fabidouille.com\/wp-content\/uploads\/2021\/03\/Capture_3.jpg 1848w, https:\/\/www.fabidouille.com\/wp-content\/uploads\/2021\/03\/Capture_3-300x129.jpg 300w, https:\/\/www.fabidouille.com\/wp-content\/uploads\/2021\/03\/Capture_3-768x330.jpg 768w, https:\/\/www.fabidouille.com\/wp-content\/uploads\/2021\/03\/Capture_3-1024x441.jpg 1024w\" sizes=\"auto, (max-width: 1848px) 100vw, 1848px\" \/><\/a><\/p>\n<p>Alors \u00e9norme warning, le protocole ne rend en rien honneur \u00e0 la rigueur forg\u00e9e par plusieurs si\u00e8cles de sciences statistiques (pas de calcul de variance par dimension, pas d\u2019estimation d\u2019incertitude).<\/p>\n<p>Ceci dit, on pourra noter qu\u2019en g\u00e9n\u00e9ral un seul param\u00e8tre est modifi\u00e9 \u00e0 la fois, avec 3 tests cons\u00e9cutifs par test. Sauf exception, auquel cas on se retrouve dans une configuration d\u00e9j\u00e0 test\u00e9e (ou.. presque).<\/p>\n<p>Les tests ont \u00e9t\u00e9 fait de fa\u00e7on group\u00e9e, avec des conditions m\u00e9t\u00e9os similaires (important, car nous parlons d\u2019interfaces 4G).<\/p>\n<p>On force pour tous les runs le serveur speedtest auquel une CLI se connecte pour mesure.<\/p>\n<p>Si l\u2019on souhaite creuser la signification de quelques param\u00e8tres MPTCP, il y a la Source (<a href=\"http:\/\/multipath-tcp.org\/\">http:\/\/multipath-tcp.org\/<\/a>, par les auteurs contribuant dans le noyau Linux, malheureusement pas tout \u00e0 fait \u00e0 jour), ainsi que de nombreux blogs\/publications que l\u2019on peut d\u00e9nicher sur le net (<a href=\"http:\/\/staff.ustc.edu.cn\/~kpxue\/paper\/Sigcomm2019-p75-Han.pdf\">http:\/\/staff.ustc.edu.cn\/~kpxue\/paper\/Sigcomm2019-p75-Han.pdf<\/a>,\u00a0<a href=\"https:\/\/www.gitmemory.com\/marcschaller\">https:\/\/www.gitmemory.com\/marcschaller<\/a>,\u00a0<a href=\"https:\/\/hal.sorbonne-universite.fr\/hal-01382907v2\/document\">https:\/\/hal.sorbonne-universite.fr\/hal-01382907v2\/document<\/a>), dont les r\u00e9sultats ont parfois permis de limiter le champs d\u2019exploration pour nos petites exp\u00e9riences (notamment pour la combinatoire des \u201ccongestion protocol\u201d, avec certains comme\u00a0<em>balia<\/em>,\u00a0<em>olia\u00a0<\/em>ou encore\u00a0<em>wvegas<\/em>\u00a0clairement en retrait dans le cadre de ma double connexion 4g).<\/p>\n<p>Un point int\u00e9ressant, on pourrait tr\u00e8s clairement envisager l\u2019utilisation pertinente (pour une fois\u00a0\ud83d\ude09\u00a0) d\u2019apprentissage supervis\u00e9 (reinforcement learning par exemple) pour parcourir de mani\u00e8re non exhaustive la combinatoire, et de converger vers un objectif \u00e0 d\u00e9finir.<\/p>\n<h2>Mais oui, quel est l\u2019objectif?<\/h2>\n<p>Dans mon cas (multiplexage de connexions internet 4g pour t\u00e9l\u00e9travailler, essentiellement), l\u2019objectif est de minimiser la gigue (aka jitter en anglais) et le ping, pour rendre le plus agr\u00e9able possible les appels audio et vid\u00e9oconf\u00e9rences.<\/p>\n<p>Ensuite, il s\u2019agit de minimiser les pertes de paquets pour \u00e9viter de subites pertes de connections SSH ou VPN, par exemple.<\/p>\n<p>Enfin, avec une moindre priorit\u00e9, de maximer la bande passante en t\u00e9l\u00e9chargement (download et upload).<\/p>\n<h2>Succinte analyse<\/h2>\n<p>Le scheduler \u201credundant\u201d est \u00e0 \u00e9viter, il provoque un d\u00e9bit quasiment deux fois moindre que ses meilleurs comparses.<\/p>\n<p>M\u00eame sentence pour le pathmanager \u201cbinder\u201d, il est le seul \u00e0 \u00eatre accompagn\u00e9 de syst\u00e9matiques pertes de paquets.<\/p>\n<p>Il serait int\u00e9ressant de creuser l\u2019impact du nombre de \u201csubflows\u201d par couple d\u2019ip source\/destination, m\u00eame si l\u2019asymptote semble vite atteinte.<\/p>\n<figure class=\"wp-block-image is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.researchgate.net\/profile\/Savvas_Zannettou\/publication\/285458410\/figure\/fig4\/AS:643191468474376@1530360204549\/a-MPTCP-throughput-vs-number-of-subflows-per-pair-of-IP-addresses-in-DH-Jellyfish-and.png\" alt=\"a) MPTCP throughput vs. number of subflows per pair of IP ...\" width=\"425\" height=\"247\" \/><figcaption><a href=\"https:\/\/www.researchgate.net\/figure\/a-MPTCP-throughput-vs-number-of-subflows-per-pair-of-IP-addresses-in-DH-Jellyfish-and_fig4_285458410\" target=\"_blank\" rel=\"noreferrer noopener\">Source researchgate<\/a><\/figcaption><\/figure>\n<h2>Et le gagnant..<\/h2>\n<p>\u00e9tait le combo:<\/p>\n<p>path manager: fullmesh<\/p>\n<p>scheduler: ECF (a priori meilleur pour les liens \u00ab\u00a0a\u00e9riens\u00a0\u00bb comme la 4G)<\/p>\n<p>congestion control: mtcpdesync<\/p>\n<p>avec 2 subflow par pair d&rsquo;IPs.<\/p>\n<p>Les d\u00e9fauts \u00e9tant resp. fullmesh\/BLEST\/cubic.<\/p>\n<h2>Mais<\/h2>\n<p>Depuis l&rsquo;\u00e9criture originelle de cet article et l&rsquo;incendie d&rsquo;OVH qui a oblig\u00e9 une r\u00e9\u00e9criture (rapide, il faut dire) des derniers articles de ce blog, j&rsquo;ai d\u00e9couvert qu&rsquo;apr\u00e8s quelques heures, cette configuration mettait le VPS \u00e0 genoux.<\/p>\n<p>Apr\u00e8s quelques it\u00e9rations, en remettant la valeur par d\u00e9faut au param\u00e8tre \u201cfullmesh subflows for each pair of IP addresses\u201d, soit 1,\u00a0le retour \u00e0 la stabilit\u00e9 \u00e9tait atteint.<\/p>\n<p>&nbsp;<\/p>\n<p>D\u2019autres it\u00e9rations restaient toutefois n\u00e9cessaires. En particulier, comprendre d\u2019ou venait l\u2019effondrement en performance (empreinte cpu\/m\u00e9moire li\u00e9 aux subflows, effet collat\u00e9ral li\u00e9 \u00e0 du swap (si starvation m\u00e9moire..)..?).<\/p>\n<p><a href=\"https:\/\/www.fabidouille.com\/wp-content\/uploads\/2021\/03\/t\u00e9l\u00e9chargement01.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-232\" src=\"https:\/\/www.fabidouille.com\/wp-content\/uploads\/2021\/03\/t\u00e9l\u00e9chargement01-300x162.png\" alt=\"\" width=\"300\" height=\"162\" srcset=\"https:\/\/www.fabidouille.com\/wp-content\/uploads\/2021\/03\/t\u00e9l\u00e9chargement01-300x162.png 300w, https:\/\/www.fabidouille.com\/wp-content\/uploads\/2021\/03\/t\u00e9l\u00e9chargement01.png 306w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<h2>\u00ab\u00a0Conclusion\u00a0\u00bb<\/h2>\n<p>Les derniers essais fait sur un autre fournisseur VPS, avec 2 Go de RAM (plutot qu&rsquo;un seul), ainsi que l&rsquo;arriv\u00e9e d&rsquo;un nouvel algorithme de contr\u00f4le de congestion (bbr2 en beta), indique d\u00e9sormais le combo ECF\/bbr2 en combo gagnant.<\/p>\n<p>Avec les param\u00e8tres par d\u00e9faut:<\/p>\n<p><a href=\"https:\/\/www.fabidouille.com\/wp-content\/uploads\/2021\/03\/Capture_default.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-206 size-full\" src=\"https:\/\/www.fabidouille.com\/wp-content\/uploads\/2021\/03\/Capture_default.jpg\" alt=\"\" width=\"795\" height=\"821\" srcset=\"https:\/\/www.fabidouille.com\/wp-content\/uploads\/2021\/03\/Capture_default.jpg 795w, https:\/\/www.fabidouille.com\/wp-content\/uploads\/2021\/03\/Capture_default-290x300.jpg 290w, https:\/\/www.fabidouille.com\/wp-content\/uploads\/2021\/03\/Capture_default-768x793.jpg 768w\" sizes=\"auto, (max-width: 795px) 100vw, 795px\" \/><\/a><\/p>\n<p>Voici les r\u00e9sultats:<\/p>\n<p><a href=\"https:\/\/www.fabidouille.com\/wp-content\/uploads\/2021\/03\/Capture-1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-209 size-full\" src=\"https:\/\/www.fabidouille.com\/wp-content\/uploads\/2021\/03\/Capture-1.jpg\" alt=\"\" width=\"1373\" height=\"683\" srcset=\"https:\/\/www.fabidouille.com\/wp-content\/uploads\/2021\/03\/Capture-1.jpg 1373w, https:\/\/www.fabidouille.com\/wp-content\/uploads\/2021\/03\/Capture-1-300x149.jpg 300w, https:\/\/www.fabidouille.com\/wp-content\/uploads\/2021\/03\/Capture-1-768x382.jpg 768w, https:\/\/www.fabidouille.com\/wp-content\/uploads\/2021\/03\/Capture-1-1024x509.jpg 1024w\" sizes=\"auto, (max-width: 1373px) 100vw, 1373px\" \/><\/a><\/p>\n<p>Et avec le combo ECF\/bbr2:<\/p>\n<p><a href=\"https:\/\/www.fabidouille.com\/wp-content\/uploads\/2021\/03\/Capture002.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-211 size-full\" src=\"https:\/\/www.fabidouille.com\/wp-content\/uploads\/2021\/03\/Capture002.jpg\" alt=\"\" width=\"630\" height=\"863\" srcset=\"https:\/\/www.fabidouille.com\/wp-content\/uploads\/2021\/03\/Capture002.jpg 630w, https:\/\/www.fabidouille.com\/wp-content\/uploads\/2021\/03\/Capture002-219x300.jpg 219w\" sizes=\"auto, (max-width: 630px) 100vw, 630px\" \/><\/a><\/p>\n<p><a href=\"https:\/\/www.fabidouille.com\/wp-content\/uploads\/2021\/03\/Capture001.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-210 size-full\" src=\"https:\/\/www.fabidouille.com\/wp-content\/uploads\/2021\/03\/Capture001.jpg\" alt=\"\" width=\"1291\" height=\"724\" srcset=\"https:\/\/www.fabidouille.com\/wp-content\/uploads\/2021\/03\/Capture001.jpg 1291w, https:\/\/www.fabidouille.com\/wp-content\/uploads\/2021\/03\/Capture001-300x168.jpg 300w, https:\/\/www.fabidouille.com\/wp-content\/uploads\/2021\/03\/Capture001-768x431.jpg 768w, https:\/\/www.fabidouille.com\/wp-content\/uploads\/2021\/03\/Capture001-1024x574.jpg 1024w\" sizes=\"auto, (max-width: 1291px) 100vw, 1291px\" \/><\/a><\/p>\n<p>Des r\u00e9sultats excellents!<\/p>\n<p>Note, le passage a 2 fullmesh subflows par paire d&rsquo;IPs ne semble avoir aucun impact avec le nouveau VPS (2 vCores Intel Xeon E5-2690v3 + 2Go ram), alors au vu de l&rsquo;impact sur le VPS pr\u00e9c\u00e9dent, j&rsquo;ai d\u00e9cid\u00e9 d&rsquo;en rester \u00e0 la valeur par d\u00e9faut.<\/p>\n<p>Note 2, les IPs des VPS OVH \u00e9tant blacklist\u00e9s par de nombreux sites\/services (blink d&rsquo;Amazon par exemple), le passage au nouveau VPS (pulseheberg) \u00e9vite le param\u00e9trage omr-bypass, qui permet de garder l&rsquo;int\u00e9r\u00eat de la solution en toutes circonstances.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Bonjour \u00e0 toi, puisses tu \u00eatre fid\u00e8le lecteur ou pas. Un petit post pour partager quelques exp\u00e9rimentations faites \u00e0 la va-vite quand \u00e0 l\u2019optimisation des param\u00e8tres MultiPath TCP (via l\u2019interface propos\u00e9e par OpenWRT\/OpenMPTCPRouter). Voici sans tataouiner, comme diraient nos amis qu\u00e9b\u00e9cois, les r\u00e9sultats: Alors \u00e9norme warning, le protocole ne rend en rien honneur \u00e0 la&hellip;<\/p>\n<p><a class=\"more-link\" href=\"https:\/\/www.fabidouille.com\/?p=201\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-201","post","type-post","status-publish","format-standard","hentry","category-non-classe"],"_links":{"self":[{"href":"https:\/\/www.fabidouille.com\/index.php?rest_route=\/wp\/v2\/posts\/201","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.fabidouille.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.fabidouille.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.fabidouille.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.fabidouille.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=201"}],"version-history":[{"count":6,"href":"https:\/\/www.fabidouille.com\/index.php?rest_route=\/wp\/v2\/posts\/201\/revisions"}],"predecessor-version":[{"id":233,"href":"https:\/\/www.fabidouille.com\/index.php?rest_route=\/wp\/v2\/posts\/201\/revisions\/233"}],"wp:attachment":[{"href":"https:\/\/www.fabidouille.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=201"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.fabidouille.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=201"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.fabidouille.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=201"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}