[Fli4l_dev] Bufferbloat
Christoph Schulz
fli4l at kristov.de
Sa Okt 25 15:27:18 CEST 2014
Hallo!
Matthias Prager wrote:
> [...]
> Also pfifo_fast. Nun wird empfohlen den FQ-Codel zu nutzen:
> > sysctl -w net.core.default_qdisc=fq_codel
> sysctl: short write
>
> Ich gehe mal davon aus, dass der nicht in den Kernel mit rein kompiliert
> ist. Spricht etwas dagegen, diesen Scheduler aufzunehmen? (Um ihn später
> evtl. zum default zu machen)
(1) Wenn der Scheduler nicht der Default-Scheduler ist, dann wird das seine
Gründe haben. Bitte bedenke, dass die selbstlernenden Algorithmen nicht
100%-ig sind, also auch ihre Schwächen haben. Bedenke auch, dass der fli4l
ein breites Anwendungsprofil hat -- er wird nicht nur für superschnelle
Leitungen (VDSL) genutzt, sondern auch für langsame (ISDN); für Leitungen
mit niedriger Latenz (DSL) und mit hoher Latenz (UMTS). Solche
spezialisierten Algorithmen gehen i.d.R. von bestimmten Voraussetzungen aus,
für die sie optimiert sind. Somit ist ein "one size fits all"-Ansatz von
vornherein zum Scheitern verurteilt. Der von dir verlinkte Artikel enthält
den Satz:
"Unfortunately, the default queuing discipline cannot be changed, since it
will certainly disturb some user's workload somewhere."
Sogar die Befürworter von fq_codel sagen also, dass es negative
Seiteneffekte haben *kann*, wenn man wechselt.
(2) Der Scheduler wird übersetzt, allerdings als Modul. Du musst einfach nur
ein OPT bereitstellen, welches dem Nutzer eine Scheduler-Auswahl erlaubt,
das entsprechende Modul auf den fli4l kopiert und während des Boot-Vorgangs
das Modul aktiviert. Dann kann man auch den Scheduler an seine Bedürfnisse
anpassen. Mit einer abstrakten Profilauswahl wäre dem unkundigen Nutzer noch
besser geholfen (der Nutzer stellt also nicht "codel", "pfifo_fast" etc.
ein, sondern "DSL (langsam)", "DSL (FastPath)", "ISDN" etc. ein).
(3) Im Kontext von FFL-506 mit Multi-Circuit-Unterstützung wird ein
automatischer Wechsel des Schedulers je nach verwendetem Uplink-Circuit
interessant, oder eine gleichzeitige Nutzung mehrerer Scheduler für
unterschiedliche Schnittstellen (falls das geht).
(4) Was ist mit der Einbeziehung benutzerdefinierter Traffic Control-
Einstellungen (tc), wie sie z.B. vom qos-Paket vorgenommen werden? Immerhin
installiert qos die Scheduler HTB (Hierarchical Token Bucket) und SFQ
(Stochastic Fairness Queueing) -- warum also nicht das qos-Paket um CODEL
erweitern? Wie sehen mögliche Interaktionen zwischen qos und deinem
Vorschlag aus?
Wie du siehst, wird die Thematik beliebig komplex, wenn man sich die Mühe
macht, über alles einmal nachzudenken.
-----
> Eine weitere Geschichte wäre evtl. (ab Kernel 3.18) TCP Congestion
> control via DCTCP (Data-Center TCP). Momentan wird cubic verwendet:
> > sysctl net.ipv4.tcp_congestion_control
> net.ipv4.tcp_congestion_control = cubic
Auch hier ist ein sinnvoller Default gewählt worden.
>
> Wäre dann dieser Befehl (oder im Kernel als default einstellen):
> > sysctl -w net.ipv4.tcp_congestion_control=dctcp
Warum sollte man Data Center TCP als Default nehmen? Welche Anwendungsfälle
werden durch dctcp besser abgedeckt als durch cubic? Welche schlechter? Ist
für das Gros der fli4l-Nutzer cubic die bessere Wahl als dctcp? Wenn ja,
warum? Wenn nein, warum nicht?
"DCTCP is an enhancement to the TCP congestion control algorithm for data
center networks." (http://simula.stanford.edu/~alizade/Site/DCTCP.html)
Und weiter:
"Cloud data centers host diverse applications, mixing workloads that
require small predictable latency with others requiring large sus-
tained throughput. In this environment, today’s state-of-the-art TCP
protocol falls short. We present measurements of a 6000 server
production cluster and reveal impairments that lead to high applica-
tion latencies, rooted in TCP’s demands on the limited buffer space
available in data center switches. [...]"
(http://simula.stanford.edu/~alizade/Site/DCTCP_files/dctcp-final.pdf)
Nicht jeder fli4l (vermutlich kaum einer) steht in einem Data-Center-
Netzwerk als Router in einem Cluster mit 6000 Servern...
-----
Bei all solchen Dingen muss man eine vernünftige Analyse durchführen. Ein
"ich habe da mal einen Artikel gelesen" reicht einfach nicht aus.
Danke für die Denkanstöße. Dennoch würde ich mich eher über ein externes OPT
freuen, das bei entsprechender "Reife" und der Berücksichtigung der o.g.
Punkte auch integriert werden kann (z.B. in advanced_networking).
Viele Grüße,
--
Christoph Schulz
[fli4l-Team]
Mehr Informationen über die Mailingliste Fli4l_dev