TISUnion / QuickBackupM

A backup / restore plugin, with multiple backup slots
GNU General Public License v3.0
148 stars 20 forks source link

添加 speedcopy 支持 #25

Closed alex3236 closed 2 years ago

alex3236 commented 2 years ago

❓ 为什么

speedcopy 包的描述如下:

Patched python shutil.copyfile using native call CopyFile2 on windows to accelerate transfer on windows shares.
On Linux, it issues special ioctl command CIFS_IOC_COPYCHUNK_FILE to enable server-side copy.

看起来是对 NAS 用户有帮助,但似乎本地存储的传输速度也有提高

🔨 实现

加载配置时给 shutil.copyfile 打补丁(

⚠️ 注意

未修改版本号(

Fallen-Breath commented 2 years ago

请直接使用 speedcopy 提供的函数进行复制,直接 patch 可能会造成意料外的影响。

以及测试小结怀疑注水,最好多测些

alex3236 commented 2 years ago

🧪 测试

使用 speedcopy 自带的 benchmark.py 进行测试。

Windows 本地传输

File Size (Mb) shutil speedcopy Boost
1 0.001648 0.001188 1.39
2 0.002469 0.002038 1.21
4 0.004557 0.004314 1.06
8 0.008214 0.007292 1.13
16 0.014797 0.015179 0.97
32 0.031783 0.029366 1.08
64 0.577100 0.564356 1.02
128 0.117948 0.110211 1.07
256 0.289941 0.223379 1.30
512 1.144847 1.259522 0.91

Windows 局域网传输

File Size (Mb) shutil speedcopy Boost
1 0.043559 0.025601 1.70
2 0.140894 0.068142 2.07
4 0.317707 0.120199 2.64
8 0.624333 0.050211 12.43
16 1.304758 0.105648 12.35
32 2.312098 0.066612 34.71
64 25.437534 6.052502 4.20
128 19.883221 0.203415 97.75
256 63.355960 15.306027 4.14
512 32.945394 21.032490 1.57

Linux 本地传输

File Size (Mb) shutil speedcopy Boost
1 0.005928 0.007161 0.83
2 0.014908 0.014864 1.00
4 0.029801 0.029778 1.00
8 0.060115 0.059993 1.00
16 0.120967 0.119723 1.01
32 0.240052 0.239115 1.00

💯 结论

对 Windows 似乎有不小的效果?谁知道呢,太怪了

alex3236 commented 2 years ago

请直接使用 speedcopy 提供的函数进行复制,直接 patch 可能会造成意料外的影响。

以及测试小结怀疑注水,最好多测些

无法直接用 speedcopy 提供的函数复制

speedcopy 只给了 copyfile 函数,没有 copytree 这些

shutil.copytree 使用的 shutil.copy2shutil.copy 都是调用的 shutil.copyfile 所以理论上打补丁不会造成什么大问题

Fallen-Breath commented 2 years ago

测试如果可以的话最好实测复制 mc 存档

如果不能避免 patch 的话,可以实现仅在 qbm 所在线程运用的 patch