(M)  s i s t e m a   o p e r a c i o n a l   m a g n u x   l i n u x ~/ · documentação · suporte · sobre

  Página seguinte Página anterior Índice

635. NFS Sobre Linhas de Baixa Velocidade

Linhas de baixa velocidade incluem modems, ISDN e praticamente todas as ligações de longa distância possíveis.

Esta seção é baseada no conhecimento dos protocolos usados mas não em experiências de campo. Meu computador pessoal este inativo por um longo tempo e caso você tenha alguma experiência adicional por favor entre em contato.

A primeira coisa para se lembrar sobre NFS é que ele é um protocolo lento e tem ainda um alto número de informações adicionais. Usar NFS é o mesmo que se utilizar o kermit para transferir arquivos. É lento. Praticamente qualquer coisa é mais rápida que NFS. FTP, HTTP, rcp, ssh por exemplo.

Ainda quer tentar? Ok.

Os parâmetros padrões do NFS são para linhas rápidas com baixa latência. Caso se esteja usando estes parâmetros para linhas de alta latência, certamente o NFS reportará alguns erros, encerrará operações, imaginará que arquivos são menores do que eles sejam na realidade e agirá estranhamente em alguns casos.

A primeira coisa a não fazer é usar a opção de montagem soft. Ela provocará ultrapassagem dos tempos de espera e retornos de erro para o software, o qual, na maior parte do tempo, não saberá lidar corretamente com eles. Essa é uma maneira rápida de se obter erros misteriosos. Ao invés disso deve ser usada a opção de montagem hard, que gera infinitas tentativas em caso de estouro de tempo de espera ao invés de encerrar a solicitação, independentemente do que o software deseje fazer. Isso será realmente necessário nestes casos.

A próxima providência é mudar as opções de montagem timeo e retrans. Elas são descritas na página de manual online nfs(5), mas segue aqui uma cópia:


timeo=n
O número de décimos de segundo antes de enviar a primeira retransmissão após findo o tempo de espera de uma RPC. O valor padrão é de 7 décimos de segundo. Após a primeira espera, o tempo é dobrado após cada espera sem respostas, até um máximo de 60 segundos ou um número máximo de retransmissões ser atingido. Então, caso o sistema de arquivos esteja montado com a opção hard, cada novo tempo de espera começa com o dobro do tempo da anterior, novamente dobrando a cada retransmissão. O tempo máximo de espera é sempre de 60 segundos. Uma melhor performance pode ser atingida ao se incrementar o tempo de espera, quando se está montando sistemas sobre uma rede com muito tráfego, utilizando-se servidores lentos ou usando o sistema através de diversos roteadores e gateways.

retrans=n
O número de tempo limite e retransmissões que devem ocorrer antes que um alarme de tempo de resposta seja acionado. O padrão é de 3 ocorrências. Quando um alarme de tempo de espera maior ocorre, a operação é interrompida ou uma mensagem de "servidor não está respondendo" é apresentada na console.

Em outras palavras: se uma resposta não for recebida no tempo de espera de 0,7 segundos (700 ms), o cliente NFS irá repetir e dobrar o tempo de espera para 1,4 segundos. Caso a resposta não seja recebida neste tempo, a requisição será enviada novamente com um tempo de espera alterado para 2,8 segundos.

A velocidade da linha pode ser medida com um ping com os mesmos parâmetros das opções rsize/wsize.


$ 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

O parâmetro time aqui mostra quanto tempo o pacote ping levou para chegar a e retornar da máquina denominada lugulbanda. 15ms é bastante rápido. Sobre uma linha de 28.800 bps pode-se esperar algo como 4000-5000ms e, caso a linha esteja carregada, um tempo maior, chegando facilmente ao dobro. Quando o tempo é muito alto nos referimos como uma linha de alta latência. Geralmente para pacotes maiores e linhas mais carregadas, a latência tende a aumentar. Deve-se aumentar o parâmetro timeo para se adequar a esta realidade. Deve-se atentar que a latência tende a aumentar ainda mais quando se usa a linha para outros serviços como por exemplo FTP e NFS simultaneamente. Neste caso deve-se medir as respostas do comando ping ao se efetuar transferências de arquivos.

Vamos simular um cenário. Caso o tempo de ping esteja em cerca de 5000ms para um pacote de 8 Kb, que é o tempo de envio e resposta deste pacote e que somente indo ou vindo ele leve em média 2.500 ms, significando o tempo gasto pelo envio por uma ponta e recepção pela outra. Para pacotes menores de 512 bytes o tempo de ida e vinda é de aproximadamente 400 ms e ida ou vinda tem um tempo médio de 200 ms. Adicionando-se 2.500 ms e 200 ms temos 2.700 ms, que é o tempo médio de ida e vinda de um pequeno pacote de requisição e de uma resposta com um pacote maior. O tráfego ocorre da seguinte forma:



tempo limite evento
   0     700 cliente solicita dados
 300         servidor recebe a solicitação
 300         servidor começa a responder (sob uma ótica otimista :-)
             lembrete: o cliente não verá a resposta até que ela esteja           
             completa, em cerca de 2,7 segundos.   
 700         estouro de tempo do cliente
 700    1400 cliente solicita os dados novamente
1000         servidor recebe a requisição
1000 servidor começa a responde a requisição.

Neste ponto, cerca de 700 ms dos 2.700 ms de transmissão já foram utilizados. Ou seja restam 2.000 ms. O servidor responde à requisição, mas o pacote não pode ser enviado porque um pacote...


Página seguinte Página anterior Índice