Avanti Indietro Indice

5. NFS su linee lente

Le linee lente includono Modem, ISDN e tutte le 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 provarli. Fammi sapere le tue esperienze se hai 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 i trasferire file. È veramente slow. Quasi tutto è più veloce di NFS. FTP è più veloce. HTTP è più veloce. rcp è più veloce. ssh è più veloce.

Sei ancora convinto di volerlo provare ? Ok.

I parametri di default di NFS sono per linee veloci e con bassa latenza. Se usi 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à ed altri fatti misteriosi.

La prima cosa da fare è di non usare l'opzione per il mount soft. Questo causerebbe dei timeout per ritornare degli errori alle applicazioni, che potrebbero non gestirli correttamente. Questa potrebbe essere la causa di misteriosi fallimenti. Usa invece l'opzione hard. Quando l'opzione hard è attiva, i timeout generano infiniti tentativi invece di terminare l'operazione che il software voleva fare. Ed è ciò di cui hai 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 ad un massino di 60
                      secondi oppure non si verifichi 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 ad 
                      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 routers e gateway.
                      
       retrans=n      Il numero  di timeouts minori e ritrasmis-
                      sioni  che  si devono verificare prima che 
                      si verifichi un timeout maggiore. Il valo-
                      re  di default è di 3 timeouts. Quando si
                      verifica  un timeout maggiore, viene bloc-
                      cata l'operazione sul file ed un messaggio
                      "server  not responding" è stampato sulla 
                      console.

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 ed 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 del 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 ed indietro da lugulbanda. 15 ms è abbastanza veloce. Su una linea a 28.800 bps puoi aspettarti 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. Aumenta il parametro timeo per adattarlo alla velocità della tua linea ed al carico. E poiché la latenza aumenta se usi la linea per altre cose: se vuoi provare FTP e NFS allo stesso momento, prova a misurare i tempi del ping mentre usi NFS e FTP per trasferire i file.


Avanti Indietro Indice