18.9. IBM Z 上の仮想マシンへの暗号化コプロセッサーの割り当て
IBM Z ホストの仮想マシンでハードウェア暗号化を使用するには、暗号化プロセッサーデバイスから仲介デバイスを作成して目的の仮想マシンに割り当てます。詳細な手順は、以下を参照してください。
前提条件
- お使いのホストを IBM Z ハードウェアで実行している。
暗号化コプロセッサーがデバイスの割り当てに対応している。これを確認するには、コプロセッサーの
typeに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-- cex4queuevfio_apカーネルモジュールが読み込まれている。確認するには、次のコマンドを実行します。# lsmod | grep vfio_ap vfio_ap 24576 0 [...]モジュールを読み込むには、以下を使用します。
# modprobe vfio_aps390utilsバージョンはap処理をサポートしています。# lszdev --list-types ... ap Cryptographic Adjunct Processor (AP) device ...
手順
仮想マシンに割り当てるデバイスの 10 進数値を取得します。たとえば、デバイス
05.0004および05.00abの場合は以下のようになります。# echo "obase=10; ibase=16; 04" | bc 4 # echo "obase=10; ibase=16; AB" | bc 171ホストで、デバイスを
vfio-apドライバーに再割り当てします。# chzdev -t ap apmask=-5 aqmask=-4,-171注記デバイスを永続的に割り当てるには、
-pフラグを使用します。暗号化デバイスが正しく再割り当てされていることを確認します。
# 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に変更されると、再割り当ては成功します。新しい仲介デバイスを定義する XML スニペットを作成します。
以下の例では、永続的な仲介デバイスを定義してそのデバイスにキューを割り当てます。具体的には、この例の
vfio_ap.xmlXML スニペットは、ドメインアダプター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>vfio_ap.xmlXML スニペットから新しい仲介デバイスを作成します。# virsh nodedev-define vfio_ap.xml Node device 'mdev_8f9c4a73_1411_48d2_895d_34db9ac18f85_matrix' defined from 'vfio_ap.xml'前の手順で作成した仲介デバイス (この場合は
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設定が正しく適用されたことを確認します。
# 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に割り当てられたキューの数値が含まれる場合には、プロセスは成功です。仲介デバイスを仮想マシンに接続します。
作成した仲介デバイスの 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>暗号化カード仲介デバイスの XML ファイルを作成して開きます。以下に例を示します。
# vim crypto-dev.xml以下の行をファイルに追加して保存します。
uuid値は、手順 a で取得した UUID に置き換えます。<hostdev mode='subsystem' type='mdev' managed='no' model='vfio-ap'> <source> <address uuid='8f9c4a73-1411-48d2-895d-34db9ac18f85'/> </source> </hostdev>XML ファイルを使用して、仲介デバイスを仮想マシンに接続します。たとえば、
crypto-dev.xmlファイルで定義されたデバイスを、実行中のtestguest1仮想マシンに永続的に接続するには、次のコマンドを実行します。# virsh attach-device testguest1 crypto-dev.xml --live --config--liveオプションは、実行中の仮想マシンにのみデバイスを接続します。再起動後に永続性は維持されません。--configオプションは、設定の変更を永続化します。--configオプションのみを使用すると、デバイスをシャットダウンした仮想マシンに接続できます。各 UUID は、一度に 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ゲストオペレーティングシステムでのこのコマンドの出力は、利用可能な暗号化コプロセッサーデバイスが同じホストの論理パーティションで表示される出力と同じです。
ゲストオペレーティングシステムで、制御ドメインが暗号化デバイスに正常に割り当てられていることを確認します。
# 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で暗号化デバイスマトリックスにUとBの交差が表示された場合、制御ドメインの割り当ては成功しています。