Red Hat Training

A Red Hat training course is available for RHEL 8

15.7. IBM Z 上の仮想マシンへの暗号化コプロセッサーの割り当て

IBM Z ホストの仮想マシンでハードウェア暗号化を使用するには、暗号化プロセッサーデバイスから仲介デバイスを作成して目的の仮想マシンに割り当てます。詳細な手順は、以下を参照してください。

前提条件

  • お使いのホストを IBM Z ハードウェアで実行している。
  • 暗号化コプロセッサーは、デバイスの割り当てと互換性があります。これを確認するには、コプロセッサーの タイプCEX4 以降として表示されているかをチェックします。

    # lszcrypt -V
    
    CARD.DOMAIN TYPE  MODE        STATUS  REQUESTS  PENDING HWTYPE QDEPTH FUNCTIONS  DRIVER
    --------------------------------------------------------------------------------------------
    05         CEX5C CCA-Coproc  online         1        0     11     08 S--D--N--  cex4card
    05.0004    CEX5C CCA-Coproc  online         1        0     11     08 S--D--N--  cex4queue
    05.00ab    CEX5C CCA-Coproc  online         1        0     11     08 S--D--N--  cex4queue
  • mdevctl パッケージがインストールされている。
  • vfio_ap カーネルモジュールが読み込まれている。確認するには、次のコマンドを実行します。

    # lsmod | grep vfio_ap
    vfio_ap         24576  0
    [...]

    モジュールを読み込むには、以下を使用します。

    # modprobe vfio_ap

手順

  1. ホストで、暗号化デバイスを vfio-ap ドライバーに再割り当てします。以下の例では、ビットマスク ID が (0x05, 0x0004)(0x05, 0x00ab) の暗号化デバイス 2 つを vfio-ap に割り当てます。

    #  echo -0x05 > /sys/bus/ap/apmask
    #  echo -0x0004, -0x00ab > /sys/bus/ap/aqmask

    ビットマスク ID の値を特定する方法については、IBM の KVM Virtual Server Management ドキュメントの「Preparing pass-through devices for cryptographic adapter resources」を参照してください。

  2. 暗号化デバイスが正しく再度割り当てられたことを確認します。

    # lszcrypt -V
    
    CARD.DOMAIN TYPE  MODE        STATUS  REQUESTS  PENDING HWTYPE QDEPTH FUNCTIONS  DRIVER
    --------------------------------------------------------------------------------------------
    05          CEX5C CCA-Coproc  -              1        0     11     08 S--D--N--  cex4card
    05.0004     CEX5C CCA-Coproc  -              1        0     11     08 S--D--N--  vfio_ap
    05.00ab     CEX5C CCA-Coproc  -              1        0     11     08 S--D--N--  vfio_ap

    ドメインキューの DRIVER の値が vfio_ap に変更されると、再割り当ては成功します。

  3. デバイスの UUID を生成します。

    # uuidgen
    669d9b23-fe1b-4ecb-be08-a2fabca99b71

    以下の手順では、669d9b23-fe1b-4ecb-be08-a2fabca99b71 は生成した UUID に置き換えます。

  4. UUID を使用して、新しい vfio_ap デバイスを作成します。

    以下の例では、永続的な仲介デバイスを作成してそのデバイスにキューを割り当てます。たとえば、以下のコマンドではドメインアダプター (0x05) およびドメインキュー (0x0004 および 0x00ab) をデバイス (669d9b23-fe1b-4ecb-be08-a2fabca99b71) に割り当てます。

    # mdevctl define --uuid 669d9b23-fe1b-4ecb-be08-a2fabca99b71 --parent matrix --type vfio_ap-passthrough
    # mdevctl modify --uuid 669d9b23-fe1b-4ecb-be08-a2fabca99b71 --addattr=assign_adapter --value=0x05
    # mdevctl modify --uuid 669d9b23-fe1b-4ecb-be08-a2fabca99b71 --addattr=assign_domain --value=0x0004
    # mdevctl modify --uuid 669d9b23-fe1b-4ecb-be08-a2fabca99b71 --addattr=assign_domain --value=0x00ab
  5. 仲介デバイスを起動します。

    # mdevctl start --uuid 669d9b23-fe1b-4ecb-be08-a2fabca99b71
  6. 設定が正しく適用されたことを確認します。

    # cat /sys/devices/vfio_ap/matrix/mdev_supported_types/vfio_ap-passthrough/devices/669d9b23-fe1b-4ecb-be08-a2fabca99b71
    05.0004
    05.00ab

    出力に vfio-ap に割り当てられたキューの数値が含まれる場合には、プロセスは成功です。

  7. virsh edit コマンドを使用して、暗号化デバイスを使用する仮想マシンの XML 設定を開きます。

    # virsh edit vm-name
  8. 以下の行を XML 設定の <devices> セクションに追加して保存します。

    <hostdev mode='subsystem' type='mdev' managed='no' model='vfio-ap'>
      <source>
        <address uuid='669d9b23-fe1b-4ecb-be08-a2fabca99b71'/>
      </source>
    </hostdev>

    各 UUID は、一度に 1 つの仮想マシンにしか割り当てることができないのでご注意ください。

検証

  1. 仲介デバイスを割り当てた仮想マシンを起動します。
  2. ゲストオペレーティングシステム (OS) の起動後に、割り当てられた暗号化デバイスを検出するようにしてください。

    # lszcrypt -V
    
    CARD.DOMAIN TYPE  MODE        STATUS  REQUESTS  PENDING HWTYPE QDEPTH FUNCTIONS  DRIVER
    --------------------------------------------------------------------------------------------
    05          CEX5C CCA-Coproc  online         1        0     11     08 S--D--N--  cex4card
    05.0004     CEX5C CCA-Coproc  online         1        0     11     08 S--D--N--  cex4queue
    05.00ab     CEX5C CCA-Coproc  online         1        0     11     08 S--D--N--  cex4queue

    ゲスト OS でのこのコマンドの出力は、利用可能な暗号化コプロセッサーデバイスが同じホストの論理パーティションで表示される出力と同じです。