Avanti Indietro Indice

6. Kernel

6.1 Impostazioni

Il kernel contiene una voce (QoS and/or fair queueing) che consente di aggiungere il supporto al QoS e la selezione dei vari algoritmi disponibili. E' necessario aggiungere che il supporto QoS non è completo e ancora in sviluppo, per questo è necessario selezionare la voce Code maturity level options ---> [*] Prompt for development and/or incomplete code/drivers durante il menuconfig.

Comunque vediamo le voci disponibile nel kernel, in questo caso si tratta della versione 2.3.99pre8.

Code maturity level options  --->  
    [*] Prompt for development and/or incomplete code/drivers [CONFIG_EXPERIMENTAL]

Networking Options  ---> 
    ...
    [*] QoS and/or fair queueing  --->
        [*] QoS and/or fair queueing (EXPERIMENTAL)     [CONFIG_NET_SCHED]
        <M> CBQ packet scheduler                        [CONFIG_NET_SCH_CBQ]
        <M> CSZ packet scheduler                        [CONFIG_NET_SCH_CSZ]
        <M> The simplest PRIO pseudoscheduler           [CONFIG_NET_SCH_PRIO]
        <M> RED queue                                   [CONFIG_NET_SCH_RED]
        <M> SFQ queue                                   [CONFIG_NET_SCH_SFQ]
        <M> TEQL queue                                  [CONFIG_NET_SCH_TEQL]
        <M> TBF queue                                   [CONFIG_NET_SCH_TBF]
        <M> GRED queue
        <M> Diffserv field marker
        <M> Ingress Qdisc
        [*] QoS support                                 [CONFIG_NET_QOS]
   
        [*]   Rate estimator                            [CONFIG_NET_ESTIMATOR]
        [*] Packet classifier API                       [CONFIG_NET_CLS]
        <M>   TC index classifier
        <M>   Routing table based classifier            [CONFIG_NET_CLS_ROUTE4]
        <M>   Firewall based classifier                 [CONFIG_NET_CLS_FW]
        <M>   U32 classifier                            [CONFIG_NET_CLS_U32]
        <M>   Special RSVP classifier                   [CONFIG_NET_CLS_RSVP]
        <M>   Special RSVP classifier for IPv6          [CONFIG_NET_CLS_RSVP6]
        [*]   Traffic policing (needed for in/egress)

6.2 Descrizione

Code maturity level options ---> [*] Prompt for development and/or incomplete code/drivers

Il supporto QoS (Quality of Service) nella versione del kernel 2.4 è ancora al momento in via di sviluppo, quindi ci sono diverse cose che non sono implementate o che necessitano ancora di modifiche e test. Attivando questa opzione nel menu "Networking Options --->" compare la voce "QoS and/or fair queueing --->" che permette di selezionare i moduli del QoS.

[*] Qos and/or fair queueing (EXPERIMENTAL)

Quando il kernel deve inviare nella rete molti pacchetti deve decidere quali inviare per primi, quali dopo, quali scartare. Questo lavoro viene svolto dal "packet scheduler". Esistono diversi algoritmi che possono essere utilizzati a questo scopo (CBQ, CSZ, PRIO, FIFO ...). Se rispondi N, sarà utilizzato il "packet scheduler" di default ossia FIFO (First In, First Out). Se rispondi Y, potrai invece selezionare diversi algoritmi alternativi, che potranno poi essere assegnati ai differenti dispositivi di rete. Inoltre sarà possibile abilitare l'utilizzo, sul router Linux, del "differentiated service" (diffserv) e del "Resource Reservation Protocol" (RSVP).

Se rispondi Y qui e anche alla voce "/proc file system" sarà possibile leggere varie informazioni sullo stato dei packet scheduler nel file /proc/net/psched.

CBQ packet scheduler

