youbbs
youbbs
1869 0 0

CDC 文件传输

Content Defined Chunking (CDC) 内容定义分块文件传输,是将文件分成块,以文件或流式文件形式从 Windows 传输到 Linux 的工具。

产生背景

在 Stadia,游戏开发人员可以访问 Linux 云实例来运行游戏。 不过,大多数开发人员都是在 Windows 上编写游戏的。 因此,他们需要一种方法让它们在远程 Linux 实例上可用。

由于开发人员可以通过 SSH 访问这些实例,因此他们可以使用 scp 来复制游戏内容。 然而,这是不切实际的,尤其是在大流行期间转向在家工作且互联网连接不佳的情况下。 scp 总是复制完整的文件,没有“增量模式”来只复制改变的东西,对于许多小文件来说速度很慢,并且没有快速压缩。

为了解决这种情况,我们开发了两个工具,cdc_rsynccdc_stream,它们使开发人员能够快速迭代他们的游戏,而不会重复产生传输数十 GB 的成本。

CDC同步

cdc_rsync 是一个将文件从 Windows 机器同步到 Linux 设备的工具,类似于标准的 Linux rsync。 它基本上是一个复制工具,但针对目标目录中已有旧版本文件的情况进行了优化。

  • 如果时间戳和文件大小匹配,它会快速跳过文件。
  • 它对所有数据传输使用快速压缩。
  • 如果文件发生更改,它会确定更改了哪些部分并仅传输差异部分。

远程差异算法基于 CDC。 在我们的测试中,它比 rsync 中使用的快 30 倍(1500 MB/s 对比 50 MB/s)。

下图显示了在 Windows 上的 Cygwin 下运行的 cdc_rsync 和 Linux rsync 的比较。 测试数据包括提供给我们用于评估目的的某些游戏的 58 个开发版本。 构建大小为 40-45 GB。 对于这个实验,我们上传了第一个构建,然后将第二个构建与两个工具中的每一个同步并测量了时间。 例如,使用 Cygwin rsync 从构建 1 同步到构建 2 需要 210 秒,但使用 cdc_rsync 只需 75 秒。 这三个异常值可能是来自另一个开发分支的特性下降,那里的增量要高得多。 总的来说,cdc_rsync 同步文件的速度比 Cygwin rsync 快大约 3 倍。

cdc_rsync

CDC 流

cdc_stream 是一种将文件和目录从 Windows 机器流式传输到 Linux 设备的工具。 从概念上讲,它类似于 sshfs,但针对读取速度进行了优化。

  • 它在 Linux 设备上缓存流数据。
  • 如果文件在 Windows 上更改后在 Linux 上重新读取,则只会再次流式传输差异。 其余的从缓存中读取。
  • 由于目录元数据(文件名、权限等)以流式友好的方式提供,因此统计操作非常快。

为了有效地确定文件的哪些部分发生了更改,该工具使用与 cdc_rsync 相同的基于 CDC 的差异算法。 Windows 文件的更改几乎会立即反映在 Linux 上,延迟大约为(0.5s + 0.7s x 已更改文件的总大小(GB))。

https://github.com/google/cdc-file-transfer

0

Nearby


Discussion

Login Topics