Auteur Sujet: Quel "default_qdisc" : pfifo_fast, FQ_CoDel ou FQ ?  (Lu 1214 fois)

0 Membres et 1 Invité sur ce sujet

vivien

  • Administrateur
  • *
  • Messages: 47 217
    • Twitter LaFibre.info
Quel "default_qdisc" : pfifo_fast, FQ_CoDel ou FQ ?
« le: 13 janvier 2023 à 21:55:39 »
Quel "default_qdisc" : pfifo_fast, FQ_CoDel ou FQ ?

On a pas mal parlé de l'algorithme d'évitement de congestion TCP, Cubic vs BBR sur ce forum, mais pas du paramétrage du protocole de Queuing Discipline (qdisc), qui est complémentaire.

Une application transmet des données, le noyau prépare le paquet, le filtre et le place dans la file d’attente appropriée, le gestionnaire (via Le sous-système Linux Traffic Control ou TC) vide cette file d’attente et envoie sur la carte réseau en fonction de son algorithme interne. Pour être représentatif, le paramétrage du protocole de Queuing Discipline est lié à l’algorithme d’évitement de congestion.

• Serveur Cubic : Le protocole de Queuing Discipline utilisé est FQ_CoDel (net.core.default_qdisc=fq_codel - c’est la valeur par défaut dans de nombreux Linux).

• Serveur BBR : Le protocole de Queuing Discipline utilisé est FQ (net.core.default_qdisc=fq). FQ était recommandé par Google avec BBR au début. Je n'ai pas trouvé de recommandation récente. Il est possible qu'aujourd'hui BBR n'utilise plus qdisc et que cela soit intégré directement dans BBR.

Qdisc proposent plusieurs gestionnaires qui se chargeront de sélectionner le moment et quels paquets auront l’honneur de rejoindre la carte réseau, qui les enverra ensuite vers internet. En effet, quand le système a des paquets à envoyer, il ne va pas forcément les envoyer au débit maximum (10 Gb/s pour beaucoup de serveurs si la carte réseau est disponible). Certains gestionnaires peuvent avoir des classes, genre de liste d’attente qui stockeront les paquets à envoyer, le gestionnaire se charge alors de sélectionner la classe qui pourra émettre un paquet.

Pour afficher quel est le Qdisc sur un système, il suffit de faire cat /proc/sys/net/core/default_qdisc

vivien

  • Administrateur
  • *
  • Messages: 47 217
    • Twitter LaFibre.info
Quel "default_qdisc" : pfifo_fast, FQ_CoDel ou FQ ?
« Réponse #1 le: 13 janvier 2023 à 21:56:11 »
Les 3 Qdisc les plus utilisés sont :

- pfifo_fast, le plus ancien et le moins performant. fifo signifie First In First Out, c'est-à-dire que le premier paquet à entrer sera le premier à être envoyé. Ainsi, aucun colis ne bénéficie d'un traitement particulier.

- FQ_CoDel, recommandé avec Cubic aujourd'hui. CoDel (Controlled Delay) est une tentative de limiter le bufferbloat. CoDel permet de minimiser la latence dans un lien réseau saturés en distinguant les bonnes files d'attente (qui se vident rapidement) des mauvaises files d'attente qui restent saturées et lentes. Codel utilise des files d'attente équitables pour répartir plus facilement la bande passante disponible entre les flux. Les options de configuration sont intentionnellement limitées, car l'algorithme est conçu pour fonctionner avec des réseaux dynamiques.

