Red Hat Training

A Red Hat training course is available for RHEL 8

10.9. IBM Z の仮想マシンへの DASD デバイスの割り当て

DASD (ダイレクトアクセスストレージデバイス) は、特定のストレージ機能を提供します。この vfio-ccw 機能を使用すると、DASD を仲介デバイスとして IBM Z ホストの仮想マシンに割り当てることができます。たとえば、仮想マシンは z/OS データセットにアクセスするか、割り当てられた DASD を z/OS マシンと共有できます。

前提条件

  • お使いのホストシステムが IBM Z ハードウェアアーキテクチャーを使用し、FICON プロトコルをサポートしている。
  • ターゲットの仮想マシンが Linux ゲストオペレーティングシステムを使用している。
  • mdevctl パッケージがインストールされている。

    # yum install mdevctl
  • ホストに必要なカーネルモジュールがロードされている。確認するには、次のコマンドを実行します。

    # lsmod | grep vfio

    出力に以下のモジュールが含まれている必要があります。

    • vfio_ccw
    • vfio_mdev
    • vfio_iommu_type1
  • 仮想マシンで専用で使用できる DASD デバイスがあり、デバイスの識別子を知っている必要があります。

    この手順では、0.0.002c を例として使用しています。コマンドを実行する際に、0.0.002c を DASD デバイスの識別子に置き換えます。

手順

  1. 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

    この例では、サブチャネル識別子は 0.0.29a8 として検出されます。本手順の以下のコマンドでは、0.0.29a8 は、お使いのデバイスで検出されたサブチャネル識別子に置き換えます。

  2. 前の手順で lscss コマンドでヘッダー出力とデバイス情報のみが表示されていない場合は、以下の手順を実行してください。

    1. cio_ignore 一覧からデバイスを削除します。

      # cio_ignore -r 0.0.002c
    2. 仮想マシンのカーネルコマンドラインを編集し、cio_ignore=(すでに存在しない場合)で始まる行に ! mark のデバイス識別子を追加します。

      cio_ignore=all,!condev,!0.0.002c
    3. 直前の手順を繰り返し、サブチャネル ID を取得します。
  3. ホストのドライバーから DASD デバイスのバインドを解除します。

    # echo 0.0.002c > /sys/bus/ccw/devices/0.0.002c/driver/unbind
  4. I/O サブチャネルドライバーからサブチャネルのバインドを解除します。

    # echo 0.0.29a8 > /sys/bus/css/devices/0.0.29a8/driver/unbind
  5. サブチャネルは 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

  6. UUID を生成します。

    # uuidgen
    30820a6f-b1a5-4503-91ca-0c10ba12345a
  7. 生成された UUID を使用して DASD 仲介デバイスを作成します。

    # mdevctl start --uuid 30820a6f-b1a5-4503-91ca-0c10ba12345a --parent 0.0.29a8 --type vfio_ccw-io
  8. 仲介デバイスを永続化します。

    # mdevctl define --auto --uuid 30820a6f-b1a5-4503-91ca-0c10ba12345a
  9. 仲介デバイスを仮想マシンに接続します。これを行うには、virsh edit ユーティリティーを使用して仮想マシンの XML 設定を編集し、以下のセクションを XML に追加します。uuid の値は、前の手順で生成した UUID に置き換えます。

    <hostdev mode='subsystem' type='mdev' model='vfio-ccw'>
      <source>
        <address uuid="30820a6f-b1a5-4503-91ca-0c10ba12345a"/>
      </source>
    </hostdev>

検証

  1. 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 です。

  2. 仮想マシンのゲストオペレーティングシステムにログインし、デバイスが一覧表示されていることを確認します。以下に例を示します。

    # lscss | grep 0.0.0009
    0.0.0009 0.0.0007  3390/0c 3990/e9      f0  f0  ff   12212231 00000000
  3. デバイスをオンラインに設定します。以下に例を示します。

    # chccwdev -e 0.0009
    Setting device 0.0.0009 online
    Done