Envolve rede para copiar um arquivo dentro de um compartilhamento NFS? [fechadas]

4

Estou assumindo as seguintes maneiras de copiar um arquivo em um compartilhamento NFS:

Processo 1:

  • O cliente solicita que os dados sejam copiados do compartilhamento NFS (se o cache não estiver lá) e os fragmentos de dados são copiados de forma assíncrona para a memória do cliente NFS, que então o envia assincronamente ao arquivador NFS novamente para copiar para novo localização.
  • O arquivador NFS recebe os pedaços de dados de forma assíncrona na memória e os grava no novo local.
  • Nesse processo, embora haja rede envolvida durante a leitura e também na escrita, devido à leitura assíncrona & gravar, a latência para uma operação geral de leitura-gravação será a mesma latência para operação de leitura-gravação de dados gerais.

Portanto, ler a partir do disco rígido local e escrever no NFS é quase o mesmo que ler o NFS e escrever no NFS.

No primeiro passo, se o cache já estiver lá, a leitura pode ser muito rápida.

Processo 2:

  • O cliente envia uma solicitação para iniciar a operação de cópia de dados no servidor NFS, junto com o local de onde deve ser lido e onde deve ser gravado (parece que não é).
  • O servidor faz o resto, operações de leitura / gravação usando sua própria memória.

Portanto, não há rede envolvida. E, portanto, pode ter um melhor desempenho (a menos que não haja latência no fim da rede) Mas provavelmente não é o caminho.

Por favor corrija-me em todos os pontos, se eu estiver errado.

Além disso, a memória envolve a cada operação, ou seja, quando envia dados pela rede, os dados são primeiro enviados para a memória (buffer de dados) do disco e depois da memória (buffer de dados) para o buffer de dados (por outro lado da rede), mas não do buffer de dados para o disco do outro lado da rede, certo?

    
por GP92 08.07.2016 / 14:11

2 respostas

4

O NFSv4.2 possui uma operação de cópia de descarregamento que pode fazer cópia de servidor para servidor sem dados de proxy através do cliente. Kernels Linux modernos (> 3.13?) Suportam isso. Eu não sei sobre outros servidores.

UPDATE

Por linux kernel 4.7 server side copy não é suportado por servidores linux link

    
por 08.07.2016 / 15:34
2

A operação "copy a file" não é uma operação básica do sistema de arquivos, como read , write , open , close e operações semelhantes. Veja esta página para uma boa explicação das operações que um sistema de arquivos deve suportar.

E são todos os sistemas de arquivos, seja ext4 , btrfs ou nfsv4 .

Observe que não há como saber por que um processo abre o arquivo A, abre o arquivo B, lê o arquivo A e grava no arquivo B. Portanto, em geral, não há como "causar curto-circuito" e otimizar a cópia de um arquivo para que os dados não precisem atravessar a rede duas vezes, no caso do arquivo A e do arquivo B estarem em sistemas de arquivos NFS, mesmo que sejam compartilhados no mesmo servidor NFS.

Muitos sistemas operacionais fornecem chamadas do sistema como sendfile() , que não copia dados de forma eficiente removendo a necessidade de copiar os dados de e para o espaço do usuário e, em teoria, isso poderia ser feito no nível do sistema de arquivos para copiar arquivos, mas mesmo assim haveria restrições semelhantes às dorename() operação - tal operação hipotética de copyfile() provavelmente teria que ser restrita ao curto-circuito somente daquelas cópias dentro de um único sistema de arquivos. Fazer o contrário criaria uma confusão complexa - o que fazer se o arquivo A e o arquivo B estiverem no mesmo servidor NFS, um cliente quiser copiar de um para outro, mas o arquivo A estiver em um sistema de arquivos ext4 e o arquivo B estiver ativado outro sistema de arquivos XFS?

    
por 08.07.2016 / 14:39