Logical Domains 1.2 管理ガイド

第 5 章 I/O ドメインの設定

この章では、Logical Domains 環境で追加の I/O ドメインを設定する方法について説明します。

この章の内容は次のとおりです。

I/O ドメインと PCI EXPRESS バス

I/O ドメインとは、物理 I/O デバイスに対する直接の所有権と直接のアクセス権を持つドメインです。PCI EXPRESS (PCI-E) バスをドメインに割り当てることで、I/O ドメインを作成できます。サーバー上に存在する PCI-E バスは、pci@780 (bus_a)、pci@400 (pci_0) などの名前で識別されます。それぞれのバスを別々のドメインに割り当てるには、ldm コマンドを使用します。

作成できる I/O ドメインの最大数は、サーバー上で使用可能な PCI-E バスの数に応じて異なります。Sun UltraSPARC T1 ベースのサーバーは、最大 2 つの PCI-E バスを搭載しているため、最大 2 つの I/O ドメインを構成できます。Sun UltraSPARC T2 Plus ベースのサーバーは、最大 4 つの PCI-E バスを搭載しているため、最大 4 つの I/O ドメインを構成できます。


注 –

Sun SPARC Enterprise T5120 サーバーや T5220 サーバーなどの Sun UltraSPARC T2 ベースのサーバーには、PCI-E バスは 1 つしかありません。そのため、このようなサーバーでは、物理デバイスに対する直接のアクセス権を持つドメインを複数構成することはできません。ただし、新しい I/O ドメインを構成する代わりに、ネットワークインタフェースユニット (NIU) をドメインに割り当てることができます。「NIU ハイブリッド I/O の使用」 を参照してください。


サーバーで最初から Logical Domains が構成されている場合や、factory-default 構成を使用している場合、制御ドメインはすべての物理デバイスリソースにアクセスできます。つまり、制御 (primary) ドメインがシステム上に構成された唯一の I/O ドメインであり、すべての PCI-E バスを所有します。

Procedure新しい I/O ドメインを作成する

ここでは、例として、複数のバスが primary ドメインによって所有されている初期構成で新しい I/O ドメインを作成する手順について説明します。デフォルトでは、システム上に存在するすべてのバスを primary ドメインが所有しています。ここで示す例は、Sun Fire T2000 サーバーの場合です。この手順は、ほかのサーバーにも使用できます。別のサーバーではこれらの手順と若干異なる場合がありますが、この例では基本的な方針について理解できます。

最初に、primary ドメインの起動ディスクを持つバスを保持する必要があります。それから、その他のバスを primary ドメインから削除してほかのドメインに割り当てます。


注意 – 注意 –

サポートされたサーバーの内部ディスクはすべて、1 つの PCI バスに接続されています。ドメインが内部ディスクから起動する場合は、ドメインからそのバスを削除しないでください。また、ドメインで使用されているネットワークポートなどのデバイスが接続されたバスを削除していないことを確認してください。誤ったバスを削除すると、ドメインは必要なデバイスにアクセスできず、使用できなくなることがあります。ドメインで使用されているデバイスが接続されたバスを削除する場合は、ほかのバスのデバイスを使用するよう、そのドメインを再構成してください。たとえば、別のオンボードネットワークポートや、別の PCI スロットの PCI カードを使用するよう、ドメインを再構成する必要があります。


