0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

分散環境でもコスト効率よくPerforce P4を使うためのONTAP FlexCacheとの連携

0
Last updated at Posted at 2026-06-04

0. はじめに

Perforce P4(*1) はgitやSubversionなどと並んでソースコードやバイナリファイルの管理に活用されています。このミドルウェアをNetApp ONTAPの機能であるFlexCacheと組み合わせることで、リモート拠点からのアクセスの高速化だけでなくインフラコストの削減や運用工数の削減を実現できます。もちろんPerforce単体機能で実現できる部分もありますが、外部ストレージ機能と組み合わせることで使い勝手が広がります。

この組み合わせのメリットについて簡単に知りたい方は簡単にまとめたAWSブログがあるのでご確認ください。
https://aws.amazon.com/jp/blogs/news/perforce-and-fsxn-deliver-storage-efficiency-for-large-scale-development/

ここではメリットや連携方法について具体的に解説します。

*1 以降、Perforce、もしくはP4と短縮して表現します。

1. 連携させるメリット・デメリット

1.1. メリット

前出のAWSブログでは以下の3つのメリットについて記載しました。

a. データ量の削減とストレージコストの削減
b. Perforceサーバの負荷軽減 (ストレージオフロード)
c. リモート拠点やクラウドとのデータ連携が楽になる

これに加えて、少し細かい話になりますが以下のメリットもあります。

d. P4 プロキシサーバのキャッシュ領域の容量溢れを気にする必要がなくなる
キャッシュストレージはデータが溢れそうになると、アクセス頻度の低いデータをキャッシュから自動的に削除して空きを作ります。
e. P4 プロキシサーバのキャッシュ領域の拡大・縮小が簡単になる
キャッシュ領域にブロックストレージのを使うと拡大は容易ですが、縮小はあまりやりたくない作業であることは想像できるかと思います。ここにNASを活用すれば、その容量の拡大・縮小は無停止で非常に簡単です。

1.2. デメリット

a. 両拠点にNetApp ONTAPストレージが必要になる。(コストに影響する)
すでにオンプレでONTAPストレージを使っている方は、これは大きなデメリットにならないかもしれません。リモート拠点にキャッシュとして最低限の容量のストレージを準備するだけで良いからです。キャッシュには保守の切れそうな古い機種を転用しても良いでしょう。あるいはVMware ESXiやLinux KVM上で動作するSDS版のONTAPもあるので、ハードウェアアプライアンスを買わずに利用できます。
クラウドを利用する場合はAmazon FSx for NetApp ONTAP(以降、FSx for ONTAP)をキャッシュとして活用できます。

2. 構成のポイントと設定手順

2.1. 構成図

以下のような環境を作成しました。FSx for ONTAPがキャッシュストレージになる構成です。
{295878D5-046D-4BB0-A856-AC1368FEC2DC}.png

オンプレミスのP4 コミットサーバ(別名、マスタサーバ)のディポ領域(=バージョン管理されるファイルの格納場所)にONTAPストレージを設置し、リモート拠点にもONTAPを設置します。そしてこのストレージ間でキャッシュ設定をして、P4 プロキシがONTAPキャッシュボリュームをマウントすることで、データ転送しなくてもオンプレにあるすべてのデータが参照できる状態になります。
この状態でP4 クライアントからP4 プロキシサーバにデータ読み出しのリクエストがあると、P4 プロキシサーバは自身のキャッシュ領域にデータがあると思ってP4 コミットサーバにデータを取りに行かず、自身でNFSマウントした領域からデータを読み出します。読み出しを受けたキャッシュのONTAPは、裏でオリジンONTAPにデータを取りに行ったあとにP4 プロキシにデータを渡すため、結果としてPerforce P4間の通信が削減され、P4 コミットサーバの負荷が軽減されます。

2.2. ストレージのキャッシュ設定

Perforceのインストールと設定をする前に、まずストレージの設定を終わらせる必要があります。ここではオンプレミスのFAS2820 (ONTAP Version 9.15.1)に作成されたボリュームをNFS Export設定した後に、そのボリュームをFSx for ONTAPにキャッシュする設定を入れます。そして最後にキャッシュボリュームをNFS Exportすればストレージの準備は完了です。

2.2.1. 前提条件

以下の7項目をクリアすればほぼ間違いなくキャッシュ設定は成功するのて、事前に確認してみてください。

  1. オンプレとAWSのVPCの間でインターネットVPN/Direct Connectなどを使って通信できるようにする
  2. 接続先のVPCにFSx for ONTAPが起動していて、SSH接続ができる状態になっている
    (AWSコンソールからクイック作成でFSxを作ると、SSHアクセス用のfsxadminユーザのパスワードが設定されない状態になっているので注意してください。スタンダード作成を選べばfsxadminのパスワードを設定可能です。)
  3. オンプレONTAPとFSx for ONTAPそれぞれに存在するインタークラスタLIF同士がtcp/11104とtcp/11105で疎通できる
    ※ インタークラスタLIFの有無とそのIPアドレスは、ONTAPにSSHログインして「net int show -role intercluster」コマンドを実行すると確認できます。
ONTAP CLI - FSx
FsxId01bbdf5e15791c3a5::> net int show -role intercluster
  (network interface show)
            Logical    Status     Network            Current       Current Is
Vserver     Interface  Admin/Oper Address/Mask       Node          Port    Home
----------- ---------- ---------- ------------------ ------------- ------- ----
FsxId01bbdf5e15791c3a5
            inter_1      up/up    172.29.1.237/24    FsxId01bbdf5e15791c3a5-01
                                                                   e0e     true
            inter_2      up/up    172.29.1.169/24    FsxId01bbdf5e15791c3a5-02
                                                                   e0e     true
