14.8. IBM Z の仮想マシンへの DASD デバイスの割り当て
vfio-ccw
機能を使用すると、直接アクセスストレージデバイス (DASD) を仲介デバイスとして IBM Z ホスト上の仮想マシンに割り当てることができます。これにより、たとえば仮想マシンは z/OS データセットにアクセスできるか、割り当てられた DASD を z/OS マシンに提供できるようになります。
前提条件
- FICON プロトコルでサポートされる IBM Z ハードウェアアーキテクチャーを備えたシステムがある。
- Linux オペレーティングシステムのターゲット仮想マシンがある。
driverctl パッケージがインストールされている。
# dnf install driverctl
ホストに必要な
vfio
カーネルモジュールがロードされている。# lsmod | grep vfio
このコマンドの出力には、以下のモジュールが含まれている必要があります。
-
vfio_ccw
-
vfio_mdev
-
vfio_iommu_type1
-
仮想マシンによる排他的使用のために予備の DASD デバイスがあり、そのデバイスの識別子を把握している。
次の手順では、例として
0.0.002c
を使用しています。コマンドを実行する場合は、0.0.002c
を DASD デバイスーの ID に置き換えます。
手順
DASD デバイスのサブチャネル識別子を取得します。
# lscss -d 0.0.002c Device Subchan. DevType CU Type Use PIM PAM POM CHPIDs ---------------------------------------------------------------------- 0.0.002c 0.0.29a8 3390/0c 3990/e9 yes f0 f0 ff 02111221 00000000
この例では、サブチャンネル ID は
0.0.29a8
として検出されます。以下のコマンドでは、0.0.29a8
を、検出されたデバイスのサブチャンネル ID に置き換えます。前の手順の
lscss
コマンドでヘッダー出力のみが表示され、デバイスインフォメーションが表示されない場合は、以下の手順を実行します。cio_ignore
リストからデバイスを削除します。# cio_ignore -r 0.0.002c
ゲスト OS で、仮想マシンの edit the kernel command line を編集し、
!
マークを使用して、cio_ignore=
で始まる行にデバイス識別子を追加します (まだ存在しない場合)。cio_ignore=all,!condev,!0.0.002c
- ホストで手順 1 を繰り返し、サブチャネル識別子を取得します。
サブチャネルは
vfio_ccw
パススルードライバーにバインドします。# driverctl -b css set-override 0.0.29a8 vfio_ccw
注記これにより、0.0.29a8 サブチャンネルが
vfio_ccw
に永続的にバインドされます。つまり、DASD はホストコンピューターでは使用できなくなります。ホストでデバイスを使用する必要がある場合は、まず 'vfio_ccw' への自動バインディングを削除し、サブチャンネルをデフォルトドライバーに再バインドする必要があります。# driverctl -b css unset-override 0.0.29a8
DASD 仲介デバイスを定義して起動します。
# cat nodedev.xml <device> <parent>css_0_0_29a8</parent> <capability type="mdev"> <type id="vfio_ccw-io"/> </capability> </device> # virsh nodedev-define nodedev.xml Node device 'mdev_30820a6f_b1a5_4503_91ca_0c10ba12345a_0_0_29a8' defined from 'nodedev.xml' # virsh nodedev-start mdev_30820a6f_b1a5_4503_91ca_0c10ba12345a_0_0_29a8 Device mdev_30820a6f_b1a5_4503_91ca_0c10ba12345a_0_0_29a8 started
- 実行中の場合は、仮想マシンをシャットダウンします。
以前に定義したデバイスの UUID を表示し、次の手順のために保存します。
# virsh nodedev-dumpxml mdev_30820a6f_b1a5_4503_91ca_0c10ba12345a_0_0_29a8 <device> <name>mdev_30820a6f_b1a5_4503_91ca_0c10ba12345a_0_0_29a8</name> <parent>css_0_0_29a8</parent> <capability type='mdev'> <type id='vfio_ccw-io'/> <uuid>30820a6f-b1a5-4503-91ca-0c10ba12345a</uuid> <iommuGroup number='0'/> <attr name='assign_adapter' value='0x02'/> <attr name='assign_domain' value='0x002b'/> </capability> </device>
仲介デバイスを仮想マシンに接続します。これを行うには、
virsh edit
ユーティリティーを使用して仮想マシンの XML 設定を編集し、以下のセクションを XML に追加します。uuid
の値は、前の手順で取得した UUID に置き換えます。<hostdev mode='subsystem' type='mdev' model='vfio-ccw'> <source> <address uuid="30820a6f-b1a5-4503-91ca-0c10ba12345a"/> </source> </hostdev>
オプション: ホストの起動時に仲介デバイスが自動的に起動するように設定します。
# virsh nodedev-autostart mdev_30820a6f_b1a5_4503_91ca_0c10ba12345a_0_0_29a8
検証
仲介デバイスが正しく設定されていることを確認します。
# virsh nodedev-info mdev_30820a6f_b1a5_4503_91ca_0c10ba12345a_0_0_29a8 Name: mdev_30820a6f_b1a5_4503_91ca_0c10ba12345a_0_0_29a8 Parent: css_0_0_0121 Active: yes Persistent: yes Autostart: yes
libvirt
が仲介 DASD デバイスに割り当てた識別子を取得します。これを行うには、仮想マシンの XML 設定を表示して、vfio-ccw
デバイスを見つけます。# virsh dumpxml vm-name <domain> [...] <hostdev mode='subsystem' type='mdev' managed='no' model='vfio-ccw'> <source> <address uuid='10620d2f-ed4d-437b-8aff-beda461541f9'/> </source> <alias name='hostdev0'/> <address type='ccw' cssid='0xfe' ssid='0x0' devno='0x0009'/> </hostdev> [...] </domain>
この例では、デバイスに割り当てられた識別子は
0.0.0009
です。- 仮想マシンを起動し、ゲスト OS にログインします。
ゲスト OS で、DASD デバイスがリストされていることを確認します。以下に例を示します。
# lscss | grep 0.0.0009 0.0.0009 0.0.0007 3390/0c 3990/e9 f0 f0 ff 12212231 00000000
ゲスト OS で、デバイスをオンラインに設定します。以下に例を示します。
# chccwdev -e 0.0009 Setting device 0.0.0009 online Done