この例では、primary ドメインは 1 つのディスク (c1t0d0) と 1 つのネットワークインタフェース (e1000g2) のみを使用します。primary ドメインで複数のデバイスを使用する場合は、デバイスごとに手順 2 - 4 を繰り返して、削除するバスにそれらのデバイスがないことを確認します。

  1. primary ドメインが複数の PCI バスを所有していることを確認します。


    primary# ldm list-bindings primary
    ...
    IO
        DEVICE           PSEUDONYM        OPTIONS
        pci@780          bus_a
        pci@7c0          bus_b
    ...
  2. 起動ディスクのデバイスパスを確認します。これは保持する必要があります。


    primary# df /
    /                  (/dev/dsk/c1t0d0s0 ): 1309384 blocks   457028 files
  3. ブロック型デバイスが接続されている物理デバイスを確認します。

    ここでは、例としてブロック型デバイス c1t0d0s0 を使用します。


    primary# ls -l /dev/dsk/c1t0d0s0
    lrwxrwxrwx   1 root     root          65 Feb  2 17:19 /dev/dsk/c1t0d0s0 -> ../
    ../devices/pci@7c0/pci@0/pci@1/pci@0,2/LSILogic,sas@2/sd@0,0:a

    この例では、primary ドメインの起動ディスクに対する物理デバイスは、前述の bus_b の一覧表示で対応しているバス pci@7c0 に接続されています。つまり、bus_a (pci@780) を別のドメインに割り当てることができます。

  4. システムで使用されているネットワークインタフェースを確認します。


    primary# dladm show-phys
    LINK         MEDIA                STATE      SPEED  DUPLEX    DEVICE
    e1000g0      Ethernet             unknown    0      half      e1000g0
    e1000g1      Ethernet             unknown    0      half      e1000g1
    e1000g2      Ethernet             up         100    full      e1000g2
    e1000g3      Ethernet             unknown    0      half      e1000g3

    状態が unknown のインタフェースは構成されていないため、使用されていません。この例では e1000g2 インタフェースのみが使用されています。

  5. ネットワークインタフェースが接続されている物理デバイスを確認します。

    次のコマンドでは、e1000g2 ネットワークインタフェースを使用します。


    primary# ls -l /dev/e1000g2
    lrwxrwxrwx   1 root     root          48 Sep 25  2008 /dev/e1000g2
      -> ../devices/pci@7c0/pci@0/pci@2/network@0:e1000g2

    この例では、primary ドメインで使用されているネットワークインタフェースに対する物理デバイスは、前述の bus_a の一覧表示で対応しているバス pci@7c0 の配下にあります。つまり、primary ドメインの起動ディスクとネットワークインタフェースは、同じバス bus_b (pci@7c0) 上にあります。bus_a (pci@780) は primary ドメインでは使用されていないため、別のドメインに安全に割り当てることができます。

    primary ドメインで使用されているネットワークインタフェースが、別のドメインに割り当てようとしているバス上にある場合は、別のネットワークインタフェースを使用するように primary ドメインを再構成する必要があります。

  6. 起動ディスクを含まないバスをドメインから削除します。

    この例では、バス pci@780primary ドメインから削除されます。


    primary# ldm remove-io pci@780 primary
    
  7. この構成をサービスプロセッサに保存します。

    この例では、構成は io-domain です。


    primary# ldm add-config io-domain
    

    この構成 io-domain は、再起動後に使用される次の構成としても設定されます。


    注 –

    現在、SP に保存できる構成数の上限は 8 つです。この数には、factory-default 構成は含まれません。


  8. primary ドメインを再起動して、変更を有効にします。


    primary# shutdown -i6 -g0 -y
    
  9. PCI バスを追加するドメインを停止します。

    ここでは、例として ldg1 ドメインを停止します。


    primary# ldm stop ldg1
    primary# ldm unbind ldg1
    
  10. 直接のアクセス権が必要なドメインに、使用可能なバスを追加します。

    使用可能なバスは pci@780、ドメインは ldg1 です。


    primary# ldm add-io pci@780 ldg1
    

    InfiniBand カードが構成されていると、pci@780 バスでバイパスモードの有効化が必要になる場合があります。バイパスモードを有効にする必要があるかどうかについては、「PCI バスでの I/O MMU バイパスモードの有効化」 を参照してください。

  11. ドメインを再起動して、変更を有効にします。

    次のコマンドでは、ldg1 ドメインを再起動します。


    primary# ldm bind ldg1
    primary# ldm start ldg1
    
  12. 適切なバスが primary ドメインに割り当てられたままで、適切なバスがドメイン ldg1 に割り当てられていることを確認します。


    primary# ldm list-bindings primary ldg1
    NAME          STATE   FLAGS  CONS   VCPU  MEMORY  UTIL  UPTIME
    primary       active  -n-cv  SP     4     4G      0.4%  18h 25m
    ...
    IO
        DEVICE           PSEUDONYM        OPTIONS
        pci@7c0          bus_b
    ...
    ----------------------------------------------------------------
    NAME          STATE   FLAGS  CONS   VCPU  MEMORY  UTIL  UPTIME
    ldg1          active  -n---  5000   4     2G      10%   35m
    ...
    IO
        DEVICE           PSEUDONYM        OPTIONS
        pci@780          bus_a
    ...

    この出力では、PCI-E バス bus_b とその配下のデバイスがドメイン primary に割り当てられており、bus_a とそのデバイスが ldg1 に割り当てられていることを確認できます。

PCI バスでの I/O MMU バイパスモードの有効化

Infiniband ホストチャネルアダプタ (HCA) カードが構成されていると、I/O メモリー管理ユニット (MMU) のバイパスモードをオンにする必要がある場合があります。デフォルトでは、Logical Domains ソフトウェアが PCI-E トランザクションを制御して、特定の I/O デバイスまたは PCI-E オプションが I/O ドメイン内で割り当てられた物理メモリーにのみアクセス可能にします。別のゲストドメインのメモリーにアクセスしようとしても、I/O MMU によって阻止されます。これによって、I/O ドメインとその他すべてのドメインの間でより高いレベルのセキュリティーが得られます。ただし、I/O MMU バイパスモードがオフの状態で PCI-E または PCI-X オプションカードが読み込まないまたは動作しないまれな状況では、このオプションを使用して I/O MMU バイパスモードをオンに設定できます。ただし、バイパスモードをオンに設定すると、I/O ドメインからのメモリーアクセスのハードウェアによる保護が実行されなくなります。

bypass=on オプションは、I/O MMU バイパスモードをオンに設定します。このバイパスモードは、それぞれの I/O ドメインおよびその I/O ドメイン内の I/O デバイスがすべてのゲストドメインに信頼されている場合にのみ有効にする必要があります。この例では、バイパスモードをオンにします。


primary# ldm add-io bypass=on pci@780 ldg1

出力では、OPTIONS の下に bypass=on が表示されます。