2 entries were displayed.

※ FSx for ONTAPのインタークラスタLIFは、FSx作成時に指定した仮想ネットワークサブネットにかならず存在します。

ONTAP CLI - オンプレ
SE-ST-2820-03::*> net int show -role intercluster
 (network interface show)
           Logical    Status     Network            Current       Current Is
Vserver     Interface  Admin/Oper Address/Mask       Node          Port    Home
----------- ---------- ---------- ------------------ ------------- ------- ----
SE-ST-2820-03
           inter_1      up/up    10.103.8.23/16     SE-ST-2820-03-01
                                                                  e1a     true
           inter_2      up/up    10.103.8.24/16     SE-ST-2820-03-02
                                                                  e1a     true
2 entries were displayed.

※ もしオンプレONTAPにインタークラスタLIFが作成されていない場合は、net int createコマンドでインタークラスタLIFを2個(1ノードあたり1個)作成する必要があります。

ONTAP CLI - オンプレ
SE-ST-2820-03::*> net int create -vserver SE-ST-2820-03 -role intercluster -lif inter_1 -service-policy default-intercluster -address 10.103.8.23 -netmask 255.255.0.0 -home-port e1a -home-node SE-ST-2820-03-01
SE-ST-2820-03::*> net int create -vserver SE-ST-2820-03 -role intercluster -lif inter_2 -service-policy default-intercluster -address 10.103.8.24 -netmask 255.255.0.0 -home-port e1a -home-node SE-ST-2820-03-02

コマンドの引数に何を指定すればよいか迷った場合は「?」を入力すると、候補が存在するものは候補が表示されます。
net int create -vserver ?
net int create -vserver SE-ST-2820-01 -home-node ?
net int create -vserver SE-ST-2820-01 -home-node SE-ST-2820-03-01 -home-port ?
net int create -vserver SE-ST-2820-01 -home-node SE-ST-2820-03-01 -home-port e1a ?
何の引数を与えればわからない場合も「?」を指定します。

4. エクスポートポリシーでNFSアクセス元のIPからのアクセスを許可している

ONTAP CLI - FSx
FsxId01bbdf5e15791c3a5::> export-policy rule show
             Policy          Rule    Access   Client                RO
Vserver      Name            Index   Protocol Match                 Rule
------------ --------------- ------  -------- --------------------- ---------
p4cache3     default         1       any      0.0.0.0/0             any
p4cache3     fsx-root-volume-policy
                             1       any      0.0.0.0/0             any
2 entries were displayed.
ONTAP CLI - オンプレ
SE-ST-2820-03::*> export-policy rule show
             Policy          Rule    Access   Client                RO
Vserver      Name            Index   Protocol Match                 Rule
------------ --------------- ------  -------- --------------------- ---------
p4origin     default         1       any      0.0.0.0/0             any

設定が入っていない場合は、以下の流れで設定します。

  • 設定するvserver名の確認
  • export-policyとexport-policy ruleの設定状況の確認
  • 「default」のポリシーにルールを追加 (172.29.0.0/16から全NASプロトコルを許可)
  • 不要なルールの削除 (0.0.0.0/0のルールの削除)
ONTAP CLI - FSx
FsxId01bbdf5e15791c3a5::> vserver show
                               Admin      Operational Root
Vserver     Type    Subtype    State      State       Volume     Aggregate
----------- ------- ---------- ---------- ----------- ---------- ----------
p4cache3    data    default    running    running     p4cache3_  aggr1
                                                      root

FsxId01bbdf5e15791c3a5::> export-policy show
Vserver          Policy Name
---------------  -------------------
p4cache3         default
p4cache3         fsx-root-volume-policy
2 entries were displayed.

FsxId01bbdf5e15791c3a5::> export-policy rule show
             Policy          Rule    Access   Client                RO
Vserver      Name            Index   Protocol Match                 Rule
------------ --------------- ------  -------- --------------------- ---------
p4cache3     default         1       any      0.0.0.0/0             any
p4cache3     fsx-root-volume-policy
                             1       any      0.0.0.0/0             any
2 entries were displayed.

FsxId01bbdf5e15791c3a5::> export-policy rule create -policyname default -vserver p4cache3 -protocol any -clientmatch 172.29.0.0/16 -rorule any -rwrule any

FsxId01bbdf5e15791c3a5::> export-policy rule show
             Policy          Rule    Access   Client                RO
Vserver      Name            Index   Protocol Match                 Rule
------------ --------------- ------  -------- --------------------- ---------
p4cache3     default         1       any      0.0.0.0/0             any
p4cache3     default         2       any      172.29.0.0/16         any
p4cache3     fsx-root-volume-policy
                             1       any      0.0.0.0/0             any
3 entries were displayed.

FsxId01bbdf5e15791c3a5::> export-policy rule delete -vserver p4cache3 -policyname default -ruleindex 1

5. NFSプロトコルがONになっている

ONTAP CLI - FSx
FsxId01bbdf5e15791c3a5::> nfs show

Vserver: p4cache3

        General Access:  true
                    v3:  enabled
                  v4.0:  enabled
                   4.1:  enabled
                   UDP:  enabled
                   TCP:  enabled
                  RDMA:  enabled
  Default Windows User:  -
 Default Windows Group:  -
ONTAP CLI - オンプレ
SE-ST-2820-03::> nfs show

