高性能 perforce 同步

高性能 perforce 同步

我正在尝试执行 p4 同步文件夹/...

它的速度不是很快,而且只使用了 2% 的 CPU。我对它的性能不满意。

我正在尝试在 bash 中编写一个函数,给定一个参数 n,它将形成一个深度为 n 级的所有文件和文件夹的队列,并分叉 p4 sync -f $thatDirectory/... 或 p4 sync -f $thatFile 的进程。

我该如何开始呢?有没有可以做到这一点的实用程序?

提前致谢。

答案1

我对 Perforce 没有任何经验,但这种同步听起来像I/O 密集型操作。在多个进程中并行化可能没有帮助,因为瓶颈是磁盘或网络。

如果磁盘是瓶颈,那么并行化实际上可能会使它慢点,因为您将有许多进程同时访问不同的文件,从而导致磁盘头剧烈晃动。

在开始编写脚本之前,请先进行一些分析,找出导致其运行缓慢的原因。使用straceWireshark例如,研究读/写调用和网络流量。

答案2

有时 p4d(服务器)进程已使用“-f”标志启动,该标志将把它作为单线程进程运行。

需要注意的几点

尝试使用 -p 选项进行同步 - 这意味着更少的数据库写入,这一定是一件好事!

您可以尝试“深入 n 级并从那里向下同步”类型的事情,例如:

$ p4 dirs //<path>/* | 同时读取路径;执行

                p4 目录 $path/* |

                同时读取子路径;

                做

                                p4 目录 $subpath/* |

                                同时读取子子路径;

                                做

                                                p4 <cmd> $subsubpath/... ;

                                完毕;

                                p4 <cmd> $path/... # 捕获此级别的文件

                完毕;

                p4 <cmd> //<path>/... # 捕获此(顶层)级别的文件完成

 

在您的情况下,您将拥有等于“sync”+任何其他参数的 <cmd>。

 

答案3

我会避免使用每个文件同步……尤其是如果有多个用户尝试从嵌入式工具或类似工具执行此操作时。我们曾多次用此类技巧彻底搞垮我们的服务器。

然而,Perforce 确实提供了一个为您并行化同步的选项 - 并行,它确实需要一些服务器端调整,但您应该尝试一下。

您可以在 p4.exe 的多个调用中进行分片,但我会尝试使它们保持较小规模,至少不超过您可用的核心数量。

相关内容