13.8. IBM Z의 가상 머신에 DASD 장치 연결

vfio-ccw 기능을 사용하면 DASD(직접 액세스 스토리지 장치)를 IBM Z 호스트의 VM(가상 머신)에 중재된 장치로 할당할 수 있습니다. 예를 들어 VM이 z/OS 데이터 집합에 액세스하거나 할당된 DASD를 z/OS 머신에 제공할 수 있습니다.

사전 요구 사항

  • 호스트 시스템은 IBM Z 하드웨어 아키텍처를 사용하고 있으며 FICON 프로토콜을 지원합니다.
  • 대상 VM은 Linux 게스트 운영 체제를 사용합니다.
  • mdevctl 패키지가 설치됩니다.

    # dnf install mdevctl
  • driverctl 패키지가 설치되어 있습니다.

    # dnf install driverctl
  • 필요한 커널 모듈이 호스트에 로드되었습니다. 확인하려면 다음을 사용합니다.

    # lsmod | grep vfio

    출력에는 다음 모듈이 포함되어야 합니다.

    • vfio_ccw
    • vfio_mdev
    • vfio_iommu_type1
  • VM에서 독점적으로 사용할 수 있는 예비 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. 게스트 OS에서 VM 의 커널 명령줄을 편집하고 아직 없는 경우 cio_ignore= 로 시작하는 줄에 ! 기호가 있는 장치 식별자를 추가합니다.

      cio_ignore=all,!condev,!0.0.002c
    3. 호스트에서 1단계를 반복하여 하위 채널 식별자를 가져옵니다.
  3. 하위 채널을 vfio_ccw passthrough 드라이버에 바인딩합니다.

    # driverctl -b css set-override 0.0.29a8 vfio_ccw
    참고

    그러면 0.0.29a8 하위 채널을 vfio_ccw 에 영구적으로 바인딩하므로 호스트에서 DASD를 사용할 수 없습니다. 호스트에서 장치를 사용해야 하는 경우 먼저 'vfio_ccw'에 대한 자동 바인딩을 제거하고 하위 채널을 기본 드라이버에 다시 바인딩해야 합니다.

    # driverctl -b cs unset-override 0.0.29a8

  4. UUID를 생성합니다.

    # uuidgen
    30820a6f-b1a5-4503-91ca-0c10ba12345a
  5. 생성된 UUID를 사용하여 DASD 중재 장치를 생성합니다.

    # mdevctl start --uuid 30820a6f-b1a5-4503-91ca-0c10ba12345a --parent 0.0.29a8 --type vfio_ccw-io
  6. 중재된 장치를 영구적으로 만듭니다.

    # mdevctl define --auto --uuid 30820a6f-b1a5-4503-91ca-0c10ba12345a
  7. 실행 중인 경우 VM을 종료합니다.
  8. 중재된 장치를 VM에 연결합니다. 이렇게 하려면 virsh edit 유틸리티를 사용하여 VM의 XML 구성을 편집하고, 다음 섹션을 XML에 추가하고, uuid 값을 이전 단계에서 생성한 UUID로 교체합니다.

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

검증

  1. 중재된 DASD 장치에 할당된 libvirt 의 식별자를 가져옵니다. 이렇게 하려면 VM의 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. VM을 시작하고 게스트 OS에 로그인합니다.
  3. 게스트 OS에서 DASD 장치가 나열되었는지 확인합니다. 예를 들면 다음과 같습니다.

    # lscss | grep 0.0.0009
    0.0.0009 0.0.0007  3390/0c 3990/e9      f0  f0  ff   12212231 00000000
  4. 게스트 OS에서 장치를 온라인으로 설정합니다. 예를 들면 다음과 같습니다.

    # chccwdev -e 0.0009
    Setting device 0.0.0009 online
    Done