Vserver: p4origin

        General Access:  true
                    v3:  enabled
                  v4.0:  enabled
                   4.1:  enabled
                   UDP:  enabled
                   TCP:  enabled
                  RDMA:  enabled
  Default Windows User:  -
 Default Windows Group:  -

※ NFSプロトコルがOFFの場合は、vserver nfs on -vserver SVM_NAMEで有効化できます。

6. インタークラスタLIF間でPING疎通ができる
オンプレONTAPのとFSx for ONTAPの間でpingを実行して、すべてのIPと疎通できることを確認します。
以下ではFlexCache通信を行うインタークラスタLIF間の全ての組み合わせでpingを実行しています。

ONTAP CLI - FSxからのPING
FsxId01bbdf5e15791c3a5::> net ping -vserver FsxId01bbdf5e15791c3a5 -lif inter_1 -destination 10.103.8.23
  (network ping)
10.103.8.23 is alive

FsxId01bbdf5e15791c3a5::> net ping -vserver FsxId01bbdf5e15791c3a5 -lif inter_1 -destination 10.103.8.24
  (network ping)
10.103.8.24 is alive

FsxId01bbdf5e15791c3a5::> net ping -vserver FsxId01bbdf5e15791c3a5 -lif inter_2 -destination 10.103.8.23
  (network ping)
10.103.8.23 is alive

FsxId01bbdf5e15791c3a5::> net ping -vserver FsxId01bbdf5e15791c3a5 -lif inter_2 -destination 10.103.8.24
  (network ping)
10.103.8.24 is alive
ONTAP CLI - オンプレからのPING
SE-ST-2820-03::> net ping -vserver SE-ST-2820-03 -lif inter_1 -destination 172.29.1.237
  (network ping)
172.29.1.237 is alive

SE-ST-2820-03::> net ping -vserver SE-ST-2820-03 -lif inter_1 -destination 172.29.1.169
  (network ping)
172.29.1.169 is alive

SE-ST-2820-03::> net ping -vserver SE-ST-2820-03 -lif inter_2 -destination 172.29.1.237
  (network ping)
172.29.1.237 is alive

SE-ST-2820-03::> net ping -vserver SE-ST-2820-03 -lif inter_2 -destination 172.29.1.169
  (network ping)
172.29.1.169 is alive

このping確認の際、ついでにエンドツーエンドのMTU値も確認するとよいでしょう。レイテンシの低い近距離での接続であれば影響が見えにくいのですが、遠距離になるとストレージのMTUを小さくしないと性能が半分以下になることがあります。DFフラグを立てたpingを相互に実行することでパケット分割せずに通信できるパケットサイズを確認し、オンプレONTAPとFSxそれぞれのMTU設定を変更すると本来の性能を出せるようになります。

ONTAP CLI - FSxからのMTU値確認用ping
FsxId01bbdf5e15791c3a5::> net ping -vserver FsxId01bbdf5e15791c3a5 -lif inter_1 -verbose true -show-detail true -destination 10.103.8.23 -packet-size 1500 -disallow-fragmentation true
ONTAP CLI - オンプレからのMTU値確認用ping
SE-ST-2820-03::> net ping -vserver SE-ST-2820-03 -lif inter_1 -verbose true -show-detail true -destination 172.29.1.237 -packet-size 1500 -disallow-fragmentation true

引数の意味は以下に記載がありますが、
https://docs.netapp.com/us-en/ontap-cli/network-ping.html#parameters
-pachet-size と-disallow-fragmentation の引数は必ず付けてください。
また、-packet-size 1500と指定するとほぼ間違いなく疎通できないため、徐々に値を小さくしてpingが通るサイズを探ります。

こちらでテストした際には-packet-size 1260 程度で通ることを確認しましたが、オンプレとAWSの間にTransitGatewayが存在すると1140程度まで下げないと疎通できないこともありました。

最小MTU値を確認後、ストレージ側でMTUを設定します。
pingはICMPですがFlexCache通信はTCPのため、pingのpacket-sizeよりもTCPヘッダーの20バイト分引き算した値を設定します。

ストレージMTUの変更 - FSxのBroadcast Domain設定変更
FsxId01bbdf5e15791c3a5::> broadcast-domain show
  (network port broadcast-domain show)
IPspace Broadcast                                         Update
Name    Domain Name    MTU  Port List                     Status Details
------- ----------- ------  ----------------------------- --------------
Default Fsx           9001
                            FsxId01bbdf5e15791c3a5-02:e0e complete
                            FsxId01bbdf5e15791c3a5-01:e0e complete

FsxId01bbdf5e15791c3a5::> broadcast-domain modify -broadcast-domain Fsx -ipspace Default -mtu 1220
FsxId01bbdf5e15791c3a5::> broadcast-domain show
  (network port broadcast-domain show)
IPspace Broadcast                                         Update
Name    Domain Name    MTU  Port List                     Status Details
------- ----------- ------  ----------------------------- --------------
Default Fsx           1220
                            FsxId01bbdf5e15791c3a5-02:e0e complete
                            FsxId01bbdf5e15791c3a5-01:e0e complete

また、FSxからpingしたときとオンプレからpingしたときで疎通できるMTU値が異なることがあるため、必ず双方向でトライして小さいほうに合わせます。

オンプレ側も同様に設定します。
インタークラスタLIFが動作するポートを「net int show -role intercluster」で確認後、そのポートが所属するブロードキャストドメインを「broadcast-domain show」で確認してください。

ストレージMTUの変更 - オンプレONTAPのBroadcast Domain設定変更
SE-ST-2820-03::> net int show -role intercluster
  (network interface show)
            Logical    Status     Network            Current       Current Is