- FQ, recommandé avec BBR qui gère les paquets de manière différente. À noter que FQ permet aussi d'améliorer les débits avec Cubic avec un réseau type celui de l'opérateur Free (BBR n'est pas seul, le Qdisc est important dans la différence Cubic / BBR observée chez Free).

D'autres existent : codel, sfq, cake, FQ-PIE,...


Le choix du Qdisc dépend des distributions Linux et de systemd : Depuis systemd 217, FQ_CoDel est la valeur par défaut :

- Red Hat Enterprise Linux 7, Ubuntu 14.04 LTS, Ubuntu 16.04 LTS, Debian 8, Debian 9, Debian 10, Debian 11, c'est pfifo_fast.

- Red Hat Enterprise Linux 8 et 9, Ubuntu 18.04 LTS, Ubuntu 20.04 LTS, Ubuntu 22.04 LTS et Debian 12 (encore en développement en janvier 2023), c'est FQ_CoDel.


Si je crée ce sujet ce soir, c'est que je m'aperçois qu'Ubuntu 22.10 est repassé à pfifo_fast !


$ cat /proc/sys/net/core/default_qdisc
pfifo_fast

Je pense à une erreur, mais si vous en savez plus, je suis intéressé.

Fyr

  • Abonné Free fibre
  • *
  • Messages: 865
  • Talissieu 01
Quel "default_qdisc" : pfifo_fast, FQ_CoDel ou FQ ?
« Réponse #2 le: 15 janvier 2023 à 14:39:13 »

- FQ_CoDel... en distinguant les bonnes files d'attente (qui se vident rapidement) des mauvaises files d'attente qui restent saturées et lentes.


C'est quoi la différence entre une bonne file d'attente d'une mauvaise ? Et c'est distingué sur quels critères ?

vivien

  • Administrateur
  • *
  • Messages: 47 217
    • Twitter LaFibre.info
Quel "default_qdisc" : pfifo_fast, FQ_CoDel ou FQ ?
« Réponse #3 le: 15 janvier 2023 à 20:11:34 »
Les critères d'une bonne file d'attente sont :
- Ne pas saturer les buffers, remplir des buffers ne permet pas un débit plus important et va rendre les connexions interactives très lentes, voire impossibles dans des cas extrémes
- Permettre un bon débit vers les connexions haut débit et donc en distinguant les bonnes files d'attente : en traitant différemment la bonne file d'attente et la mauvaise file d'attente, il permet de réduire les retards tout en autorisant des rafales de trafic.
- Il s'adapte à l'évolution dynamique des débits de liaison sans impact négatif sur l'utilisation.

« fq_codel », inventé par Eric Dumazet permet de réduire les retards de goulot d'étranglement de plusieurs ordres de grandeur et de fournir des estimations RTT précises aux flux TCP, tout en permettant un accès propriétaire aux paquets pour des flux plus courts (plus clairsemés) comme DNS, ARP, SYN, le routage, etc. C'est devenu le mécanisme de file d'attente par défaut pour Linux, et iOS et OSX.

« fq_codel » a un successeur crée en 2018, appelé « cake », qui traite quelques cas extrêmes de « fq_codel », et qui est meilleur dans tous les domaines.
=> https://www.bufferbloat.net/projects/codel/wiki/CakeTechnical/

cake et ses paramètres par défaut sont conçus pour fonctionner très bien en tant que qdisc par défaut quel que soit le débit de ligne sous linux, cependant, cake est beaucoup plus gourmand en processeur (et légèrement plus de mémoire) que fq_codel et donc il ne doit pas être le qdisc par défaut sur des vieux PC ou limité au niveau processeur (Atom, raspberry pi,...).

Fyr

  • Abonné Free fibre
  • *
  • Messages: 865
  • Talissieu 01
Quel "default_qdisc" : pfifo_fast, FQ_CoDel ou FQ ?
« Réponse #4 le: 15 janvier 2023 à 21:57:53 »
Merci

"Now the biggest challenge for the bufferbloat project is getting their solution deployed to the remaining billion or so routers on the Internet."

https://blog.apnic.net/2020/01/22/bufferbloat-may-be-solved-but-its-not-over-yet/

hwti

  • Abonné Orange Fibre
  • *
  • Messages: 2 237
  • Chambly (60)
Quel "default_qdisc" : pfifo_fast, FQ_CoDel ou FQ ?
« Réponse #5 le: 16 janvier 2023 à 00:41:33 »
Si je crée ce sujet ce soir, c'est que je m'aperçois qu'Ubuntu 22.10 est repassé à pfifo_fast !

$ cat /proc/sys/net/core/default_qdisc
pfifo_fast

Je pense à une erreur, mais si vous en savez plus, je suis intéressé.
Le kernel est toujours en pfifo_fast par défaut (sauf à changer la configuration).
En revanche systemd change pour fq_codel : https://github.com/systemd/systemd/blob/main/sysctl.d/50-default.conf#L48
Donc si tu as une installation qui a pfifo_fast, il faut vérifier :
 - l'état de systemd-sysctl.service (il devrait se lancer au démarrage)
 - le contenu des répertoires sysctl.d (/etc/sysctl.d/*.conf, /run/sysctl.d/*.conf, /usr/lib/sysctl.d/*.conf)
Et si vraiment tu ne trouves pas, tu peux faire un "grep -r default_qdisc /usr /etc".

vivien

  • Administrateur
  • *
  • Messages: 47 217
    • Twitter LaFibre.info
Quel "default_qdisc" : pfifo_fast, FQ_CoDel ou FQ ?
« Réponse #6 le: 16 janvier 2023 à 10:26:19 »
Le fichier en question est /usr/lib/sysctl.d/50-default.conf sous Ubuntu.

Problème : Ce fichier n'est plus présent avec Ubuntu 22.10 :
(test réalisé sur 3 systèmes différents, dont un avec une clean install sans aucun logiciel installé)
$ ls -l /usr/lib/sysctl.d/
-rw-r--r-- 1 root root  68 oct.  17 13:37 30-tracker.conf
-rw-r--r-- 1 root root 403 mai   11  2022 50-bubblewrap.conf
-rw-r--r-- 1 root root 635 août   8 11:10 50-pid-max.conf
-rw-r--r-- 1 root root 372 févr. 25  2022 99-protect-links.conf


Ubuntu 22.04 :
ls -l /usr/lib/sysctl.d/
-rw-r--r-- 1 root root 2037 sept.  9 20:47 50-default.conf
-rw-r--r-- 1 root root  635 mars  11  2022 50-pid-max.conf
-rw-r--r-- 1 root root  372 févr. 25  2022 99-protect-links.conf


Le fichier 50-default.conf proposé avec Ubuntu 22.04 :
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.

# See sysctl.d(5) and core(5) for documentation.

# To override settings in this file, create a local file in /etc
# (e.g. /etc/sysctl.d/90-override.conf), and put any assignments
# there.

# System Request functionality of the kernel (SYNC)
#
# Use kernel.sysrq = 1 to allow all keys.
# See https://www.kernel.org/doc/html/latest/admin-guide/sysrq.html for a list
# of values and keys.
#kernel.sysrq = 16 # Ubuntu uses /etc/sysctl.d/10-magic-sysrq.conf

# Append the PID to the core filename
kernel.core_uses_pid = 1

# Source route verification
net.ipv4.conf.default.rp_filter = 2
net.ipv4.conf.*.rp_filter = 2
#-net.ipv4.conf.all.rp_filter # Ubuntu uses /etc/sysctl.d/10-network-security.conf

# Do not accept source routing
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.*.accept_source_route = 0
-net.ipv4.conf.all.accept_source_route

# Promote secondary addresses when the primary address is removed
net.ipv4.conf.default.promote_secondaries = 1
net.ipv4.conf.*.promote_secondaries = 1
-net.ipv4.conf.all.promote_secondaries

# ping(8) without CAP_NET_ADMIN and CAP_NET_RAW
# The upper limit is set to 2^31-1. Values greater than that get rejected by
# the kernel because of this definition in linux/include/net/ping.h:
#   #define GID_T_MAX (((gid_t)~0U) >> 1)
# That's not so bad because values between 2^31 and 2^32-1 are reserved on
# systemd-based systems anyway: https://systemd.io/UIDS-GIDS#summary
-net.ipv4.ping_group_range = 0 2147483647

# Fair Queue CoDel packet scheduler to fight bufferbloat
-net.core.default_qdisc = fq_codel

# Enable hard and soft link protection
fs.protected_hardlinks = 1
fs.protected_symlinks = 1

# Enable regular file and FIFO protection
fs.protected_regular = 1
fs.protected_fifos = 1

hwti

  • Abonné Orange Fibre
  • *
  • Messages: 2 237
  • Chambly (60)
Quel "default_qdisc" : pfifo_fast, FQ_CoDel ou FQ ?
« Réponse #7 le: 16 janvier 2023 à 11:24:17 »
Le fichier 50-default.conf a été supprimé initialement en 2014 (Debian) : https://git.launchpad.net/~ubuntu-core-dev/ubuntu/+source/systemd/commit/?id=3e1bfe0d84545557d268c1293fff0d5f3db3b5c7.
Il a été remis (légèrement patché) en 2017 (Ubuntu) : https://git.launchpad.net/~ubuntu-core-dev/ubuntu/+source/systemd/commit/?id=7cd041a6d0ef459e4b2a82d8ea5fa1ce05184dfb.

Par la suite, ce n'est pas facile à suivre, parce que Debian le supprime toujours, donc ça dépend de comment les merges sont faits.
Sur Ubuntu, systemd 249.x avait toujours le fichier, mais systemd 251 ne l'a plus.
Je ne sais pas si c'est volontaire (se réaligner sur Debian), ou si c'est une erreur au moment d'un des merges.

vivien

  • Administrateur
  • *
  • Messages: 47 217
    • Twitter LaFibre.info
Quel "default_qdisc" : pfifo_fast, FQ_CoDel ou FQ ?
« Réponse #8 le: 16 janvier 2023 à 12:53:19 »
Debian ne souhaite pas mettre sysctl.d/50-default.conf, car le paquet systemd ne devrait pas changer les politiques du noyau, du moins jusqu'à ce qu'il devienne le seul système init supporté.
Cela semble être une bonne logique pour un système qui supporte d'autre init que systemd, systemd dans debian ne devrait pas changer les politiques du noyau, mais il faudrait mettre en place les paramètres par défaut optimisé quelque part... une alternative est de changer les valeurs par défaut au moment de la compilation dans les paquets du noyau Debian.

Je m'aperçois que Debian 11 est resté en pfifo_fast...


$ cat /proc/sys/net/core/default_qdisc
pfifo_fast


Il y a pourtant des demandes pour passer à FQ_CoDel :
- 2018 : https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=890343
- 2020 : https://lists.debian.org/debian-kernel/2020/04/msg00232.html
- 2021 : https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=890343#116

La version actuelle de Debian 12 (Bookworm), qui sortira dans quelques mois [edit] est bien en FQ_CoDel :



hwti

  • Abonné Orange Fibre
  • *
  • Messages: 2 237
  • Chambly (60)
Quel "default_qdisc" : pfifo_fast, FQ_CoDel ou FQ ?
« Réponse #9 le: 16 janvier 2023 à 13:59:00 »
La version actuelle de Debian 12 (Bookworm), qui sortira dans quelques mois, est encore avec pfifo_fast :
Ta capture d'écran montre au contraire qu'ils sont passés en fq_codel.
C'est d'ailleurs indiqué sur https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=890343#123, ils ont changé la configuration du kernel.

Pour Bookworm, le kernel 5.10 d'origine n'a pas été modifié.
En revanche, les kernels plus récents dans bullseye-backports ont fq_codel, par exemple https://packages.debian.org/bullseye-backports/linux-image-6.0.0-0.deb11.6-amd64-unsigned.