我使用 zip 将本地目录定期备份到远程机器上。他们不相信这里的 rsync 之类的东西,所以这是我能做的最好的(?)。这是我使用的脚本
echo $(date)>>~/backuplog.txt;
if [[ -e /Volumes/backup/ ]];
then
cd /Volumes/Non-RAID_Storage/;
for file in projects/*;
do nice -n 10 zip -vru9 /Volumes/backup/nonRaidStorage.backup.zip "$file" 2>&1 | grep -v "zip info: local extra (21 bytes)">>~/backuplog.txt;
done;
else
echo "backup volume not mounted">>~/backuplog.txt;
fi
Run Code Online (Sandbox Code Playgroud)
这一切都很好,除了 zip 从不使用太多 CPU,所以它似乎比它应该花费的时间更长。它似乎永远不会超过 5%。我试着让它变得更好 -20 但这没有任何区别。仅仅是网络或磁盘速度阻碍了进程还是我做错了什么?
您可能会发现它zip大部分时间都在等待 I/O(读取文件和写入压缩版本),这就是为什么它使用的 CPU 没有您期望的那么多。赋予进程额外的优先级nice对此没有影响,因为如果任务没有以需要它的速度提供数据,则它不能使用更多的 CPU 时间。
在 Linux 下,您可以在top类似实用程序的输出中将这种情况视为“IO 等待”时间的高百分比,OSX 可能也是如此。
IO 等待时间的原因可能包括:
如果您想利用“备用”CPU 周期,并且无法通过减少 IO 延迟来实现,您可以尝试使用 7zip - 这会为每个数据块使用更多的 CPU 时间,但比 zip 实现更好的压缩在许多情况下,也有相当多的余量,从而减少了备份的大小。这会更快(因为 7zip 导致通过网络发送的数据更少)还是更慢(因为额外的计算复杂性意味着您的 CPU 可能成为瓶颈而不是磁盘/文件系统/网络)取决于您的机器的确切规格。
另一件事,一些工具报告进程使用每个内核和一些每个 CPU(以及一些取决于设置的任一方式),而 zip 通常是一个线程进程。因此,如果您有一个四核 CPU,那么 5% 不太可能是“CPU 的 5%”,或者一个内核的大约 20%(尽管它可能会在内核之间跳动,如果它是单线程的,则不会在任何给定时刻运行多个)。
| 归档时间: |
|
| 查看次数: |
604 次 |
| 最近记录: |