Vserver     Interface  Admin/Oper Address/Mask       Node          Port    Home
----------- ---------- ---------- ------------------ ------------- ------- ----
SE-ST-2820-03
            inter_1      up/up    10.103.8.23/16     SE-ST-2820-03-01
                                                                   e1a     true
            inter_2      up/up    10.103.8.24/16     SE-ST-2820-03-02
                                                                   e1a     true
2 entries were displayed.

SE-ST-2820-03::> broadcast-domain show
  (network port broadcast-domain show)
IPspace Broadcast                                         Update
Name    Domain Name    MTU  Port List                     Status Details
------- ----------- ------  ----------------------------- --------------
Cluster Cluster       9000
                            SE-ST-2820-03-01:e0c          complete
                            SE-ST-2820-03-01:e0d          complete
                            SE-ST-2820-03-02:e0c          complete
                            SE-ST-2820-03-02:e0d          complete
Default Default       1500
                            SE-ST-2820-03-01:e0M          complete
                            SE-ST-2820-03-02:e0M          complete
        bd_9000       9000
                            SE-ST-2820-03-01:e1a          complete
                            SE-ST-2820-03-02:e1a          complete
                            
SE-ST-2820-03::> broadcast-domain modify -broadcast-domain bd_9000 -ipspace Default -mtu 1220
D broadcast-domain show
  (network port broadcast-domain show)
IPspace Broadcast                                         Update
Name    Domain Name    MTU  Port List                     Status Details
------- ----------- ------  ----------------------------- --------------
Cluster Cluster       9000
                            SE-ST-2820-03-01:e0c          complete
                            SE-ST-2820-03-01:e0d          complete
                            SE-ST-2820-03-02:e0c          complete
                            SE-ST-2820-03-02:e0d          complete
Default Default       1500
                            SE-ST-2820-03-01:e0M          complete
                            SE-ST-2820-03-02:e0M          complete
        bd_9000       1220
                            SE-ST-2820-03-01:e1a          complete
                            SE-ST-2820-03-02:e1a          complete

オンプレ環境ではローカル環境からのNFS通信にはMTU9000を使い、クラウドと連携するFlexCache通信には低いMTUを指定したいこともあると思います。物理ポートが余っていれば、インタークラスタLIFを別の専用の物理ポートに移動して、ブロードキャストドメインも分離することで異なるMTU値を共存させることができます。

MTUを変更しただけでは動作中のインタークラスタLIFの通信に設定は反映されません。
TCP通信はMTU値をもとにTCP MSS値を決定し、TCP 3way handshake中にお互いのTCP MSS値を交換します。そのためすでにTCP接続が確立されている場合は後から変更ができないため、インタークラスタLIFのIPのdown -> upを行うことでTCP接続を再確立させ、反映させます。
ちなみにFSxのインタークラスタLIFはユーザによるdown -> upの操作ができない為、オンプレ側で実施します。
(FSx <-> FSx間でこの値を変更する場合は、FSxのテイクオーバー・ギブバックが行われるような操作をすることで反映させることが可能です。例:スループットキャパシティを上げる or 下げる、など)

オンプレのインタークラスタLIFのdown -> up
SE-ST-2820-03::> net int show -role intercluster
SE-ST-2820-03::> net int modify -vserver SE-ST-2820-03 -lif inter_1 -status-admin down
SE-ST-2820-03::> net int show -role intercluster
SE-ST-2820-03::> net int modify -vserver SE-ST-2820-03 -lif inter_1 -status-admin up
SE-ST-2820-03::> net int show -role intercluster
SE-ST-2820-03::> net int modify -vserver SE-ST-2820-03 -lif inter_2 -status-admin down
SE-ST-2820-03::> net int show -role intercluster
SE-ST-2820-03::> net int modify -vserver SE-ST-2820-03 -lif inter_2 -status-admin up
SE-ST-2820-03::> net int show -role intercluster

7. オンプレONTAPのバージョンが古すぎない
FSx for ONTAPは比較的新しいバージョンに自動的にアップデートされますが、オンプレONTAPが余りにも古すぎるとエラーになることがあります。基本的にフルサポートの残っているONTAPバージョン同士であれば問題ないのですが、もしエラーになる場合はオンプレONTAPをアップグレードしてみると改善されるかもしれません。

2.2.2. FlexCacheの設定

全体の流れとしては以下となります。

  • インタークラスタLIFのIPを使ったクラスタピアの作成
  • SVMピアの作成
  • オンプレストレージのオリジンボリュームを指定してキャッシュボリュームを作成
  • NFSクライアントからNFS Exportされているか確認

実際の設定手順はここでは記載しませんが、以下の公式ドキュメントに丁寧に書かれているので迷うことは少ないかと思います。
https://docs.aws.amazon.com/ja_jp/fsx/latest/ONTAPGuide/create-flexcache.html

FlexCacheの設定が終わったあとは、FSx for ONTAPでボリューム一覧とジャンクションパス(=マウントパス)を確認し、

ONTAP CLI - FSx (キャッシュ側のストレージ)
FsxId01bbdf5e15791c3a5::> vol show -vserver p4cache3 -fields junction-path
vserver  volume              junction-path
-------- ------------------- --------------------
p4cache3 fas2820_tools_cache /fas2820_tools_cache
p4cache3 p4_depot_cache      /p4_depot_cache
p4cache3 p4_depot_cache2     /p4_depot_cache2
p4cache3 p4cache3_root       /
p4cache3 vol1                /vol1
5 entries were displayed.

キャッシュの関係性を確認し、

