Для людей, которые думают, что это не очень хорошая идея, я бы сказал, что это зависит. У вас может быть большая рейдовая система или параллельная файловая система, которая обеспечит действительно лучшую производительность, чем один процесс cp. Тогда да, вам нужно использовать «параллельный инструмент».
Давайте возьмем этот пример:
timeout 10 strace -e write -c cp /dev/zero /dev/null
strace: Process 24187 detached
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
100.00 0.655188 4 166222 write
------ ----------- ----------- --------- --------- ----------------
100.00 0.655188 166222 total
тогда это
timeout 0.01 strace -e write cp /dev/zero /dev/null
write(4, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 65536) = 65536
write(4, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 65536) = 65536
write(4, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 65536) = 65536
write(4, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 65536) = 65536
write(4, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 65536) = 65536
write(4, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 65536) = 65536
write(4, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 65536) = 65536
strace: Process 24567 detached
поэтому каждая запись системного вызова, созданная "cp", в этом случае составляет 64 КБ, и в течение 10 секунд в моей системе я могу предоставить эту пропускную способность: 65536 * 166222/10 = 1089352499 = ~ 1,08 ГБ / с.
Теперь давайте запустим эту рабочую нагрузку с 2 процессами (у меня 4 ядра, но мой рабочий стол используется для других вещей, и здесь это только пример):
timeout 10 strace -e write -c cp /dev/zero /dev/null & timeout 10 strace -e write -c cp /dev/zero /dev/null & wait
[1] 26106
[2] 26107
strace: Process 26113 detached
strace: Process 26112 detached
% time seconds usecs/call calls errors syscall
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
------ ----------- ----------- --------- --------- ----------------
100.00 0.624108 4 162616 write
100.00 0.638468 4 162451 write
------ ----------- ----------- --------- --------- ----------------
100.00 0.624108 162616 total
100.00 0.638468 162451 total
------ ----------- ----------- --------- --------- ----------------
[1]- Exit 124 timeout 10 strace -e write -c cp /dev/zero /dev/null
Итак, мы видим, что мы можем почти удвоить производительность, используя 2 ядра для запуска этого.
Так что если мы находимся в контексте, отличном от диска 1xHard от диска 1xHard, но с массивом raid (или несколькими NVMe, так что я не согласен с этим, но я работаю над этим каждый день), это определенно показывает лучшую производительность при использовании нескольких общих в параллельно.