Title: Le Routeur Programmable Click
1Le Routeur Programmable Click
- Présentation de Click Routeur Programmable
Logiciel - MIT 2003
- Toujours maintenu (vour site Web
http//www.pdos.lcs.mit.edu/click - Diverses fonctionnalités
- efficace
- Trouver exemples Click sous users/enseig/genius/
click-1.4.3/elements
2Qu est-ce Click ?
- Routeur programmable
- Acheminer les paquets vers la bonne sortie en
faisant ou non des traîtements - Quelques fonctinnalités de base (regroupés dans
les éléments de Click briques de base) - Analyse de len-tête
- Mécanisme de branchement
- consultation d une table de routage
3Historique
- MIT puis Berkeley 2000-??
- Thèse de Eddie Kohler dirigé par Robert Morris et
Frans Kaashoek - Implémentation dun routeur Multiprocesseur
- annoncé dans un article by Benjie Chen et Eddie
Kohler - limplémentation na pas été rendu publique
4Le Langage CLICK
-
- Décrire l'architecture d'une application de
routage des paquets - Language haut niveau, simple, configurable et
efficace - Configuration
- langage fonctionnal
- Elements Classes C, Ports
- Paramétres de configurations
- Méthodes d'interfaces
- Paquets
5Le Langage CLICK
- Connections
- définissent un graphe orienté
- lient les éléments entre eux en passant d'un port
de sortie a un port d'entrée. - Exemple Syntaxe FromDevice(eth0) -gt Counter -gt
Discard
6Quelques simples éléments
- branchement sans modification du paquet tee
- Modification de len-tête strip(8) enlève 8
bits - Vérification de len-tête Check IP header
- CheckIPHeader(18.26.4.255 1.255.255.255)
Port dentrée
Ports de sortie
Chaîne de configuration
Port dentrée
Strip(8)
Port de sortie
Chaîne de configuration
7Communications en CLICK
- Technique de transfert de paquets entre éléments
- PUSH L'élément source initie le transfert paquet
et l'envoie à l'élément destination (downstream). - PULL L'élément destination initie le transfert
paquet en demandant a
l'élément source de retourner un paquet
(upstream). - Implémenté par des appels de fonctions virtuels
efficacité - Il y a trois classes des connecteurs PUSH,
PULL et AGNOSTIC. Cette dernère change le
caractère de ses ports pour sadapter aux
élements précédents/suivants mais doit être push
ou pull pour tous les ports dun élement - Transition push-pull, pull-push Fifo
8Communications en CLICK
Contrôle du flot de paquets
9Les Fifos de CLICK
- Stockage des paquets FIFO
- Elément Queue (elements/stadard/queue.hh)
- Port d'entrée de type PUSH
- Port de sortie de type PULL
- FIFO non bloquante en écriture
- Indique qu'elle est vide aux éléments concernés
- Indique l'arrivée du premier paquet aux éléments
concernés - Jète des paquets selon une politique définie
(dropping policy)
Queue
10Interdits de Click
- cet image comporte 4 erreurs
- sortie push de FromDevice est connecté à lentrée
pull de PullDevice - sortie push de FromDevice comporte plusieurs
connexions - plusieurs connexions aboutissent à lentrée de
ToDevice - élément agnostique dans un contexte push/pull
- limage d en bas est correct
- la file compense le différence de contexte
11Conçevoir des éléments
- Cest du C
- Attention aux appels des fonctions virtuelles
- Exemple Code C pour lélément vide
12Un élément composé
- Modularité par moyen de C
- Enfilement juste stochastique (stochastic fair
queueing) composé de - élémént de base HashSwitch
- élément de base RoundRobin
13Sources et cibles de traffic
- InfiniteSource
- RatedSource
- FromLinux
- FromDevice
- Discard
- ToDevice
- Voir documentation sur les éléments (il y
manquent quelques-uns) et éléments fournis avec
la distribution
push
push
14Flow-based router context
- Recherche en largeur/en profondeur danns le
graphe des configurations - Extension importante de la communication par
appel des fonctions virtuels - Important entre autres pour RED dropping
- Robuste en absence des cycles
- Permet entre autres
- de suivre le chemin des paquets
- de notifier du côte de la fifo lélément
précédent du fait de sa remplissage
15Politique des Fifos (Dropping Policies)
- Les fifos sont évidemment non-bloquantes ceci
est une assumption de base dans le monde des
réseaux - Jeter des paquets
- en-tête de la fifo
- à la queue de la fifo
- Stratégies de dropping fournies
- RED (Random Early Detection) Dropping laisser
tomber un paquet au choix - Weighted RED les paramètres indiquent les
priorités différentes
16Un Simple Classifieur
- Trois priorités
- Jeter des paquets selon la stratégie RED
- cherchez l erreur
17Ordonnancement en Click
- Deux stratégies sont implementées parmi des
éléments - Round-Robin
- Priority-based
- Des stratégies plus compliquées sont imaginables
mais pas implémentées
18Ordonnancement en CLICK
- Ordonnancement les initiateurs sont
ordonnancés - Algorithme d'ordonnancement Stride scheduling
- Un élement qui initie de façon autonôme une
requête PUSH ou PULL est ordonnancable et doit
être mis dans la file d'attente - Tous les autres éléments sont ordonnancé
implicitement - En général, un programme Click s'éxecute en un
seul thread - Un appel à une méthode PUSH ou PULL doit
retourner à son appelant avant qu'une autre tâche
ne commence
19 Algorithme déterministe
d'ordonnancement des tâches
Stride Scheduling
20Routage IPv4 en Langage Click
- Analyser une configuration déjà existante
- Algorithme de Routage IPv4
- Le Langage Click
- Communications en Click
- Ordonnancement en Click
- Protocole de résolution d adresses ARP
- IPv4 codé en Click
- Evaluation
21Un premier routeur IPv 4
22Algorithme de Routage IPv4
- Enlever un paquet de la file de sortie
- Vérifier si il sagit version 4 ou 6
- Vérifier laddresse destination
- Vérifier checksum
- Stocker champ checksum et effacer
- En-tete prise comme serie des entiers 16 bit
- Calculer complement-1 du complement-1 de la somme
de ces entiers - Comparer a la checksum
- Lookup route
- chercher laddresse destination dans table de
routage - Recupérer laddresse IP du hop prochain
- Mise à jour temps de survie (time-to-live TTL)
decrémenter champ TTL et modifier champ checksum - Insérer paquet dans une des files de sortie
23IPv4 en Click
- Aspects pratiques
- OS Linux
- Routage IPv4 (simplifié) est la plus grande
application disponible en Click actuellement - Userlevel
- Paquets sont générés par Click
- Eléments InfiniteSource et Discard au lieu
dune entrée et sortie sur Ethernet - ASIM Kernel patch paquets entre deux/plusieurs
machines - Eléments FromDevice et ToDevice
- Deux (vieilles) cartes Ethernet de la marque Tulip
24IPv4 Code en Click
- rt StaticIPLookup(18.26.4.24/32 0,
- 18.26.4.255/32 0,
- 18.26.4.0/32 0,
- 18.26.7.1/32 0,
- 18.26.7.255/32 0,
- 18.26.7.0/32 0,
- 18.26.4.0/24 1,
- 18.26.7.0/24 2,
- 0.0.0.0/0 18.26.4.1 1)
- // Hand incoming IP packets to the routing table.
- // CheckIPHeader checks all the lengths and
length fields - // for sanity.
- ip Strip(14)
- -gt CheckIPHeader(18.26.4.255 1.255.255.255)
- -gt 0rt
- c02 -gt Paint(1) -gt ip
- c12 -gt Paint(2) -gt ip
- c0 Classifier(12/0806 20/0001,
- 12/0806 20/0002,
- 12/0800,
- -)
- c1 Classifier(12/0806 20/0001,
- 12/0806 20/0002,
- 12/0800,
- -)
- Idle -gt 0c0
- InfiniteSource(DATA \lt
- // Ethernet header
- 00 00 c0 ae 67 ef 00 00 00 00 00 00 08 00
- // IP header
- 45 00 00 28 00 00 00 00 40 11 77 c3 01 00 00
01 02 00 00 02 - // UDP header
- 13 69 13 69 00 14 d6 41
- // UDP payload
- 55 44 50 20 70 61 63 6b 65 74 21 0a 04 00 00
00 01 00 00 00 - 01 00 00 00 00 00 00 00 00 80 04 08 00 80 04
08 53 53 00 00
25En-tête du paquet IP
- c0 Classifier(12/0806 20/0001,
- 12/0806 20/0002,
- 12/0800,
- -)
- c1 Classifier(12/0806 20/0001,
- 12/0806 20/0002,
- 12/0800,
- -)
- Idle -gt 0c0
- InfiniteSource(DATA \lt
- // Ethernet header
- 00 00 c0 ae 67 ef 00 00 00 00 00 00 08 00
- // IP header
- 45 00 00 28 00 00 00 00 40 11 77 c3 01 00 00
01 02 00 00 02 - // UDP header
- 13 69 13 69 00 14 d6 41
- // UDP payload
- 55 44 50 20 70 61 63 6b 65 74 21 0a 04 00 00
00 01 00 00 00 - 01 00 00 00 00 00 00 00 00 80 04 08 00 80 04
08 53 53 00 00
26ARP (Address Resolution Protocol)
- Comment établir le lien adresse IP / adresse
physique ? - Mise en place dans TCP/IP dun protocole de bas
niveau appelé Address Resolution Protocol (ARP) - Rôle de ARP fournir à une machine donnée
l'adresse physique d'une autre machine située sur
le même réseau à partir de l'adresse IP de la
machine destinataire - Fournit a la couche liaison un mapping des
addresses IP (logiques) aux addresses physiques - Comparable au fonctionnement de la table de
routage - Donner un addresse IP, rendre laddresse physique
- Si laddresse IP nexiste pas, générer une
requête en utilisant un protocole de contrôle - Enfiler le paquet
27Le datagramme ARP
- Unité de transfert de base est le datagramme,
constituée d'un en-tête et d'un champ de données
(de 1,5Ko à 64Ko)
28Fake (Faux, simulé) ARP en Click
- out0 Queue(200) -gt Discard
- out1 Queue(200) -gt Discard
- tol Discard
- // An "ARP querier" for each interface.
- fake_arpq0 EtherEncap(0x0800,
0000c0ae67ef, 0000c04f71ef)
//ARPQuerier(18.26.4.24, 0000C0AE67EF) - fake_arpq1 EtherEncap(0x0800,
0000c04f71ef, 0000c04f71ef)
//ARPQuerier(18.26.7.1, 0000C04F71EF) - // Deliver ARP responses to ARP queriers as well
as Linux. - t Tee(3)
- c01 -gt t
- c11 -gt t
- t0 -gt tol
- t1 -gt fake_arpq0 // was -gt 1arpq0
- t2 -gt fake_arpq1 // was -gt 1arpq1
- // Connect ARP outputs to the interface queues.
- fake_arpq0 -gt out0
- fake_arpq1 -gt out1
29Fake ARP
- // Proxy ARP on eth0 for 18.26.7, as well as
cone's IP address. - ar0 ARPResponder(18.26.4.24 0000C0AE67EF,
- 18.26.7.0/24
0000C0AE67EF) - c00 -gt ar0 -gt out0
- // Ordinary ARP on eth1.
- ar1 ARPResponder(18.26.7.1 0000C04F71EF)
- c10 -gt ar1 -gt out1
- // IP routing table. Outputs
- // 0 packets for this machine.
- // 1 packets for 18.26.4.
- // 2 packets for 18.26.7.
- // All other packets are sent to output 1, with
18.26.4.1 as the gateway. - rt StaticIPLookup(18.26.4.24/32
0,18.26.4.255/32 0,18.26.4.0/32
0,18.26.7.1/32 0,18.26.7.255/32 0,18.26.7.0/32
0, 18.26.4.0/24 1,18.26.7.0/24 2,0.0.0.0/0
18.26.4.1 1) // Hand incoming IP packets to
the routing table. - // CheckIPHeader checks all the lengths and
length fields for sanity. - ip Strip(14)
- -gt CheckIPHeader(18.26.4.255 1.255.255.255)
- -gt 0rt
- c02 -gt Paint(1) -gt ip
30Sorties
- // These are the main output paths we've
committed to a - // particular output device.Check paint to see if
a redirect is required. - // Process record route and timestamp IP options.
- // Fill in missing ip_src fields.
- // Discard packets that arrived over link-level
broadcast or multicast. - // Decrement and check the TTL after deciding to
forward.Fragment. - // Send outgoing packets through ARP to the
interfaces. - rt1 -gt DropBroadcasts
- -gt cp1 PaintTee(1)
- -gt gio1 IPGWOptions(18.26.4.24)
- -gt FixIPSrc(18.26.4.24)
- -gt dt1 DecIPTTL
- -gt fr1 IPFragmenter(300)
- -gt 0fake_arpq0
- rt2 -gt DropBroadcasts
- -gt cp2 PaintTee(2)
- -gt gio2 IPGWOptions(18.26.7.1)
- -gt FixIPSrc(18.26.7.1)
- -gt dt2 DecIPTTL
31Differentiated Services (DiffServ)
RatedSplitter(7500)
Meter(12500)
SetIPDSCP(D)
32DiffServ(2)
- Il sagit dune des implémentations possibles de
Nouveaux éléments - SetIPDSCP changes le tag. Il modifie le champ
DSCP (DiffServ code point field) à valeur fixe
puis lincrémente successivement - RatedSplitter(rate) classifie les paquets par
rapport à leur taux darrivée. Au maximum rate
paquets sont transmis à la première sortie, le
reste au deuxième - Meter(rate) envoye le flux entier à sa deuxième
sortie une fois le taux rate atteint - Shaper(rate) connexions pull! Il s occupe de
la régulation des temps de départ des paquets
maximum rate requêtes par seconde
33DiffServ(3)
- Les éléments aux fonctionnalités de
Classification, ordonnancement, déchargement,
files dattente ont déjà été présentés avant - Le flôt entrant est partagé en quatre, basé sur
DSCP - Les trois premiers flux sont limités en taux, le
quatrième est soumis à une transmission best
effort (le mieux possible) - Les flots limités ont la priorité au flot normal
- Limitation seffectue differément
- A dropping flots dépassant le 7500 paquets/sec
- B shaped (taillé) sur un taux de 10000,
laissant les paquets restants dans la file - C reclassement des paquets dépassant 12500
paquets/sec comme best-effort
34Règles de filtrage pour le Pare-feu
35Pare-Feu
36Pare-Feu (3)
//détermine avec l'entete ethernet si j'ai
encapsulé de l'IP classifierClassifier(12/0800,
-) rrRoundRobinSched CIPH
CheckIPHeader(12.45.67.89, 14) IPFIPFilter(allo
w ip src 12.45.67.90) rrfirewallRoundRobinSched
dDiscard //encapsule de l'ip eIP0EtherEnca
p(0x0800, 123456, ABCDEF) eIP1EtherEn
cap(0x0800, 123456, ABCDEF) eIP2Ether
Encap(0x0800, 123456, ABCDEF) eIP3Eth
erEncap(0x0800, 123456, ABCDEF) eIP4E
therEncap(0x0800, 123456, ABCDEF) eIP5
EtherEncap(0x0800, 123456,
ABCDEF) //n'encapsule pas de
l'ip e0EtherEncap(0x3514, 123456,
ABCDEF) e1EtherEncap(0x3514,
123456, ABCDEF) nul0Null nul1Null
//IpEncap argument gt protocole, src, dest ip0
IPEncap(0,12.45.67.89 , 192.68.1.29) ip1
IPEncap(0,12.45.67.89 , 192.68.1.27) ip2
IPEncap(0,12.45.67.89 , 58.168.21.127) ip3
IPEncap(0,12.45.67.89 , 58.189.172.3) ip4
IPEncap(0,12.45.67.89 , 59.12.32.153) ip5
IPEncap(0,12.45.67.90 , 127.12.132.13)
37Pare-Feu (4)
/ Génération
de paquets IP vers l'entrée d'un classifier IP
/ TimedSource(
0.1) -gt ip0 -gt eIP0 -gt Queue(5) -gt
0rr TimedSource(0.2) -gt ip1 -gt eIP1 -gt
Queue(5) -gt 1rr TimedSource(0.3) -gt ip2 -gt
eIP2 -gt Queue(5) -gt 2rr TimedSource(0.5) -gt
ip3 -gt eIP3 -gt Queue(5) -gt 3rr TimedSource(0.8)
-gt ip4 -gt eIP4 -gt Queue(5) -gt 4rr TimedSource(
0.2) -gt ip5 -gt eIP5 -gt Queue(5) -gt
5rr TimedSource(0.1) -gt nul0 -gt e0 -gt
Queue(5) -gt 6rr TimedSource(0.4) -gt nul1 -gt e1
-gt Queue(5) -gt 7rr rr -gt Unqueue(5) -gt
classifier //
//les paquets ip sont checkés puis
filtrés classifier0 -gt CIPH -gt IPF //les
paquets corrects sont mis en file IPF -gt Queue -gt
0rrfirewall //les paquets non ip sont mis en
file classifier1 -gt Queue -gt 1rrfirewall //
sortie du firewall rrfirewall -gt Unqueue -gt
Print("data_out\t")-gt d
38Evaluation Click (I)
- Simple a configurer, reconfigurable à chaud
- riche bibliothèque des éléments
- facile à créer des nouveaux éléments
- permet de se concentrer sur la partie
fonctionelle de son code - Difficile dentrer dans limplémentation si
besoin de modifier Click - Documentation relativement insuffisante
- Algorithme dordonnancement peu visible
- Marche seulement avec une carte Tulip
- le côté SMP nest pas suffisamment maîtrisé
- notre choix de système dexploitation (Mutek) a
exclu lutilisation directe de click
(lapplication a du être réecrite en thread POSIX)
39Evaluation Click (II)
- Expériences (confirmés) On cherche à saturer le
système - Efficace!
40Mini-passerelle
- Simplifications
- tous paquets arrivent sur une entrée
- le éseau est relié à deux réseaux locaux
- chaque réseau a trois machines dont l adresse IP
et l adresse MAC sont connus de la passerelle - il existe une adresse de sortie pas défaut où
l on envoye les paquets dont l adresse ne
correspond pas
41Mini-Passerelle (2)
42Mini-Passerelle(3)
- Parties de l application
- Dèsencapsulation des trames Ethernet entrantes
- Analyses des en-têtes
- Quel sus-réseau?
- Quelle machine dans un LAN?
43Mini-Passerelle (4)
44Mini-Passerelle (5)
Declaration /
dDiscard rr RoundRobinSched rr_S1
RoundRobinSched rr_S2 RoundRobinSched rr_S1_
0 RoundRobinSched rr_S1_1
RoundRobinSched rr_S1_2 RoundRobinSched rr_S1
_3 RoundRobinSched rr_S2_0
RoundRobinSched rr_S2_1 RoundRobinSched rr_S2
_2 RoundRobinSched rr_S2_3
RoundRobinSched t_S1 Tee(4) t_S2 Tee(4)
45Mini-Passerelle (6)
e EtherEncap(0x0800, 123456,
ABCDEF) e10 EtherEncap(0x0800,
111111, AAAAAA) e14
EtherEncap(0x0800, 111111, 444444) e15
EtherEncap(0x0800, 111111,
555555) e16 EtherEncap(0x0800,
111111, 666666) e20
EtherEncap(0x0800, 222222, BBBBBB) e27
EtherEncap(0x0800, 222222,
777777) e28 EtherEncap(0x0800,
222222, 888888) e29
EtherEncap(0x0800, 222222, 999999) e30
EtherEncap(0x0800, 333333,
000000) ip0 IPEncap(0,12.45.67.89 ,
192.68.1.29) ip1 IPEncap(0,12.45.67.89 ,
192.68.1.27) ip2 IPEncap(0,12.45.67.89 ,
58.168.21.127) ip3 IPEncap(0,12.45.67.89 ,
58.189.172.3) ip4 IPEncap(0,12.45.67.89 ,
59.12.32.153) ip5 IPEncap(0,12.45.67.89 ,
127.12.132.13) ip6 IPEncap(0,12.45.67.89 ,
192.68.9.84) ip7 IPEncap(0,12.45.67.89 ,
136.89.74.98) ip8 IPEncap(0,12.45.67.89 ,
192.68.1.255) ip9 IPEncap(0,12.45.67.89 ,
58.255.255.255) ip10 IPEncap(0,12.45.67.89 ,
58.210.12.55) ip11 IPEncap(0,12.45.67.89 ,
192.68.1.11)
46Mini-Passerelle (7)
SStaticIPLookup( 192.68.1.0/24 1, 58.0.0.0/8
2, 0.0.0.0/0 0 ) S1StaticIPLookup( 192.68.1
.27/32 1, 192.68.1.29/32 2, 192.68.1.201/32
3, 192.68.1.255/32 4, //adresse
Broadcast 0.0.0.0/0 0 ) S2StaticIPLookup( 5
8.137.4.89/32 1, 58.168.21.127/32
2, 58.189.172.3/32 3, 58.255.255.255/32 4,
//adresse Broadcast 0.0.0.0/0 0 )
47Mini-Passerelle (8)
/
Passerrelle /
/ Génération des données / TimedSource(0.1) -gt
ip0 -gt Queue(5) -gt 0rr TimedSource(0.2) -gt ip1
-gt Queue(5) -gt 1rr TimedSource(0.3) -gt ip2 -gt
Queue(5) -gt 2rr TimedSource(0.1) -gt ip3 -gt
Queue(5) -gt 3rr TimedSource(0.8) -gt ip4 -gt
Queue(5) -gt 4rr TimedSource(0.2) -gt ip5 -gt
Queue(5) -gt 5rr TimedSource(0.5) -gt ip6 -gt
Queue(5) -gt 6rr TimedSource(0.4) -gt ip7 -gt
Queue(5) -gt 7rr TimedSource(0.9) -gt ip8 -gt
Queue(5) -gt 8rr TimedSource(0.8) -gt ip9 -gt
Queue(5) -gt 9rr TimedSource(0.6) -gt ip10-gt
Queue(5) -gt 10rr TimedSource(0.7) -gt ip11-gt
Queue(5) -gt 11rr rr -gt Unqueue(5) -gt e /
Decapsulage des Paquets Ethernet / e -gt
Strip(14) -gt S
48Mini-Passerelle (9)
rr_S1_0 -gt Unqueue(5) -gt e10 -gt Print("ss
réseau1, machine par défault\t\t") -gt Queue(5)
-gt 0rr_S1 rr_S1_1 -gt Unqueue(5) -gt e14 -gt
Print("ss réseau1, machine 1 192.168.001.027\t")
-gt Queue(5) -gt 1rr_S1 rr_S1_2 -gt Unqueue(5)
-gt e15 -gt Print("ss réseau1, machine 2
192.168.001.029\t") -gt Queue(5) -gt
2rr_S1 rr_S1_3 -gt Unqueue(5) -gt e16 -gt
Print("ss réseau1, machine 3 192.168.001.201\t")
-gt Queue(5) -gt 3rr_S1 rr_S2_0 -gt Unqueue(5)
-gt e20 -gt Print("ss réseau2, machine par
défault\t\t") -gt Queue(5) -gt 0rr_S2 rr_S2_1
-gt Unqueue(5) -gt e27 -gt Print("ss réseau2,
machine 1 058.137.004.089\t") -gt Queue(5) -gt
1rr_S2 rr_S2_2 -gt Unqueue(5) -gt e28 -gt
Print("ss réseau2, machine 2 058.168.021.127\t")
-gt Queue(5) -gt 2rr_S2 rr_S2_3 -gt Unqueue(5)
-gt e29 -gt Print("ss réseau2, machine 3
058.189.172.003\t") -gt Queue(5) -gt
3rr_S2 / Sortie / rr_S1 -gt Unqueue(5) -gt
d rr_S2 -gt Unqueue(5) -gt d / Si n'est pas
dans le masque de sous réseaux ou est dans le
masque l'adresse IP ne correspond pas a une
machine gt sortie par défaut/ S0 -gt e30
-gt Print("Sortie par défault \t\t\t") -gt d
49Mini-Passerelle (10)
/ Sous réseaux / S1 -gt S1 S2 -gt S2 /
Transmission au Sous Réseau 1 et 2 / S14 -gt
Print("ss réseau1 (Brodcast)\t\t\t") -gt
t_S1 S24 -gt Print("ss réseau2
(Brodcast)\t\t\t") -gt t_S2 S10 -gt Queue(5)
-gt 0rr_S1_0 t_S10 -gt Queue(5) -gt
1rr_S1_0 S11 -gt Queue(5) -gt
0rr_S1_1 t_S11 -gt Queue(5) -gt 1rr_S1_1
S12 -gt Queue(5) -gt 0rr_S1_2 t_S12 -gt
Queue(5) -gt 1rr_S1_2 S13 -gt Queue(5) -gt
0rr_S1_3 t_S13 -gt Queue(5) -gt 1rr_S1_3
S20 -gt Queue(5) -gt 0rr_S2_0 t_S20 -gt
Queue(5) -gt 1rr_S2_0 S21 -gt Queue(5) -gt
0rr_S2_1 t_S21 -gt Queue(5) -gt 1rr_S2_1
S22 -gt Queue(5) -gt 0rr_S2_2 t_S22 -gt
Queue(5) -gt 1rr_S2_2 S23 -gt Queue(5) -gt
0rr_S2_3 t_S23 -gt Queue(5) -gt 1rr_S2_3