ONTAP CLI - FSx (FlexCacheの関係性の確認)
FsxId01bbdf5e15791c3a5::> flexcache show -vserver p4cache3
  (volume flexcache show)
Vserver Volume      Size       Origin-Vserver Origin-Volume Origin-Cluster
------- ----------- ---------- -------------- ------------- --------------
p4cache3
        p4_depot_cache
                    800GB      p4origin       p4_depot_origin
                                                             SE-ST-2820-03
p4cache3
        p4_depot_cache2
                    300GB      p4origin       p4_depot_origin2
                                                             SE-ST-2820-03
p4cache3
        fas2820_tools_cache
                    100GB      p4origin       tools          SE-ST-2820-03
3 entries were displayed.

キャッシュボリュームのJunction-path(ストレージ内部のパス)で表示された領域が、NFSクライアントのLinuxから見えるか確認します。
(showmount -eの引数のIPは、FSxのNFS/SMBアクセス用のIPを指定します。)

Linux shell - FSxのNFS Export状況
[root@ip-172-29-1-247 ~]# showmount -e 172.29.1.240
Export list for 172.29.1.240:
/fas2820_tools_cache (everyone)
/p4_depot_cache      (everyone)
/p4_depot_cache2     (everyone)
/                    (everyone)
/vol1                (everyone)
Linux shell - オンプレのNFS Export状況
[root@samba ~]# showmount -e 10.103.8.25
Export list for 10.103.8.25:
/p4_depot_origin  (everyone)
/p4_depot_origin2 (everyone)
/                 (everyone)
/tools            (everyone)
/vol1             (everyone)

ちなみにPerforceサーバがマウントに使うストレージのIPアドレスを確認するには、「net int show -role data」を実行します。

ONTAP CLI - FSx
FsxId01bbdf5e15791c3a5::> net int show -role data
  (network interface show)
            Logical    Status     Network            Current       Current Is
Vserver     Interface  Admin/Oper Address/Mask       Node          Port    Home
----------- ---------- ---------- ------------------ ------------- ------- ----
p4cache3
            iscsi_1      up/up    172.29.1.77/24     FsxId01bbdf5e15791c3a5-01
                                                                   e0e     true
            iscsi_2      up/up    172.29.1.187/24    FsxId01bbdf5e15791c3a5-02
                                                                   e0e     true
            nfs_smb_management_1
                         up/up    172.29.1.240/24    FsxId01bbdf5e15791c3a5-01
                                                                   e0e     true
ONTAP CLI - オンプレ
SE-ST-2820-03::> net int show -role data
   (network interface show)
            Logical    Status     Network            Current       Current Is
Vserver     Interface  Admin/Oper Address/Mask       Node          Port    Home
----------- ---------- ---------- ------------------ ------------- ------- ----
p4origin
            data1        up/up    10.103.8.25/16     SE-ST-2820-03-01
                                                                   e1a     false

Perforceには、ここまでの作業で作成された以下のNFS共有を設定をします。

P4 コミットサーバがマウントするオリジンボリューム:
 SVM: p4origin
 Volume: p4_depot_origin
 マウント用IP: 10.103.8.25
P4 プロキシサーバがマウントするキャッシュボリューム:
 SVM: p4chache3
 Volume: p4_depot_cache
 マウント用IP: 172.29.1.240

2.3. P4 コミットサーバとP4 プロキシサーバのセットアップ

2.3.1. Perforce P4のバイナリダウンロード

以下からダウンロードが可能です。
Perforce社:
 https://www.perforce.com/products/helix-core/free-version-control
東陽テクニカ社:
 https://ss.toyo.co.jp/s/helix-core/download

Perforceサーバの実行ファイルのp4d or p4d.exeは、設定によってP4 コミットサーバ、P4 マスタサーバ、P4 エッジサーバ、P4 レプリカサーバなどの様々な役割を果たします

P4 プロキシの実行ファイルのp4p or p4p.exeは、P4 プロキシサーバ専用のバイナリです

東陽テクニカ社のナレッジは以下から検索できます。
https://ss.toyo.co.jp/s/helix-core

2.3.2. P4 コミットサーバのセットアップ手順

手順は以下のAWSブログが参考になりますが、
https://aws.amazon.com/jp/blogs/news/perforce-helix-core-on-aws-part2/
手元にあるEC2インスタンスにクイックにインストールしたい人向けに簡易手順を記載します。

P4 コミットサーバのセットアップは、バイナリをダウンロードして実効権限をつけ、p4dプロセスに引数を与えて起動するだけです。(Linux版の場合)

Linux版P4 コミットサーバの起動例

  1. ダウンロードしたバイナリのp4dを任意のパスにコピー
  2. 実効権限の付与 (chmod 755 ./p4d)
  3. p4dのルートパスの作成 (mkdir /mnt/p4d_root01) 
  4. ディポ用パスの作成 (mkdir /mnt/p4d_root01_depot01)
  5. ディポ用のオリジンストレージのNFSマウント
     (mount -t nfs 10.103.8.25:/p4_depot_origin /mnt/p4p_root01_depot01)
  6. P4 コミットサーバの起動
    ./p4d -p 1666 -r /mnt/p4d_root01/ -J journal -L /mnt/p4d_root01/p4d.log -v filesys.bufsize=10000000
    ※ 起動の引数について
    「-p」
    p4dのListenするIPとポート。P4 プロキシサーバやP4 エッジサーバ、P4Vなどからこのポートにアクセスを受ける。
    「-r」
    P4 コミットサーバのルートパス。この下にPerforceのデータベースファイルやDBのジャーナルログなどが生成されるので、サイズが大きくなることが予想される場合や性能が求められる場合は外部ストレージをマウントする。(この領域は冗長性のあるストレージをFC/iSCSIでマウントすると良い)
    「-J」
    P4 コミットサーバのDBのジャーナルファイルのファイル名。デフォルトでは$P4ROOT(=ここでは「-r」の引数の「/mnt/p4d_root01」)の下に、-Jの引数の文字列(=journal)のファイル名で生成される。
    「-L」
    P4 コミットサーバのログ出力先
    「-v filesys.bufsize=」
    その他オプション。

