A execução dos binários que estão em um diretório NFS montado falha quando a interrupção da rede acontece?

0

Então eu tenho uma máquina Linux que funciona como um servidor NFS. Muitos programas foram instalados na pasta que está sendo exportada.

Em outra máquina Linux, eu estou executando um dos programas que estão na pasta NFS exportada há muito tempo, e não terminará em breve.

Acontece que agora eu preciso fazer algumas manutenções urgentes de trabalho com a rede, para que a rede fique em baixo por um tempo.

Eu estou querendo saber o que acontecerá com o programa em execução?

Meu entendimento é que o programa é carregado na RAM em uma abordagem preguiçosa. Então, no melhor dos casos, digamos que o programa está executando alguns códigos que fazem parte do loop que já foi carregado na RAM, então ele não precisará acessar o arquivo executável durante o período de interrupção da rede, e o programa continuará funcionando bem, como se nada tivesse acontecido, certo?

Mas, digamos assim, se o programa precisar carregar algumas outras partes do executável na RAM e a rede estiver desativada no momento. Será que vai "congelar" por um tempo e depois continuar a executar bem quando a rede está em alta?

Estou pensando que esse processo de carregamento acabará invocando alguma chamada de sistema relacionada ao io, e essa chamada de sistema será eventualmente manipulada pela biblioteca do cliente NFS. Se a rede estiver inativa, a biblioteca cliente do NFS continuará tentando novamente durante o período em que a rede está inativa e, em seguida, retornará o sucesso quando a rede estiver ativa. Então, do ponto de vista do sistema, isso parece apenas que uma chamada de sistema leva muito tempo.

Não tenho certeza sobre meu raciocínio, especialmente para a parte do processo de carregamento. Ao carregar uma parte do executável na RAM, o SO invocará a chamada do sistema relacionada ao io? Ou pode ignorar a chamada do sistema e fazê-lo em uma abordagem de nível ainda mais baixo e, em seguida, falhar, para que a execução do meu programa seja interrompida devido à falha?

Além disso, preciso considerar as políticas de cache do NFS no raciocínio sobre isso?

Obrigado ~!

    
por D-Glucose 08.09.2016 / 23:49

2 respostas

0

Sua compreensão não é exatamente correta, mas está bem próxima. O programa é realmente carregado de forma lenta, página por página. (Algumas delas podem, na verdade, ser carregadas antes do uso, mas isso é uma troca de memória de desempenho, não é algo com o qual você pode contar.)

A parte do sistema que faz o carregamento é o próprio kernel. Uma página é carregada o mais tardar quando o programa requer aquela parte da memória, seja para acessar dados ou para pular para uma instrução da máquina. A maneira como isso funciona é que cada acesso à memória no processador passa pela MMU ; se a página que contém o acesso solicitado for mapeada na tabela MMU do processo, a CPU simplesmente acessará a memória; se a página não for mapeada, isso acionará uma interceptação , que executa uma parte do código no kernel que analisa a razão para o trap, aloca uma página de memória física, carrega o conteúdo da página necessária e retorna o controle para o programa para executar o acesso novamente.

Quando uma página de memória foi modificada pelo programa, seu conteúdo pode ser colocado em swap e, em seguida, carregado de volta. Quando uma página de memória vem diretamente de um arquivo (executável ou não), seu conteúdo é carregado desse arquivo. Isso não passa pelas chamadas do sistema, já que tudo está acontecendo dentro do kernel, mas faz os mesmos acessos de baixo nível que uma chamada do sistema para acessar um arquivo faria.

O resultado é que, se o sistema de arquivos em que um executável em execução estiver armazenado ficar inacessível, o processo será interrompido. Ele permanecerá em suspensão ininterrupta de sono até que o sistema de arquivos atenda à solicitação.

Se o executável estiver no NFS e o sistema de arquivos NFS estiver montado com a opção hard , o executável aguardará para sempre ou até que o servidor responda, o que ocorrer primeiro. Se o sistema de arquivos NFS for montado com a opção soft , a solicitação NFS falhará após um tempo, e isso se traduz em um sinal para o processo (SIGSEGV, ou seja, segfault, eu acho).

    
por 09.09.2016 / 03:16
0

se o seu programa não tentar acessar nenhum arquivo do compartilhamento NFS continuará funcionando. Ele ficará bem se não precisar ler ou gravar em um arquivo da pasta compartilhada NFS.

    
por 09.09.2016 / 02:38