Recentemente, fiquei perplexo com a velocidade às vezes lenta de cp . Especificamente, como df = pandas.read_hdf('file1', 'df') (700ms para um arquivo de 1.2GB) seguido por df.to_hdf('file2') (530ms) poderia ser muito mais rápido que cp file1 file2 (8s)?
Pesquisando isso:
-
cat file1 > file2não é melhor (8.1s). -
dd bs=1500000000 if=file1 of=file2nenhum (8.3s). -
rsync file1 file2é pior (11.4s), porque o arquivo2 já existia, então ele tenta executar sua soma de verificação contínua e bloquear a mágica de atualização.
Oh, aguarde um segundo! Que tal desvincular (excluir) file2 primeiro se existir?
Agora estamos falando:
-
rm -f file2: 0.2s (para adicionar a qualquer figura abaixo). -
cp file1 file2: 1,0s. -
cat file1 > file2: 1,0s. -
dd bs=1500000000 if=file1 of=file2: 1.2s. -
rsync file1 file2: 4s.
Então você tem isso. Certifique-se de que os arquivos de destino não existam (ou os trunque, o que é presumivelmente o que o pandas.to_hdf() faz).
Editar : isso foi sem esvaziar o cache antes de qualquer um dos comandos, mas conforme observado nos comentários, isso apenas adiciona consistentemente ~ 3.8s a todos os números acima.
Vale ressaltar: isto foi tentado em várias versões do Linux (kernel Centos w. 2.6.18-408.el5, e kernel Ubuntu w. 3.13.0-77-generic), e ext4 assim como ext3. Curiosamente, em um MacBook com o Darwin 10.12.6, não há diferença e as duas versões (com ou sem arquivo existente no destino) são rápidas.