これ以外のp4dの引数は以下のマニュアルに記載されています。
https://help.perforce.com/helix-core/server-apps/p4sag/current/Content/P4SAG/appendix.p4d.html

p4dの「-v」の引数は、以下の一覧表のうち「Server」に該当するものが利用可能です。
https://help.perforce.com/helix-core/server-apps/cmdref/current/Content/CmdRef/configurables.alphabetical.html
{F89B1321-E2EE-4280-9B52-47C05B904747}.png

P4 エッジサーバやP4 スタンバイサーバなどを構築する場合は、P4 コミットサーバの構築はもっと複雑な手順になります。

2.3.3. P4 プロキシサーバのセットアップ手順

P4 プロキシサーバもP4 コミットサーバと同様に、バイナリをダウンロードして実効権限をつけ、コマンドの引数でp4pプロセスを起動するだけです。(Linux版の場合)

Linux版P4 プロキシサーバの起動例

  1. ダウンロードしたバイナリのp4pを任意のパスにコピー
  2. 実効権限の付与 (chmod 755 ./p4p)
  3. p4pのルートパスの作成 (mkdir /mnt/p4p_root01)
  4. キャッシュデータ格納用のパスの作成 (mkdir /mnt/p4p_root01_cache)
  5. キャッシュストレージのNFSマウント
    (mount -t nfs 172.29.1.240:/p4_depot_cache /mnt/p4p_root01_cache)
  6. P4 プロキシサーバの起動
    ./p4p -p 1667 -t 10.103.8.68:1666 -c -R /mnt/p4p_root01/ -r /mnt/p4p_root01_cache -L /mnt/p4p_root01/p4p_root01.log -v lbr.proxy.case=3 -v filesys.bufsize=10000000 -v lbr.bufsize=10000000 -v 1
    ※ 起動の引数について
    「-p」 p4pのListenするIPとポート (P4 クライアントからのアクセスを受け待ちするポート)
    「-t」 P4 コミットサーバのIPとポート
    「-c」 P4 コミットサーバとP4 プロキシサーバ間でネットワーク圧縮をしない
    「-R」 p4pのルートディレクトリ
    「-r」 p4pのキャッシュ格納先ディレクトリ
    「-L」 p4pログ出力先
    「-v lbr.proxy.case=3」 大文字・小文字判定をする設定(Windows版のP4 プロキシサーバを使う場合に要設定)
    「-v lbr.bufsize=」 サーバ上のバージョン化ファイルのアーカイブに対する読み書き操作のバッファサイズ
    「-v filesys.bufsize=」 P4 プロキシサーバのファイルI/Oのバッファサイズ

P4 プロキシのセットアップ手順は以下にあり、引数も解説されています。
https://help.perforce.com/helix-core/server-apps/p4sag/current/Content/P4SAG/chapter.proxy.html

「-v」の引数は、以下の一覧表のうち「Proxy」に該当する場合に利用可能なオプションとなります。
https://help.perforce.com/helix-core/server-apps/cmdref/current/Content/CmdRef/configurables.alphabetical.html#
{325DAC67-7277-4723-9D55-1B364EDCF929}.png

p4dやp4pの実行ユーザに関する注意事項が以下に記載されています。
https://help.perforce.com/helix-core/server-apps/p4sag/current/Content/P4SAG/install-linux-non-package-unprivileged-user.html

2.4. 設定のポイント

2.4.1. P4 コミットサーバとストレージ

P4 コミットサーバは「/mnt」などのパスの下にONTAPストレージをNFSマウントして、このマウントパスをPerforceのディポ領域としてあとから設定する必要があります。もし開発しているプロジェクトが複数あってバージョン管理も分けたい場合には、プロジェクトごとにストレージにボリュームを作成して/mntの下に別名でマウントしても良いでしょう。

ここではP4 コミットサーバにマウントしたNFS領域をリポジトリとして使えるようにするための「ディポ」の設定を紹介します。視覚的にわかりやすくするためP4VとP4AdminというGUIツールを使って説明します。

P4Admin / P4Vのバイナリは以下からダウンロードできます。
Perforce社 https://www.perforce.com/products/helix-core-apps/helix-visual-client-p4v
東陽テクニカ社 https://ss.toyo.co.jp/s/helix-core/download

Windows版のP4Admin / P4Vのインストーラーを起動すると、以下のようなメニューが表示され何をインストールするか選択できます。
image.png
ユーザPCにインストールする場合はP4Admin以外を選択します。

インストール終了後にP4Vを起動すると、P4 コミットサーバのIPとポート番号を入力する画面が表示されます。
image.png
接続先のP4 コミットサーバのIPとポートを入力したあとに、「User:」の欄は右側の「New...」から最初のユーザを作成します。
image.png
次に、「Workspace:」欄も「New...」からワークスペースを作っておきます。
ここまでの作業が終わると、別のGUIであるP4Adminを起動してP4 コミットサーバにログインできるようになります。

ちなみにP4Vの操作については以下の動画が参考になるので、字幕を日本語に変更してご覧ください。
Touring the P4V Interface
https://youtu.be/LFd3aWmMEtY?list=PLH3pq2J85xsOReRaoj_94072IWx6-E5EY

