Sophie

Sophie

distrib > Mandriva > 9.1 > i586 > by-pkgid > f1098342ec4a2b28475e34123ce17201 > files > 220

howto-html-it-9.1-0.5mdk.noarch.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
 <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
 <TITLE>Linux Ethernet-HOWTO: Suggerimenti per le prestazioni</TITLE>
 <LINK HREF="Ethernet-HOWTO-5.html" REL=next>
 <LINK HREF="Ethernet-HOWTO-3.html" REL=previous>
 <LINK HREF="Ethernet-HOWTO.html#toc4" REL=contents>
</HEAD>
<BODY>
<A HREF="Ethernet-HOWTO-5.html">Avanti</A>
<A HREF="Ethernet-HOWTO-3.html">Indietro</A>
<A HREF="Ethernet-HOWTO.html#toc4">Indice</A>
<HR>
<H2><A NAME="perf"></A> <A NAME="s4">4. Suggerimenti per le prestazioni</A></H2>

<P>Ecco qua un po' di trucchi che si possono usare se si soffre di una
basso throughput Ethernet o per guadagnare un po'
di velocit&agrave; nei trasferimenti ftp.
<P>Il programma <CODE>ttcp.c</CODE> &egrave; un buon test per misurare la velocit&agrave; di
throughput.  Un altro modo comunemente usato &egrave; di fare un <CODE>ftp> get
grosso_file /dev/null</CODE> dove       <CODE>grosso_file</CODE> &egrave; &gt;1MB e
risiede nel buffer di Tx della macchina (si faccia il `get' almeno
due volte, poich&eacute; la prima volta si appronter&agrave; la cache del buffer
nella macchina di trasmissione).  Si deve mettere il file nella
cache del buffer perch&eacute; non si &egrave; interessati ad includere nella
misura la velocit&agrave; di accesso ai file dal disco.  Questo &egrave; anche
il motivo per cui si inviano i dati in ingresso a <CODE>/dev/null</CODE>
piuttosto che dentro il disco.
<P>
<H2><A NAME="ss4.1">4.1 Concetti generali</A>
</H2>

<P>Anche una scheda a 8 bit &egrave; in grado di ricevere pacchetti back-to-back
(uno dietro l'altro) senza alcun problema.  Le difficolt&agrave; nascono
quando il computer non riesce a estrarre i pacchetti ricevuti
dalla scheda abbastanza velocemente da far spazio ai pacchetti in
arrivo.  Se il computer non libera abbastanza velocemente la
memoria della scheda dai pacchetti gi&agrave; ricevuti, la scheda non
avr&agrave; spazio per mettere i nuovi pacchetti.
<P>In questo caso o si scartano (drop) i nuovi pacchetti oppure si
scrivono sopra a quelli gi&agrave; ricevuti (overrun).  In entrambi i
casi si interrompe seriamente il flusso regolare del traffico
causando/richiedendo la ritramissione e degradando seriamente le
prestazioni anche di un fattore 5!
<P>Le schede con a bordo pi&ugrave; memoria possono fare la ``bufferizzazione''
di pi&ugrave; pacchetti e quindi gestire grossi picchi (burst) di pacchetti
back-to-back senza perderne nessuno.  D'altra parte ci&ograve; significa
che la scheda non necessita pi&ugrave; di una bassa latenza dal computer
riguardo all'estrazione dei pacchetti dal buffer per evitare la
perdita di pacchetti.
<P>La maggior parte delle schede a 8 bit hanno un buffer da 8kB e la
maggior parte di quelle a 16 ne hanno uno da 16kB.  La maggior
parte dei driver di Linux riserva 3kB del buffer per due
buffer Tx, quindi nel caso di una scheda a 8 bit rimangono solo
5kB di spazio per la ricezione. Questo spazio &egrave; sufficiente solo
per tre pacchetti Ethernet a dimensione massima (1500 byte).
<P>
<H2><A NAME="ss4.2">4.2 Schede ISA e velocit&agrave; del bus ISA</A>
</H2>

<P>Come menzionato in precedenza, se i pacchetti sono rimossi abbastanza
velocemente dalla scheda allora la condizione di drop/overrun non
avverr&agrave; anche se la dimensione del buffer per i pacchetti Rx &egrave;
piccola.  Il fattore che determina la frequenza con la quale i
pacchetti sono rimossi dalla scheda e messi nella memoria del
computer &egrave; la velocit&agrave; del percorso dati che collega le due,
ovvero la velocit&agrave; del bus ISA (se la CPU &egrave; un vecchio e lento
386sx-16 allora anche questo avr&agrave; la sua influenza).
<P>Il clock del bus ISA raccomandato &egrave; circa 8Mhz, ma molte schede madri e
dispositivi periferici possono essere fatti funzionare a frequenze
pi&ugrave; elevate. La frequenza di clock per il bus ISA solitamente pu&ograve;
essere impostata nel CMOS setup, selezionando un divisore della
frequenza di clock della scheda madre/CPU.  Alcune schede madri
ISA e PCI/ISA possono non avere questa opzione e quindi si &egrave;
incastrati nelle impostazioni di fabbrica.
<P>Per esempio, ecco qui alcune velocit&agrave; di ricezione misurate dal
programma TTCP su un 486 a 40Mhz, con una scheda a 8 bit WD8003EP,
a diverse velocit&agrave; del bus ISA.
<P>
<HR>
<PRE>
        Velocit&agrave; bus ISA (MHz)     Rx TTCP (kB/s)
        ----------------------    --------------
        6.7                       740
        13.4                      970
        20.0                      1030
        26.7                      1075
</PRE>
<HR>
<P>Voglio vedere chi riesce a far meglio di 1075kB/s con una
<EM>qualsiasi</EM> scheda Ethernet a 10Mb/s usando TCP/IP.
Comunque, non ci si aspetti che qualsiasi sistema funzioni a
velocit&agrave; del bus ISA molto elevate. La maggior parte dei sistemi
non funzioneranno correttamente a velocit&agrave; superiori a 13MHz
(inoltre, in alcuni sistemi PCI la velocit&agrave; del bus ISA &egrave; fissata
a 8 Mhz, cosicch&eacute; l'utente finale non ha la possibilit&agrave; di
incrementarla).
<P>Oltre a una velocit&agrave; di trasferimento pi&ugrave; elevata, si trarr&agrave; anche
beneficio da una riduzione nell'uso della CPU dovuta alla durata
minore dei cicli di memoria e di I/O (si noti che anche i dischi
fissi e le schede video presenti nel bus ISA mostreranno
solitamente un aumento delle prestazioni dovuto all'incremento
della velocit&agrave; del bus ISA).
<P>Ci si assicuri di fare un back up dei propri dati prima di fare
esperimenti con velocit&agrave; del bus ISA superiori agli 8Mhz e di
controllare accuratamente che tutte le periferiche ISA funzionino
correttamente dopo aver fatto qualsiasi incremento alla velocit&agrave;
del bus.
<P>
<H2><A NAME="ss4.3">4.3 Impostare la finestra TCP di ricezione (TCP Rx Window)</A>
</H2>

<P>
<P>Ancora una volta, le schede con poca memoria RAM a bordo e percorsi
dati tra la scheda e la memoria del computer relativamente lenti
avranno problemi.  L'impostazione predefinita per la finestra di
ricezione TCP &egrave; di 32kB, il che significa che un computer veloce nella
sottorete a cui appartiene la propria macchina, pu&ograve; scaricare in
quest'ultima 32kB di dati senza fermarsi per controllare se tutti sono
stati ricevuti correttamente.
<P>Le versioni recenti del comando <CODE>route</CODE> hanno la possibilit&agrave; di
impostare al volo la dimensione di questa finestra.  Solitamente
la riduzione della dimensione di questa finestra &egrave; necessaria solo
per la rete locale, poich&eacute; i computer che sono dietro ad un paio
di router e gateway sono abbastanza `bufferizzati' da non porre
problemi.  Un esempio d'uso potrebbe essere:
<P>
<HR>
<PRE>
        route add &lt;qualcosa> ... window &lt;dim_fin>
</PRE>
<HR>
<P>dove <CODE>dim_fin</CODE> &egrave; la dimensione della finestra che si vuole usare
(in byte).  Una scheda 3c503 a 8 bit su un bus ISA che va a 8Mhz o
meno dovrebbe funzionare bene con una dimensione della finestra di
circa 4kB.  Una finestra troppo grande causer&agrave; drop e overrun dei
pacchetti e una riduzione drastica del throughput.  Si pu&ograve;
verificare lo stato operativo facendo <CODE>cat /proc/net/dev</CODE>
che mostrer&agrave; tutte le situazioni di drop/overrun avvenute.
<P>
<H2><A NAME="ss4.4">4.4 Incrementare le prestazioni NFS</A>
</H2>

<P>Alcuni hanno scoperto che l'uso di una scheda a 8 bit in client NFS
causa prestazioni pi&ugrave; povere di quelle che ci si aspetta, quando
si usa la dimensione dei paccheti NFS di 8kB (nativa della Sun).
<P>Una possibile causa per questa cosa potrebbe essere la
differente dimensione del buffer a bordo tra schede a 8 e 16
bit.  La dimensione massima di un pacchetto Ethernet &egrave; circa 1500
byte.  Affinch&eacute; arrivi un pacchetto NFS di 8kB ci vogliono circa
sei pacchetti back to back Ethernet di dimensione massima.  Sia le
schede a 8 bit che quelle a 16 non hanno problemi a ricevere
pacchetti back to back.  Il problema sorge quando la macchina non
rimuove in tempo i pacchetti dal buffer della scheda e il buffer
va in overflow.  E nemmeno il fatto che le schede a 8 bit
necessitano di un ulteriore ciclo di bus ISA per ogni
trasferimento aiuta.  Quel che si <EM>pu&ograve;</EM> fare se si ha una
scheda a 8 bit &egrave; di impostare la dimensione del trasferimento NFS
a 2kB (o anche 1kB) o provare a incrementare la velocit&agrave; del bus
ISA per far s&igrave; che il buffer della scheda venga ripulito pi&ugrave;
velocemente. Ho scoperto che una vecchia scheda WD8003E a 8MHz
(senza altro carico di sistema) pu&ograve; sostenere grosse ricezioni a
dimensioni NFS di 2kB, ma non a 4kB, dove le prestazioni si
degradano di un fattore tre.
<P>D'altra parte, se l'opzione predefinita di mount &egrave; di usare la
dimensione di 1kB e si ha almeno una scheda isa a 16 bit, si
trover&agrave; un incremento significativo nel passare a 4kB (o anche
8kB).
<P>
<HR>
<A HREF="Ethernet-HOWTO-5.html">Avanti</A>
<A HREF="Ethernet-HOWTO-3.html">Indietro</A>
<A HREF="Ethernet-HOWTO.html#toc4">Indice</A>
</BODY>
</HTML>