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 > file2
não é melhor (8.1s). -
dd bs=1500000000 if=file1 of=file2
nenhum (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.