Red Hat Training

A Red Hat training course is available for RHEL 8

15.8. 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
  • vfio_ap カーネルモジュールが読み込まれている。確認するには、次のコマンドを実行します。

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

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

    # modprobe vfio_ap
  • s390utils バージョンは ap 処理をサポートしています。

    # lszdev --list-types
    ...
    ap           Cryptographic Adjunct Processor (AP) device
    ...

手順

  1. 仮想マシンに割り当てるデバイスの 10 進数値を取得します。たとえば、デバイス 05.0004 および 05.00ab の場合は以下のようになります。

    # echo "obase=10; ibase=16; 04" | bc
    4
    # echo "obase=10; ibase=16; AB" | bc
    171
  2. ホストで、デバイスを vfio-ap ドライバーに再割り当てします。

    # chzdev -t ap apmask=-5 aqmask=-4,-171
    注記

    デバイスを永続的に割り当てるには、-p フラグを使用します。

  3. 暗号化デバイスが正しく再割り当てされていることを確認します。

    # 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 に変更されると、再割り当ては成功します。

  4. 新しい仲介デバイスを定義する XML スニペットを作成します。

    以下の例では、永続的な仲介デバイスを定義してそのデバイスにキューを割り当てます。具体的には、この例の vfio_ap.xml XML スニペットは、ドメインアダプター 0x05、ドメインキュー 0x0004 および 0x00ab、および制御ドメイン 0x00ab を仲介デバイスに割り当てます。

    # vim vfio_ap.xml
    
    <device>
      <parent>ap_matrix</parent>
      <capability type="mdev">
        <type id="vfio_ap-passthrough"/>
        <attr name='assign_adapter' value='0x05'/>
        <attr name='assign_domain' value='0x0004'/>
        <attr name='assign_domain' value='0x00ab'/>
        <attr name='assign_control_domain' value='0x00ab'/>
      </capability>
    </device>
  5. vfio_ap.xml XML スニペットから新しい仲介デバイスを作成します。

    # virsh nodedev-define vfio_ap.xml
    Node device 'mdev_8f9c4a73_1411_48d2_895d_34db9ac18f85_matrix' defined from 'vfio_ap.xml'
  6. 前の手順で作成した仲介デバイス (この場合は mdev_8f9c4a73_1411_48d2_895d_34db9ac18f85_matrix) を起動します。

    # virsh nodedev-start mdev_8f9c4a73_1411_48d2_895d_34db9ac18f85_matrix
    Device mdev_8f9c4a73_1411_48d2_895d_34db9ac18f85_matrix started
  7. 設定が正しく適用されたことを確認します。

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

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

  8. 仲介デバイスを仮想マシンに接続します。

    1. 作成した仲介デバイスの UUID を表示し、次の手順のために保存します。

      # virsh nodedev-dumpxml mdev_8f9c4a73_1411_48d2_895d_34db9ac18f85_matrix
      
      <device>
        <name>mdev_8f9c4a73_1411_48d2_895d_34db9ac18f85_matrix</name>
        <parent>ap_matrix</parent>
        <capability type='mdev'>
          <type id='vfio_ap-passthrough'/>
          <uuid>8f9c4a73-1411-48d2-895d-34db9ac18f85</uuid>
          <iommuGroup number='0'/>
          <attr name='assign_adapter' value='0x05'/>
          <attr name='assign_domain' value='0x0004'/>
          <attr name='assign_domain' value='0x00ab'/>
          <attr name='assign_control_domain' value='0x00ab'/>
        </capability>
      </device>
    2. 暗号化カード仲介デバイスの XML ファイルを作成して開きます。以下に例を示します。

      # vim crypto-dev.xml
    3. 以下の行をファイルに追加して保存します。uuid 値は、手順 a で取得した UUID に置き換えます。

      <hostdev mode='subsystem' type='mdev' managed='no' model='vfio-ap'>
        <source>
          <address uuid='8f9c4a73-1411-48d2-895d-34db9ac18f85'/>
        </source>
      </hostdev>
    4. XML ファイルを使用して、仲介デバイスを仮想マシンに接続します。たとえば、crypto-dev.xml ファイルで定義されたデバイスを、実行中の testguest1 仮想マシンに永続的に接続するには、次のコマンドを実行します。

      # virsh attach-device testguest1 crypto-dev.xml --live --config

      --live オプションは、実行中の仮想マシンにのみデバイスを接続します。再起動後に永続性は維持されません。--config オプションは、設定の変更を永続化します。--config オプションのみを使用すると、デバイスをシャットダウンした仮想マシンに接続できます。

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

検証

  1. ゲストオペレーティングシステムが、割り当てられた暗号化デバイスを検出していることを確認します。

    # 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

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

  2. ゲストオペレーティングシステムで、制御ドメインが暗号化デバイスに正常に割り当てられていることを確認します。

    # lszcrypt -d C
    
    DOMAIN 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f
    ------------------------------------------------------
        00  .  .  .  .  U  .  .  .  .  .  .  .  .  .  .  .
        10  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .
        20  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .
        30  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .
        40  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .
        50  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .
        60  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .
        70  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .
        80  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .
        90  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .
        a0  .  .  .  .  .  .  .  .  .  .  .  B  .  .  .  .
        b0  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .
        c0  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .
        d0  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .
        e0  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .
        f0  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .
    ------------------------------------------------------
    C: Control domain
    U: Usage domain
    B: Both (Control + Usage domain)

    lszcrypt -d C で暗号化デバイスマトリックスに UB の交差が表示された場合、制御ドメインの割り当ては成功しています。