P4 Fusion 正在参加 2021 年度 OSC 中国开源项目评选,请投票支持!
P4 Fusion 在 2021 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
2021 年度 OSC 中国开源项目评选 正在火热进行中,快来投票支持你喜欢的开源项目!
2021 年度 OSC 中国开源项目评选 >>> 中场回顾
P4 Fusion 获得 2021 年度 OSC 中国开源项目评选「最佳人气项目」 !
授权协议 BSD 3-Clause
开发语言 C/C++
操作系统 跨平台
软件类型 开源软件
所属分类 开发工具Git开源工具
开源组织
地区 不详
投 递 者 白开水不加糖
适用人群 未知
收录时间 2021-11-18

软件简介

P4 Fusion 是一个使用 Perforce Helix Core C++ API 和 Libgit2 用 C++ 编写的快速 Perforce 到 Git 的转换工具,试图缓解git-p4.py的性能瓶颈。

这个项目是作为一个内部项目的概念验证开始的,它需要将P4仓库转换为Git仓库。Git内部也有一个类似的解决方案,叫做git-p4.py。然而,它在处理任何超过1GB大小的仓库时有性能问题,而且它使用Python2在单线程中运行,这给git-p4.py在更大的使用场景中的使用增加了一系列限制。

该工具通过以下方式解决了 git-p4.py 中一些最有影响的扩展和性能限制:

  • 使用Helix Core C++ API来处理下载 CL,从而更好地控制内存以及如何将其提交到 Git 存储库,而无需进行不必要的内存复制和文件 I/O。
  • 使用libgit2将从 Perforce 服务器接收到的文件内容按原样转发到 Git 存储库,同时尽可能避免内存复制。该库允许从内存中简单存在的文件内容创建提交。
  • 使用在 C++11 中实现的自定义基于唤醒的线程池,该线程池运行 Helix Core C++ API 的线程本地库上下文,以对变更列表下载过程进行大量多线程处理。

值得注意的是,P4 Fusion 的速度快到足以在你的Perforce服务器上瞬间产生巨大的负载(如果以中等数量的线程运行,在几分钟内超过15万个请求)。因此,它需要仔细监测以确保Perforce服务器不受影响。这个工具将继续产生负载,没有任何速率限制(除了这个工具提供的运行时选项外),直到转换过程完成。然而,没有速率限制,用几百个网络线程(如果可能的话,甚至更多)来运行这个工具,是在转换过程中实现最大速度的理想情况。

网络线程的数量应设置为一般多于逻辑CPU的数量,因为最耗时的步骤是下载CL数据,这主要是网络I/O的限制。

官方研究表明,这个工具的运行速度比 git-p4.py 快 100 倍以上。在一个包含约3393个中等规模变更列表的仓库路径内,使用 200 个并行连接进行历史转换的平均时间为 26 秒,而 git-p4.py 转换同一仓库路径需要接近 42 分钟。如果Perforce服务器有完整的文件缓存,那么这些转换时间可能是可重复的,否则如果文件缓存是空的,那么前几次运行预计会花费更多时间。

对于更大的仓库(数百万个 CL 或更多),这些执行时间预计会按预期扩展。该工具提供了在转换过程中控制内存利用率的选项,因此这些选项将有助于更大的用例。

❯ ./build/p4-fusion/p4-fusion
[ PRINT @ Main:24 ] Running p4-fusion from: ./build/p4-fusion/p4-fusion
[ PRINT @ Main:43 ] Usage:
[Required] --port
        Specify which P4PORT to use.

[Required] --path
        P4 depot path to convert to a Git repo

[Required] --lookAhead
        How many CLs in the future, at most, shall we keep downloaded by the time it is to commit them?

[Required] --src
        Local relative source path with P4 code. Git repo will be created at this path. This path should be empty before running p4-fusion.

[Required] --client
        Name/path of the client workspace specification.

[Required] --user
        Specify which P4USER to use. Please ensure that the user is logged in.

[Optional, Default is false] --includeBinaries
        Do not discard binary files while downloading changelists.

[Optional, Default is false] --fsyncEnable
        Enable fsync() while writing objects to disk to ensure they get written to permanent storage immediately instead of being cached. This is to mitigate data loss in events of hardware failure.

[Optional, Default is 10] --retries
        Specify how many times a command should be retried before the process exits in a failure.

[Optional, Default is 16] --networkThreads
        Specify the number of threads in the threadpool for running network calls. Defaults to the number of logical CPUs.

[Optional, Default is -1] --maxChanges
        Specify the max number of changelists which should be processed in a single run. -1 signifies unlimited range.

[Optional, Default is 1] --printBatch
        Specify the p4 print batch size.

[Optional, Default is 100] --refresh
        Specify how many times a connection should be reused before it is refreshed.
展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论 (0)

加载中
更多评论
暂无内容
发表了博客
2018/01/10 16:58

P4

##P4是一门SDN数据平面的编程语言,用于定义转发设备处理数据报的整个过程. ###一个完整的P4语言包含以下几个组成部分: (1)首部(header): 定义数据报首部结构 (2)解析器(parser): 根据首部定义解析数据包 (3)流表(table): 用于处理数据报的流表结构 (4)动作(action): 用于处理数据报的动作 (5)控制程序(control program): P4语言的“main”函数 ###1.协议无关性: P4灵活定义数据报协议格式和交换机的解析过程,使P4交换机能够处...

0
0
发表了博客
2016/09/11 01:03

perforce(p4) 使用

P4递交建议流程: 1. p4 sync 2. 覆盖或者改动local文件 3. p4 delete or 直接delete 废弃的文件 4. p4 add: 增加新文件到depot 5. p4 diff -se: 查看编辑过的文件 6. p4 diff -se | p4 -x - edit: 把所有改动过的文件置为open for submit, 对于覆盖的文件 or没有用p4 edit的文件,需要这个命令, 才能将文件置为open状态, 才能方便递交 7. p4 diff -sd: 查看删除的文件(未用p4 delete删除的) 8. p4 diff -sd | p4 -x - d...

0
0
发表了博客
2020/10/25 10:54

P4与5G UPF实践

与4G核心网相比,5G核心网有下面几个特性:服务化,C/U分离(控制面与用户面解耦),NFV,切片等。本篇在NFV和C/U分离的背景下,先描述了UPF网元选用P4作为技术方案的优缺点和参考实现方案,最后结合相关开源代码给出一个基于P4的UPF概念演示demo。 背景 以个人观点看,NFV和C/U分离都是软件定义一切的思想向CT领域渗透的结果。NFV(Network Functions Virtualization,网络功能虚拟化),将以前在专用硬件才有的网络功能,以软件的...

0
0
发表了博客
2019/03/21 20:11

P4语法(5) Package

Package 对于package这个概念,类似于将一个框架中各组成部件以一个规律进行打包,以正常运转。 基于一个架构去编写一个新的pipeline的时候,需要先了解初始化的时候需要提供那些东西,parser,ingress或一些校验的模块。 v1model的package 1 package V1Switch(Parser p, 2 VerifyChecksum vr 3 Ingress ig, 4 Egress eg, 5 ComputeChecksum ck, 6 ...

0
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
暂无内容
0 评论
0 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部