{2CC269B4-D80E-4C56-A9AC-9C15546963C2}.png

ここからは本題のディポの設定作業となります。
P4Vと一緒にインストールしたP4Adminを起動して先ほど作成したユーザとパスワードでログインしたあとに、以下の画面で「File」-> 「New」 -> 「Depot」を選択します。
{86F5CF8D-009D-4631-8A1B-14383EB9DACC}.png

任意のディポ名(プロジェクト名でも良い)を入力し、
{88CF5DAC-B3F1-499B-A80A-D5A4511E2236}.png

「Storage location for vesioned files」の欄でデータ格納場所を指定します。
{57E404CE-E948-4940-B67D-CF41D9770311}.png

この例では「/mnt/test_depot/...」というパスを入力していますが、この作業をする前にP4 コミットサーバ側で「/mnt/test_depot」の下にNFSストレージのマウントを済ませておく必要があります。
この欄の、「/mnt/test_depot/...」の...部分が気になると思いますが、このピリオド3つはBashでいうところの*(アスタリスク)と同じようなもの、と覚えておくと良いかもしれません。
そしてこの画面を「Apply」→「OK」で閉じれば、これ以降はディポ名をつかってユーザはPerforce内でデータにアクセスできるようになります(P4 クライアントにはマウントパスは隠ぺいされます)。このような仕組みによって1台のPerforceは複数のストレージを使い分けることができます。

ちなみに「Depot type」には様々な種類(local, stream, spec, remote, archive, unload, graphなど)がありますが、簡単な検証や動作確認をするだけであれば「local」を選択すると無難です。

以上で最低限のP4 コミットサーバの設定は終了です。

2.4.2. P4 プロキシサーバとストレージ

前章「2.2. P4 コミットサーバとP4 プロキシサーバのセットアップ」に記載した内容で網羅できているので、ここでは特に注意することはありません。

2.4.3. 追加で必要な設定

2.4.3.1. ユーザの作成

もしadminユーザ以外の一般ユーザを作成する必要があれば、P4AdminのGUIの「File」→「New...」→「User...」からユーザを追加します。
{14FF1044-0691-4E5F-BB11-F10FC01F2D2B}.png
作成されたユーザがP4Vを使ってP4 コミットサーバもしくはP4 プロキシサーバにアクセスしようとすると、初回はワークスペースの作成が必要になります。どのディポを使うか、そしてそのデータを自身のPCのどこにダウンロードしてくるかなどを設定します。

P4Adminを使ったユーザやグループの追加については以下が参考になります。

Perforce Helix Core Admin's Guide: How to Add Users and Groups in Helix Core
https://youtu.be/GH7gYeiyLLY?list=PLH3pq2J85xsOReRaoj_94072IWx6-E5EY
{E811A41E-07E7-4F1B-9988-9765BFECE710}.png

2.4.3.2. 並列処理のチューニング for P4 コミットサーバ

デフォルトではPerforceは並列度の低いモードで動作します。「net.parallel.max」という設定がデフォルトでは「0」のため、データのダウンロードやアップロードは1つのP4 クライアントは2並列で行えず、シリアル処理になります。
https://help.perforce.com/helix-core/server-apps/cmdref/current/Content/CmdRef/configurables.alphabetical.html#net.parallel.max
{97A463E2-290F-4DFB-B87E-C70BFC01CA76}.png
設定できる範囲は0~100で、0もしくは1は並列処理がOFFになります。アクセスしてくるクライアントマシンが少ない環境であればこの値は大きくしても問題ありませんが、クライアントが数十台規模になるとサーバがパンクするためデフォルトでは無効化されているようです。P4 コミットサーバのCPUコアが多い場合には、「net.parallel.max」をCPUコアと同じか2倍程度まで増やすことで効率的に動作するようになる可能性があります。

この「net.parallel.max」オプションはp4d起動時のコマンドで指定しても良いのですが、ここではコマンドから設定してみたいと思います。以下はP4 CLIをインストールしたWindows端末やLinux端末から実施でき、永続的な設定となります。

Linux shell - P4 コミットサーバのチューニング
Linux $ p4 -u admin -p 10.103.8.68:1666 configure set net.parallel.max=16

「-u」は、初回に作成したPeforceのスーパーユーザーを指定します。
「-p」は、P4 コミットサーバのIPとポート番号です。

ついでに自動的に並列処理が動作するように、以下の設定も入れます。

Linux shell - P4 コミットサーバのチューニング
Linux $ p4 -u admin -p 10.103.8.68:1666 configure set net.parallel.threads=4
Linux $ p4 -u admin -p 10.103.8.68:1666 configure set net.parallel.submit.threads=4

「net.parallel.max」に加えて上記threadsの設定が入っていると、クライアントとサーバがお互いに並列処理をサポートしていると自動的に並列で処理が行われます。もしこの設定が入っていないと、P4 CLIなどで手動で並列処理を指定しない限りはシリアル処理になるため、ストレージまで大きな負荷が落ちてきません。

これ以外に、ディポの圧縮設定をOFFにすることでも性能が向上しますが、設定方法は前出のAWSブログに記載したのでご確認ください。

2.4.3.3. 並列処理のチューニング for P4V

