ЗАДНИЙ ПЛАН: Я копирую разреженный образ виртуальной машины qcow2 размером 200 ГБ, но с выделенными блоками 16 ГБ. Я пробовал различные способы скопировать этот разреженный файл на один и тот же сервер и получил некоторые предварительные результаты. Среда - RHEL 6.6 или CentOS 6.6 x64.
ls -lhs srcFile
16G -rw-r--r-- 1 qemu qemu 201G Feb 4 11:50 srcFile
Через cp - лучшая скорость
cp --sparse=always srcFile dstFile
Performance Notes:
Copied 200GB max/16GB actual VM as 200GB max/26GB actual, bloat: 10GB
Copy time: 1:02 (mm:ss)
Via dd - лучший исполнитель в целом
dd if=srcFile of=dstFile iflag=direct oflag=direct bs=4M conv=sparse
Performance Notes:
Copied 200GB max/16GB actual VM as 200GB max/21GB actual, bloat: 5GB
Copy time: 2:02 (mm:ss)
Через cpio
mkdir tmp$$
echo srcFile | cpio -p --sparse tmp$$; mv tmp$$/srcFile dstFile
rmdir tmp$$
Performance Notes:
Copied 200GB max/16GB actual VM as 200GB max/26GB actual, bloat: 10GB
Copy time: 9:26 (mm:ss)
Через rsync
rsync --ignore-existing -aS srcFile dstFile
Performance Notes:
Copied 200GB max/16GB actual VM as 200GB max/26GB actual, bloat: 10GB
Copy time: 24:49 (mm:ss)
Via virt-sparsify - лучший размер
virt-sparsify srcFile dstFile
Copied 200GB max/16GB actual VM as 200GB max/16GB actual, bloat: 0
Copy time: 17:37 (mm:ss)
Различный размер блока
Меня беспокоит «раздувание» при копировании dd (увеличение размера файла по сравнению с оригиналом), поэтому я изменил размер блока. Я использовал «время», чтобы также получить общее время и процент процессора. Исходный файл в данном случае представляет собой разреженный файл размером 200 ГБ размером 7,3 ГБ:
4K: 5:54.64, 56%, 7.3GB
8K: 3:43.25, 58%, 7.3GB
16K: 2:23.20, 59%, 7.3GB
32K: 1:49.25, 62%, 7.3GB
64K: 1:33.62, 64%, 7.3GB
128K: 1:40.83, 55%, 7.4GB
256K: 1:22.73, 64%, 7.5GB
512K: 1:44.84, 74%, 7.6GB
1M: 1:16.59, 70%, 7.9GB
2M: 1:21.58, 66%, 8.4GB
4M: 1:17.52, 69%, 9.5GB
8M: 1:10.92, 76%, 12GB
16M: 1:17.09, 78%, 16GB
32M: 2:54.10, 90%, 22GB
ВОПРОС: Можете ли вы убедиться, что я определил лучшие методы копирования разреженного файла для повышения общей производительности? Любые предложения о том, как это сделать лучше, приветствуются, как и любые проблемы, которые могут возникнуть у вас с методами, которые я использую.
Из приведенного выше тестирования похоже, что использование dd на нашем целевом оборудовании с размером блока 64 КБ дает нам лучший общий результат, учитывая время копирования и раздувание:
dd if=srcFile of=dstFile iflag=direct oflag=direct bs=64K conv=sparse