8.4.2. Coda del socket
In modo simile alla coda dell'hardware NIC la coda del socket viene riempita dallo stack di rete di
softirq
. Successivamente le applicazioni possono svuotare la coda dai socket corrispondenti tramite read
, recvfrom
o entità simili.
Per controllare lo stato di questa coda usare l'utilità
netstat
; la colonna Recv-Q
mostra la dimensione della coda. In generale se si verifica una saturazione essa verrà gestita in modo simile a quelle del NIC hardware buffer (es. Sezione 8.4.1, «NIC Hardware Buffer»):
- Traffico
- Usate la prima opzione per rallentare il traffico degli input configurando la velocità con la quale viene riempita la coda. Per fare questo filtrare o rimuovere i frame. È possibile altresì rallentare il traffico riducendo il peso del dispositivo del NIC[6].
- Profondità coda
- È possibile impedire la saturazione della coda aumentandone la profondità. Per fare questo aumentare il valore del parametro del kernel
rmem_default
o dell'opzioneSO_RCVBUF
. Per maggiori informazioni consultare Sezione 8.2, «Impostazioni di rete ottimizzate». - Frequenza chiamata dell'applicazione
- Quando possibile ottimizzare l'applicazione in modo da aumentare la frequenza delle chiamate. Per fare questo modificare o riconfigurare l'applicazione della rete per eseguire un numero maggiore di chiamate POSIX (come ad esempio
recv
,read
). Così facendo è possibile "svuotare" la coda più velocemente.
Per molti amministratori la scelta più comune è quella di aumentare la profondità della coda. Questa sembra essere la soluzione più semplice ma al tempo stesso potrebbe non essere quella più idonea col tempo. Poichè nuove tecnologie di networking risultano essere sempre più veloci, le code continueranno a riempirsi sempre più velocemente. Ne consegue che sarà necessario modificare continuamente la profondità della coda in modo appropriato.
La soluzione ideale è quella di migliorare o configurare l'applicazione in modo da rimuovere più velocemente i dati del kernel, anche se tale operazione significa mettere in coda i dati nello spazio dell'applicazione. Questa operazione permette una archiviazione più flessibile dei dati, poichè essi potranno essere rimossi ed inseriti per soddisfare le esigenze dell'utente.
[6]
Il peso del dispositivo viene controllato tramite
/proc/sys/net/core/dev_weight
. Per maggiori informazioni sul peso e sulle implicazioni dovute alla sua modifica consultate Sezione 8.4.1, «NIC Hardware Buffer».