P4Vを使うと、バージョン管理したいファイルのシンク(サーバからのダウンロード)とサブミット(サーバへのアップロード)の操作が可能です。もちろんP4 CLIでもできますが、ここではP4Vを使った場合の注意点を記載します。
P4Vを利用したシンクは、前出のP4 コミットサーバの「net.parallel.threads」の値が2以上であれば並列処理されます。しかしサブミットは「net.parallel.submit.threads」が2以上の値でもP4Vはシリアル処理します。これはP4Vのデフォルト設定が原因ですが、P4Vの設定を変更することでサブミットも並列処理されるようになります。

{ED4DC818-1949-4943-A357-3921C32908E0}.png

これは検証でかなりハマったのでご注意ください。

3. テスト結果

3.1. テスト環境

P4 コミットサーバ
RockyLinux 8.9 4コア 8GB, 10Gbps, 200GB (オンプレ仮想Linuxマシン)

クラウド接続用のネットワーク回線
インターネットVPN回線 1Gbps Nuro光 Biz Standard (実効帯域 800~900Mbps)

P4 プロキシサーバ
Red Hat Enterprise Linux 9.4
c5n.xlarge, 4コア 10.5GB, 25Gbps, EBS 60GB (gp3, 10000iops, 1000Mbytes/s)

P4 クライアント(P4V)
Windows Server 2016
c5n.xlarge, 4コア 10.5GB, 25Gbps, EBS 60GB (gp3, 10000iops, 1000Mbytes/s)

ONTAPストレージ (オンプレオリジンストレージ)
FAS2820 4TB NL-SAS x12本、10Gbps NIC

FSx for ONTAP (クラウドキャッシュストレージ)
スループットキャパシティ:512MBytes/s
IOPS:10000
Performance Tier:1TB

3.2. テストパターン

AWS上に立てたP4Vから、5パターンのシンク(ダウンロード)操作をしてみました。

  1. オンプレのP4 コミットサーバにアクセス
  2. AWS上のP4 プロキシサーバにアクセス (EBSをキャッシュ領域として利用) - 1回目
  3. AWS上のP4 プロキシサーバにアクセス (EBSをキャッシュ領域として利用) - 2回目
  4. AWS上のP4 プロキシサーバにアクセス (FSxのキャッシュストレージを活用) - 1回目
  5. AWS上のP4 プロキシサーバにアクセス (FSxのキャッシュストレージを活用) - 2回目

このパターンのうち、3.と5.が高速になる想定です。

3.3. テスト結果

テスト結果は以下となりました。

テストパターン 転送レート(ビット) ボトルネック
1 400~800 Mbps インターネットVPN回線
2 300~700 Mbps インターネットVPN回線
3 3000~5800 Mbps EC2インスタンスのEBS帯域幅 ?
4 500~800 Mbps インターネットVPN回線
5 3000~4200 Mbps FSx fo ONTAPのスループット容量 ?

今回はP4 プロキシサーバとP4Vにc5n.xlargeを使ったため、キャッシュが効いている状態ではEBS帯域幅のボトルネックがあったと推測できます。

※ c5n.xlargeインスタンスのEBS帯域幅とNetwork性能
https://aws.amazon.com/jp/blogs/aws/new-c5n-instances-with-100-gbps-networking/
image.png

また、FSx for ONTAPも第一世代の512MBytes/sで作成したので、ビット換算で4Gbps程度の性能となりました。
https://docs.aws.amazon.com/ja_jp/fsx/latest/ONTAPGuide/performance.html
{4C2E99BA-16FF-475B-B57B-81B86E1CC9E2}.png

ちなみに、ここからさらに性能を上げるための対処方法とメリデメについて検討してみました。

テストパターン3の対処方法 - ストレージキャッシュを使わない場合

  1. P4 プロキシサーバのEC2インスタンスを大きなものにして、EBS帯域幅を広げる
    この検証ではgp3のEBSの性能は十分に設定してあるにもかかわらず、インスタンスのEBS帯域幅ネックになっているようでした。c5n.9xlargeなどの大きなインスタンスにするとEBS帯域幅は7Gbpsまで増やすことができます。しかし不要なvCPUやメモリなども増えてしまい、コストが急上昇する点に注意が必要です。
  2. EBSを使わずに、インスタンスストアをキャッシュ領域に使う
    EBS帯域幅がネックなのであれば、インスタンスストアを活用することで小さなインスタンスを使って性能を出すことができるようになります。m5dn系のインスタンスストアは割当たる容量が少ないため、
    image.png
    i3en系のインスタンスを利用すると安くて高速なP4 プロキシサーバを立てることができます。
    image.png
    ただし、頻繁にP4 プロキシサーバをシャットダウンする場合には運用が手間になるかもしれません。
    (起動時にインスタンスストアのフォーマットとマウントの作業が必要なため。)

テストパターン5の対処方法 - ストレージキャッシュを活用する場合

  1. FSx for ONTAPのスループット容量を増速する
    第一世代のFSx for ONTAPは128~2048MBytes/s、第二世代は386~6144MBytes/sの間で性能を変更できます。そのためEBS帯域幅が狭いインスタンスでもネットワーク帯域幅が大きければ性能を出しやすくなります。m5nやc5nといったインスタンスとFSx for ONTAPのストレージキャッシュと組み合わせることで低コストのまま性能を向上させることができるでしょう。

4. まとめ

今回はP4 コミットサーバとP4 プロキシサーバの連携手順からチューニングポイント、サイジングのコツなどを記載しました。もしリモート拠点が海外になる場合は、P4 プロキシサーバではなくてP4 エッジサーバとの連携が必要になることもありますが、その検証も終わっているので機会があればどこかで共有したいと考えています。

この内容がPerforceをこれから使ってみたい方や、リモート拠点とのデータ連携に課題を抱えている方の参考になれば幸いです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?