Avanti Indietro Indice

5. NFS su linee lente

Le linee lente includono Modem, ISDN e tutte le altre connessioni su lunga distanza.

Questa sezione si basa sulla conoscenza dei protocolli usati, ma non su prove reali poiché non ho modo di verificarli. Fatemi sapere le vostre esperienze se avete la possibilità di provare ;-)

La prima cosa da ricordare è che NFS è un protocollo lento. Ha un grosso overhead di sistema. Usare NFS è come usare il kermit per trasferire i file. È veramente lento. Quasi tutto è più veloce di NFS. FTP, HTTP, rcp e ssh sono più veloci.

Siete ancora convinti di volerlo provare? OK.

I parametri predefiniti di NFS sono per linee veloci e con bassa latenza. Se usate questi parametri su linee ad alta latenza si potrebbero verificare errori, operazioni non portate a termine, file che risultano essere più corti di quanto siano in realtà e altri fatti misteriosi.

La prima cosa da fare è di non usare l'opzione per il mount soft. Questo potrebbe fare in modo che i timeout restituiscano errori alle applicazioni, che potrebbero non gestirli correttamente. Quella appena descritta potrebbe essere la causa di misteriosi fallimenti. Usate invece l'opzione hard. Quando l'opzione hard è attiva, i timeout generano infiniti tentativi invece di terminare l'operazione che il software voleva effettuare. Ed è ciò di cui avete bisogno.

La prossima cosa da fare è ingannare le opzioni timeo e retrans. Sono descritte nella pagina man nfs(5), che è qui riportata [tradotta NdT]:


       timeo=n        Il valore, in decimi  di  secondo  prima di
                      tentare  una  ritrasmissione  dopo  un  RPC
                      timeout.  Il  valore  di  default  è  di  7
                      decimi  di  secondo. Dopo il primo timeout,
                      il  timeout  viene   raddoppiato  dopo ogni
                      successivo  timeout fino a un massino di 60
                      secondi oppure nel caso avvenga un  timeout
                      maggiore.  Inoltre,  se  il  filesystem   è
                      montato  in  modo  hard, ogni nuovo timeout
                      avrà  come  valore  di  partenza, il doppio
                      del  valore  di  partenza della sequenza di
                      timeout  precedente,  che  si  raddoppia  a
                      ogni  ritrasmissione.  Il  massimo  timeout
                      rimane  di  60 secondi. Le migliori presta-
                      zioni si raggiungono incrementando il valo-
                      re  di  timeout quando si monta un disco su
                      una  rete  lenta, su un server lento oppure
                      attraverso router e gateway.

       retrans=n      Il numero  di  timeout minori e ritrasmis-
                      sioni  che  si devono verificare prima che
                      si verifichi un timeout maggiore. Il valo-
                      re  di  default  è di 3 timeout. Quando si
                      verifica  un timeout maggiore, viene bloc-
                      cata l'operazione sul file e sulla console
                      appare "server  not responding".

In altre parole: se non viene ricevuta una risposta entro il timeout di 0,7 secondi (700ms) il client NFS ripeterà la richiesta raddoppiando il timeout a 1,4 secondi. Se non si riceve risposta entro 1,4 secondi la richiesta viene ripetuta ancora e il timeout viene raddoppiato ancora a 2,8 secondi.

La velocità di una linea può essere misurata con un ping con le dimensioni del pacchetto e di rsize/wsize uguali.


$ ping -s 8192 lugulbanda
PING lugulbanda.uio.no (129.240.222.99): 8192 data bytes
8200 bytes from 129.240.222.99: icmp_seq=0 ttl=64 time=15.2 ms
8200 bytes from 129.240.222.99: icmp_seq=1 ttl=64 time=15.9 ms
8200 bytes from 129.240.222.99: icmp_seq=2 ttl=64 time=14.9 ms
8200 bytes from 129.240.222.99: icmp_seq=3 ttl=64 time=14.9 ms
8200 bytes from 129.240.222.99: icmp_seq=4 ttl=64 time=15.0 ms

--- lugulbanda.uio.no ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max = 14.9/15.1/15.9 ms

Il tempo qui è quanto impiega il pacchetto del ping ad andare avanti e indietro da lugulbanda. 15 ms è abbastanza veloce. Su una linea a 28.800 bps ci si può aspettare qualcosa come 4000-5000ms, e se la linea è molto carica questo tempo sarà ancora più alto, anche doppio. Quando il tempo è elevato, si dice che la linea ha elevata latenza. Generalmente per pacchetti più grandi e per linee cariche, il tempo tende ad aumentare. Aumentate il parametro timeo per adattarlo alla velocità della linea e al carico. E poiché la latenza aumenta se si usa la linea per altre operazioni, se volete provare FTP e NFS allo stesso momento, provate a misurare i tempi del ping mentre usate NFS e FTP per trasferire i file e aumentare timeo perché corrisponda alla latenza della linea.


Avanti Indietro Indice