In einem Szenario, in dem sich zwei Nutzer eine Internetleitung mit 1000kbit Sendeleistung teilen, sollen beide Nutzer zu jedem Zeitpunkt mindestens jeweils über 500kbit Sendeleistung verfügen. Einer der Nutzer verwenden zudem maximal 100kbit seiner Bandbreite für Internet-Telefonie, die restliche Sendeleistung für allgemeine Datentransportdienste verwendet. Abbildung 1 zeigt die entsprechende Hierarchie.

Der HFSC-Algorithmus ist in der Lage die beiden Ressourcen, Bandbreite und
Verzögerungszeit, getrennt zu behandeln. Hierfür nutzt der Algorithmus
für die Vergabe der Ressourcen das Modell der Service-Kurve. Eine
Service-Kurve S(t) repräsentiert die geleistete Arbeit (Service) in
gesendeten Bits zu einem Zeitpunkt t. Die Steigung der Kurve entspricht
der (Sende)-Rate.
Die Idee zur Beeinflussung der Latenzzeiten liegt in der Gestaltung der Service-Kurven der einzelnen Klassen. Erstellt man für die Voice-Over-IP Klasse eine zweiteilige, stückweise lineare Service-Kurve, deren erster Abschnitt eine Steigung von 400 kbit aufweist und 30 ms lange ist, und deren zweiter Abschnitt eine Steigung von 100 kbit aufweist, lässt sich die Sendeverzögerung auf 30 ms reduzieren. Dieser Gewinn von etwa 78 ms Verzögerungszeit geht jedoch zu Lasten der anderen Klassen, da zu jedem Zeitpunkt die Summe aller Kurven, die Service-Kurve der Leitung, also deren Gesamtkapazität, nicht überschreiten darf. In unserem Beispiel soll die verkürzte Verzögerungszeit für die Voice-Over-IP Klasse auf Kosten der Klasse für unspezifizierte Daten der Partei A gehen, deren Service-Kurve angepasst werden muss, um das globale Limit nicht zu überschreiten. Dadurch erhöht sich die maximale Sendeverzögerung dieser Klasse von 30 ms auf insgesamt 52,5 ms. Für reinen Datentransport, wie zum Beispiel FTP, spielt die Verzögerungszeit, im Gegensatz zu dem Datendurchsatz, der durch die Anpassung der Service-Kurve nicht beeinträchtigt wird, lediglich eine untergeordnete Rolle.

Ist beispielsweise die Datenklasse von Partei A bereits aktiv, so sendet diese mit maximal 400 kbit Pakete. Wird jetzt zu einem beliebigen Zeitpunkt die Voice-Over-Ip Klasse von A aktiv, so darf diese aufgrund ihrer Real-Time-Garantie kurzfristig mit einer höheren Rate senden (Abbildung 3). Dadurch summiert sich der Service für die Klasse A auf über 500 kbit, wodurch kurzfristig das Link-Sharing-Kriterium dieser Klasse verletzt wurde. Um langfristig jedoch auch die Link-Sharing Garantien einhalten zu können, wird die Klasse A für diese kurzfristige Überschreitung "bestraft".

tc qdisc add dev $dev root handle $ID: hfsc [default $classID ]
In einem zweiten Schritt wird die Klassenhierarchie durch sukzessives
Einfügen von Klassen erstellt:
tc add class dev $dev parent parentID classid $ID hfsc [ [ rt SC ] [ ls SC ] | [ sc SC ] ] [ ul SC ]
Die speziellen Eigenschaften einer Klasse werden durch ihre Service-Kurven (SC)
festgelegt, die sich als
SC := [ umax bytes dmax ms ] rate BPS
beschreiben lässt. Klassen auf den untersten Hierarchie-Ebenen können sowohl
eine Real-Time Kurve (rt) als auch eine Link-Sharing Kurve (ls)
zugeordnet werden, inneren Klassen nur Link-Sharing Kurven. Mittels der ul
Service-Kurve lässt sich eine obere Leistungsschranke für jede Klasse definieren.
Alternativ kann statt zwei identischen rt- und ls-Kurven auch nur
eine sc-Kurve angegeben werden.
Eine Service-Kurve wird durch die (Sende)-Rate (rate) beschrieben, die
der ihrer Steigung entspricht. Soll die Kurve aus zwei Teilstücken bestehen,
kann durch dmax die maximale Verzögerungszeit für eine bestimmte
Sendeleistung umax angegeben werden.
# Beispiel aus Abbildung 1.
tc qdisc add dev eth0 root handle 1: hfsc
tc class add dev eth0 parent 1: classid 1:1 hfsc sc rate 1000kbit ul rate 1000kbit
tc class add dev eth0 parent 1:1 classid 1:10 hfsc sc rate 500kbit ul rate 1000kbit
tc class add dev eth0 parent 1:1 classid 1:20 hfsc sc rate 500kbit ul rate 1000kbit
tc class add dev eth0 parent 1:10 classid 1:11 hfsc sc umax 1500b dmax 53ms rate 400kbit ul rate 1000kbit
tc class add dev eth0 parent 1:10 classid 1:12 hfsc sc umax 1500b dmax 30ms rate 100kbit ul rate 1000kbit