Se si risponde Y, allora si potrà utilizzare il packet scheduler CBQ (Class-Based Queueing) per i dispositivi di rete. Questo algoritmo classifica i pacchetti in una gerarchia di classi organizzate ad albero. CBQ è molto comune e permette di utilizzare qualsiasi algoritmo di gestione delle code che seguono. Modulo: sch_cbq.o

CSZ packet scheduler

Se si risponde Y, si potrà utilizzare il packet scheduler CSZ (Clark-Shenker-Zhang). Al momento è l'unico algoritmo che permette di ottenere "guaranteed services" per le applicazioni real-time. Nota: questo scheduler al momento non funziona ancora correttamente e probabilmente sarà sostituito con un altro algoritmo. Modulo: sch_csz.o

The simplest PRIO pseudoscheduler

Se si risponde Y, si potrà utilizzare un packet scheduler con coda a n-bande con priorità. Rispondi Y, se vuoi che l'algoritmo CBQ la utilizzi come disciplina per i nodi foglia. Modulo: sch_prio.o

RED queue

Se si risponde Y, si potrà utilizzare l'algoritmo di packet scheduling RED (Random Early Detection). Modulo: sch_red.o

SFQ queue

Se si risponde Y, si potrà utilizzare l'algoritmo di packet scheduling SFQ (Stochastic Fairness Queueing). Modulo: sch_sfq.o

TEQL queue

Se si risponde Y, si potrà utilizzare l'algoritmo di packet scheduling TLE (True Link Equalizer) sia per i dispositivi di rete sia come disciplina per l'algoritmo di scheduling CBQ. Questa disciplina delle code permette di combinare più dispositivi fisici in un dispositivo virtuale. Modulo: sch_teql.o

TBF queue

Se si risponde Y, si potrà utilizzare l'algoritmo di packet scheduling TBF (Token Bucket Filter) sia per i dispositivi di rete che come disciplina per l'algoritmo di scheduling CBQ. Modulo: sch_tbf.o

GRED queue

Generalized RED. Modulo: sch_gred.o

Diffserv field marker

Modulo: sch_dsmark.o

Ingress Qdisc

Modulo: sch_ingress.o

[*] QoS support

Se si risponde Y, si potranno sfruttare alcune caratteristiche aggiuntive di scheduling per il QoS. Ad esempio si potranno impostare dei limiti di rate-of-flow per i dispositivi di rete.

[*] Rate estimator

Per consentire allo scheduling QoS di operare correttamente, è necessario stimare il rate-of-flow del dispositivo di rete.

[*] Packet classifier API

L'algoritmo di scheduling CBQ richiede che i pacchetti, che devono essere spediti nella rete attraverso un dispositivo di rete, siano classificati in base ad alcuni criteri. Se si risponde Y, si potranno selezionare tra diversi classificatori/filtri di pacchetti.

TC index classifier

Segue elenco dei filtri o classificatori disponibili.

Routing table based classifier

E' necessario rispondere Y se si desidera classificare i pacchetti da inviare in base alle voci della tabella di routing. Modulo: cls_route.o

Firewall based classifier

E' necessario rispondere Y se si desidera classificare i pacchetti da inviare in base ai criteri impostati nel firewall. Modulo: cls_fw.o

U32 classifier

E' necessario rispondere Y se si desidera classificare i pacchetti da inviare in base all'indirizzo di destinazione o ad altri campi delle intestazioni (IP, TCP, UDP). Modulo: cls_u32.o

Special RSVP classifier

Il protocollo RSVP (Resource Reservation Protocol) permette a dei sistemi di richiedere per una connessione un minimo e massimo data flow rate; questo è importante per dati real-time (video, suono).

E' necessario rispondere Y se si desidera classificare i pacchetti da inviare in base alle richieste RSVP. Modulo: cls_rsvp.o

Special RSVP classifier for IPv6

Come sopra ma implementato per essere utilizzato con il protocollo IPv6. Modulo: cls_rsvp6.o

Traffic policing (necessario per in/egress)

Modulo: sch_police.o


Avanti Indietro Indice