A ferramenta do Windows robocopy
possui uma opção de linha de comando /NOOFFLOAD
. O que essa opção realmente faz e em que circunstâncias eu a usaria?
A documentação do switch diz
/NOOFFLOAD :: copy files without using the Windows Copy Offload mechanism.
Pesquisas adicionais sobre o 'mecanismo de descarregamento de cópia do Windows' levam a este documento msdn , mas tenho dificuldade em entender qual efeito a desativação do descarregamento realmente teria.
Se um compartilhamento de arquivo de rede estiver em um servidor que usa 'descarregamento de cópia de janela', quais benefícios/desvantagens perceptíveis o uso /NOOFFLOAD
teria no processo de cópia?
Por exemplo, aumentaria ou diminuiria a carga no servidor ou aceleraria a transferência ao custo de outros recursos?
Em teoria, a carga no servidor remoto será (por agregação) a mesma. É a mesma quantidade sendo baixada de um servidor e a mesma quantidade sendo carregada em outro, mas o ponto de foco dessa carga é deslocado.
Do seu link :
Ao descarregar a cópia para o servidor, torna-se o próprio servidor que faz a cópia. Para dois servidores no mesmo datacenter pode ser muito mais rápido, pois a cópia pode acontecer na velocidade do link do datacenter local. Se você tiver uma conexão de 10 Mbps com ambos os servidores, mas eles tiverem conexões locais de 10 Gbps, copiar localmente será incrivelmente lento em comparação. Isso pode causar uma carga instantânea maior na CPU ou na rede, mas a transferência pode ocorrer mais rapidamente. Pode até ser que a transferência seja mais eficiente, devido à menor latência causada por vários dispositivos de rede entre você e o servidor.
Conforme mencionado naquele link, ao descarregar a cópia para o próprio servidor, você remove quase totalmente sua máquina local da equação:
Portanto, não importa se é o mesmo servidor ou servidores diferentes, a operação de cópia será muito mais eficiente e usará o que estiver disponível.
Em um servidor ou cluster com desduplicação , uma cópia pode ser efetivamente custo zero em termos de tempo de CPU e disco, pois nenhum dado de arquivo real precisaria ser copiado até que as alterações fossem feitas. Apenas uma referência de arquivo precisaria ser criada. Nesse caso, usar
/NOOFFLOAD
seria um grande desperdício de recursos, pois você faria o download dos dados e os carregaria novamente, enquanto forçava o servidor a verificar novamente e desduplicar os dados.Desativar o descarregamento forçará o download a passar por sua máquina. Você vai baixar os dados de um servidor e enviá-los para o outro. Existem algumas situações em que isso pode ser desejável, principalmente se você souber que está entre dois servidores e tem um link mais eficaz, talvez com menos dispositivos de roteamento ou gerenciamento.
O descarregamento é um mecanismo de otimização: quando você está copiando um arquivo entre dois locais que não estão em sua máquina, não há necessidade de sua máquina ver os dados se os locais concordarem entre si para realizar a transferência diretamente. Esta é uma otimização opcional e será usada quando possível. Mas
/NOOFFLOAD
desativa-o, portanto, mesmo que a otimização possa ser usada - não será. É basicamente um pessimismo prematuro. Existem muito poucas razões para realmente usá-lo. Às vezes, insiste-/NOOFFLOAD
se em garantir que uma cópia dos dados foi realmente executada, em vez de, por exemplo, vincular o arquivo. Que fique claro que NÃO é esse o caso , e usar essa opção em vez de backups é uma missão tola - geralmente com uma etiqueta de preço anexada.Em situações em que o mecanismo de descarregamento está disponível, o armazenamento geralmente é desduplicado e, mesmo que os dados façam uma viagem de ida e volta pelo sistema, eles farão isso apenas para alcançar o filtro de desduplicação de blocos que descartará os blocos duplicados. Em outras palavras:
/NOOFFLOAD
não melhora nada, mas pode piorar muito, com o resultado final sendo exatamente o mesmo - se você tiver sorte (leia mais).O único caso de uso que conheço para
/NOOFFLOAD
isso é de alguma preocupação para usuários avançados tecnicamente astutos, mas de outra forma "regulares", é o teste de estresse de rede. Se você quiser colocar alguma carga na rede e no sistema de armazenamento,/NOOFFLOAD
garantirá que você obtenha o pior caso possível nas circunstâncias em termos da quantidade de dados embaralhados. Porém, isso não é gratuito: o uso de/NOOFFLOAD
aumenta a probabilidade de corrupção de dados na cópia. Não há proteção de integridade de dados de ponta a ponta no sistema de arquivos virtual do Windows, e as cópias de arquivos feitas sem descarregamento têm um potencial mensurável para inversões de bits. Isso é algo que atinge especialmente os sistemas e redes marginais. Portanto, se você acha que deseja fazer um teste de estresse, faça-o usando dados que não lhe interessam, ou seja, exclua as cópias depois de sincronizadas com o disco.