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.