{"id":5495,"date":"2023-05-23T04:43:07","date_gmt":"2023-05-23T04:43:07","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=5495"},"modified":"2025-02-01T22:39:30","modified_gmt":"2025-02-01T22:39:30","slug":"perforce-proxy-aka-helix-proxy-explained","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/perforce-proxy-aka-helix-proxy-explained\/","title":{"rendered":"Perforce Proxy aka Helix Proxy Explained!"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-5528\" src=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2018\/10\/New-copy.jpg\" alt=\"\" width=\"600\" height=\"315\" srcset=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2018\/10\/New-copy.jpg 600w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2018\/10\/New-copy-300x158.jpg 300w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/p>\n<p>Perforce aka Helix is built to handle distributed development in a wide range of network topologies. Perforce Proxy (P4P) provides fast, local access to versioned files at remote sites. With P4P, remote users can quickly access versioned content.<\/p>\n<p>The Perforce Proxy aka Helix Proxy is a free caching server that can be deployed to accelerate file access operations between locations with limited network resources. When a user performs a sync to their local machine, or a submit to the Perforce server, the proxy caches the repository files at the remote office so they don&#8217;t have to be transferred to and from the central server on every operation.<\/p>\n<p>P4P stores file revisions only when one of its users submits a new revision to the depot or requests an existing revision from the depot. That is, file revisions are not prefetched. Performance gains from P4P occur only after file revisions are cached.<\/p>\n<p><a href=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2018\/10\/perforce-helix-proxy-p4p.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-5497\" src=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2018\/10\/perforce-helix-proxy-p4p.png\" alt=\"\" width=\"847\" height=\"400\" srcset=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2018\/10\/perforce-helix-proxy-p4p.png 847w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2018\/10\/perforce-helix-proxy-p4p-300x142.png 300w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2018\/10\/perforce-helix-proxy-p4p-768x363.png 768w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2018\/10\/perforce-helix-proxy-p4p-660x312.png 660w\" sizes=\"auto, (max-width: 847px) 100vw, 847px\" \/><\/a><\/p>\n<p>In this above image, file revisions requested by users at a remote development site are fetched first from a central Helix Core server (p4d running on central) and transferred over a relatively slow WAN. Subsequent requests for that same revision, however, are delivered from the Helix Proxy, (p4p running on outpost), over the remote development site\u2019s LAN, reducing both network traffic across the WAN and CPU load on the central server.s<\/p>\n<p><strong>Downloading and Installing The Perforce Proxy aka Helix Proxy p4p<\/strong><\/p>\n<ol>\n<li>Download the p4p executable to the machine on which you want to run the proxy.<\/li>\n<li>Select a directory on this machine (P4PCACHE) in which to cache file revisions.<\/li>\n<li>Select a port (P4PORT) on which p4p will listen for requests from Perforce applications.<\/li>\n<li>Select the target Perforce server (P4TARGET) for which this proxy will cache.<\/li>\n<\/ol>\n<p><strong>Running P4P The Perforce Proxy aka Helix Proxy<\/strong><\/p>\n<p>[code]$ p4p -p tcp64:[::]:1999 -t central:1666 -r \/var\/proxyroot[\/code]<\/p>\n<p><strong>Verifying P4P The Perforce Proxy aka Helix Proxy<\/strong><\/p>\n<p>[code]$ export P4PORT=tcp:outpost:1999<br \/>$ p4 info[\/code]<\/p>\n<p><strong>Reference<\/strong><br \/>https:\/\/www.perforce.com\/perforce\/doc.current\/manuals\/p4dist\/Content\/P4Dist\/chapter.proxy.html<\/p>\n<p>\u00a0<\/p>\n\n\n<h2 class=\"wp-block-heading\">Step 1<\/h2>\n\n\n\n<script src=\"https:\/\/gist.github.com\/devops-school\/965a65e730e98470826bc1c762d3336c.js\"><\/script>\n\n\n\n<h2 class=\"wp-block-heading\">Step 2 <\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">sudo -u perforce sh -c <span class=\"hljs-string\">\"cp \/etc\/perforce\/p4dctl.conf.d\/p4p.template \/etc\/perforce\/p4dctl.conf.d\/p4p-master.conf; mkdir \/opt\/perforce\/servers\/p4p-master\"<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Step 3 <\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">vi \/etc\/perforce\/p4dctl.conf.d\/p4p-master.conf\r\n\r\n<span class=\"hljs-comment\">#-------------------------------------------------------------------------------<\/span>\r\n<span class=\"hljs-comment\"># Template p4dctl configuration file for Helix Core Proxy<\/span>\r\n<span class=\"hljs-comment\">#-------------------------------------------------------------------------------<\/span>\r\n\r\np4p p4p-master\r\n{\r\n    Owner       =       perforce\r\n    Execute     =       \/usr\/sbin\/p4p\r\n    Umask       =       <span class=\"hljs-number\">077<\/span>\r\n\r\n    Environment\r\n    {\r\n        P4PCACHE=\/opt\/perforce\/servers\/p4p-master\/\r\n        P4TARGET=ssl:<span class=\"hljs-number\">1666<\/span>\r\n        P4PORT=<span class=\"hljs-number\">1667<\/span>\r\n        PATH=\/bin:\/usr\/bin:\/usr\/local\/bin\r\n    }\r\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Step 4 &#8211; Copy Certificates in Proxy Server<\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"> <\/h2>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">$ cp \/opt\/perforce\/servers\/master\/root\/ssl\/certificate.txt \/opt\/perforce\/servers\/p4p-master\/ip-172-31-25-99<\/code><\/span><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Step 4 &#8211; Start P4p<\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">p4dctl stop p4p-master\r\np4dctl start p4p-master\r\np4dctl <span class=\"hljs-keyword\">list<\/span>\r\np4dctl restart p4p-master<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>","protected":false},"excerpt":{"rendered":"<p>Perforce aka Helix is built to handle distributed development in a wide range of network topologies. Perforce Proxy (P4P) provides fast, local access to versioned files at remote sites. With&#8230; <\/p>\n","protected":false},"author":1,"featured_media":5498,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[370],"tags":[5071,5103,5102,373,379],"class_list":["post-5495","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-perforce","tag-helix","tag-p4p","tag-p4pcache","tag-perforce","tag-proxy"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/5495","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=5495"}],"version-history":[{"count":4,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/5495\/revisions"}],"predecessor-version":[{"id":35556,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/5495\/revisions\/35556"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media\/5498"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=5495"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=5495"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=5495"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}