目次
- Cisco usNIC の概要
- Cisco usNIC の前提条件
- Cisco UCS Manager での Cisco usNIC の設定
- Cisco usNIC の設定
- Cisco UCS Manager CLI を使用した usNIC の作成
- Cisco UCS Manager CLI を使用した usNIC の変更
- Cisco UCS Manager CLI を使用した usNIC の削除
- Cisco usNIC の Linux ドライバのインストール
- Cisco usNI のカーネル モジュールの手動のロード
- Cisco usNIC の Linux ドライバのアンインストール
- Cisco usNIC のインストールの確認
Cisco usNIC の概要
Cisco user-space NIC(Cisco usNIC)機能は、ネットワーキング パケットを送受信するときにカーネルをバイパスすることで、データセンターの Cisco UCS サーバで実行されるソフトウェア アプリケーションのパフォーマンスを改善します。 アプリケーションは Cisco UCS などの Cisco UCS VIC-1280 VIC 第二世代アダプタと直接やり取りし、これによってハイ パフォーマンス コンピューティング クラスタのネットワーキング パフォーマンスが向上します。 Cisco usNIC のメリットを引き出すためには、アプリケーションはソケットまたはその他の通信 API ではなく、Message Passing Interface(MPI)を使用する必要があります。
Cisco usNIC は、MPI アプリケーションに対して次の利点を提供します。
標準イーサネット アプリケーションは、Linux カーネルのネットワーキング スタックを呼び出すユーザ領域のソケット ライブラリを使用します。 次に、ネットワーキング スタックは Cisco eNIC ドライバを使用して、Cisco VIC ハードウェアと通信します。 次の図は、通常のソフトウェア アプリケーションと usNIC を使用する MPI アプリケーションの対比を示します。
Cisco UCS Manager での Cisco usNIC の設定
手順
ステップ 1 Cisco UCS Manager GUI または Cisco UCS Manager CLI を使用して、Cisco usNIC のプロパティおよび BIOS 設定を設定します。 ステップ 2 Linux カーネルの Intel IOMMU ドライバをイネーブルにします(intel_iommu=on)。 カーネルのブート コマンドでこの設定をイネーブルにし、Cisco usNIC と正常に通信できるように、ユーザ領域のアプリケーションを許可する必要があります。
ステップ 3 手動で grub.conf ファイルに「intel_iommu =on」を追加します(/boot/grub/grub.conf)。 KEYBOARDTYPE=pc KEYTABLE=us rd NO DM rhgb quiet intel_iommu=onステップ 4 iommu verification cmd dmesg | grep -i commnad
設定を確認します。
$ ibv_devinfoステップ 5 Cisco UCS サーバをリブートします。 Cisco usNIC を設定した後で、サーバをリブートして変更を有効にする必要があります。
ステップ 6 Cisco usNIC の Linux ドライバをインストールします。 ドライバのインストールの詳細については、Cisco usNIC の Linux ドライバのインストールを参照してください。
次の作業
Cisco usNIC の設定と Linux ドライバのインストールが完了したら、Cisco usNIC が正しく動作していることを確認してください。 インストールの確認方法の詳細については、Cisco usNIC のインストールの確認を参照してください。
Cisco usNIC の設定
手順
次の作業
Linux カーネルの Intel IOMMU ドライバをイネーブルにします(intel_iommu=on)。
Cisco UCS Manager CLI を使用した usNIC の作成
手順
コマンドまたはアクション 目的 ステップ 1 UCS-A # scope service-profile serverserver/chassis 指定したサーバとシャーシの組み合わせのサービス プロファイルを開始します。
ステップ 2 UCS-A /org/service-profile # show vnic そのサーバ で使用可能な vNIC を表示します。Cisco UCS Manager リリース 2.2 にアップグレードした場合は、デフォルトで usNIC vNIC が使用可能です。 ステップ 3 UCS-A /org/service-profile # scope vnic vnic name 指定した vNIC の vNIC モードを開始します。 ステップ 4 UCS-A /org/service-profile/vnic # set adapter-policy Linux Linux と usNIC のアダプタ ポリシーを指定します。 ステップ 5 UCS-A /org/service-profile/vnic # enter usnic-conn-policy-ref usnic connection policy reference name 指定した名前で vNIC の usNIC 接続ポリシー参照を作成します。接続ポリシー名の最大サイズは 16 文字です。 ステップ 6 UCS-A /org/service-profile/vnic/usnic-conn-policy-ref* # commit-buffer トランザクションをシステムの設定にコミットします。 ステップ 7 UCS-A /org/service-profile/vnic/usnic-conn-policy-ref # top 最上位モードを開始します。 ステップ 8 UCS-A # scope org ルート組織モードを開始します。 ステップ 9 UCS-A /org # create usnic-conn-policy usnic connection policy name 指定した名前で usNIC 接続ポリシーを作成します。 ステップ 10 UCS-A /org/usnic-conn-policy* # set usnic-count number of usnics 作成する Cisco usNIC の数を指定します。サーバで実行されている各 MPI プロセスには、専用の usNIC が必要です。したがって、64 の MPI プロセスを同時に実行させるには、最大 64 の usNIC を作成する必要がある場合があります。usNIC 対応 vNIC ごとに、サーバ上の物理コアの数と同数の Cisco usNIC を最低限作成することを推奨します。たとえば、サーバに 8 つの物理コアがある場合は、8 つの usNIC を作成します。
ステップ 11 UCS-A /org/usnic-conn-policy* # set adaptor-profile USNIC usNIC 接続ポリシー用の usNIC イーサネット アダプタ プロファイルを指定します。この usNIC アダプタ プロファイルは、以前のバージョンの Cisco UCS Manager をリリース 2.2 にアップグレードした場合にデフォルトで作成されます。 ステップ 12 UCS-A /org/usnic-conn-policy* # commit-buffer トランザクションをシステムの設定にコミットします。 次に、Cisco usNIC を作成してプロパティを指定する例を示します。
Server # scope org Server # create usnic-conn-policy usnic1 Server # set usnic-count-64 Server # set adapter-profile USNIC Server # commit buffer Server # top Server # scope service-profile server 1/1 Server /org/service-profile # show vnic vNIC: Name Fabric ID Dynamic MAC Addr Virtualization Preference ------------------ --------- ------------------ ------------------------- eth0 A 00:25:B5:00:00:8F NONE eth1 A 00:25:B5:00:00:9F NONE eth2 A Derived NONE Server /org/service-profile # scope vnic eth0 Server /org/service-profile/vnic # set adapter-policy Linux Server /org/service-profile/vnic # enter usnic-conn-policy-ref usnic1 Server /org/service-profile/vnic/usnic-conn-policy-ref* # commit-buffer Server /org/service-profile/vnic/usnic-conn-policy-ref # exitCisco UCS Manager CLI を使用した usNIC の変更
手順
コマンドまたはアクション 目的 ステップ 1 UCS-A # scope service-profile server chassis /server 指定したサーバとシャーシの組み合わせに対するサービス プロファイルを入力します。
ステップ 2 UCS-A /org/service-profile # show vnic サーバで利用できる vnic を表示します。 Cisco UCS Manager、リリース 2.2 にアップグレードすると usnic vnic がデフォルトで使用できます。 ステップ 3 UCS-A /org/service-profile # scope vnic vnic name 指定した vNIC の vnic モードを開始します。 ステップ 4 UCS-A /org/service-profile/vnic # enter usnic-conn-policy-refusnic connection policy reference name 使用する vNIC の usnic 接続ポリシーの参照先を指定します。 ステップ 5 UCS-A /org/service-profile/vnic/usnic-conn-policy-ref* # commit-buffer トランザクションをシステムの設定にコミットします。 次の例は、Cisco usNIC プロパティの変更方法を示します。
Server # scope service-profile server 1/1 Server /org/service-profile # show vnic vNIC: Name Fabric ID Dynamic MAC Addr Virtualization Preference ------------------ --------- ------------------ ------------------------- eth0 A 00:25:B5:00:00:8F SRIOV USNIC eth1 A 00:25:B5:00:00:9F NONE eth2 A Derived NONE Server /org/service-profile # scope vnic eth0 Server /org/service-profile/vnic # set adapter-policy Linux Server /org/service-profile/vnic # enter usnic-conn-policy-ref usnic2 Server /org/service-profile/vnic/usnic-conn-policy-ref* # commit-buffer Server /org/usnic-conn-policy # exitCisco UCS Manager CLI を使用した usNIC の削除
手順
コマンドまたはアクション 目的 ステップ 1 UCS-A # scope service-profile serverserver/chassis 指定したサーバとシャーシの組み合わせに対するサービス プロファイルを入力します。
ステップ 2 UCS-A /org/service-profile # show vnic サーバで利用できる vNIC を表示します。 Cisco UCS Manager、リリース 2.2 にアップグレードすると usNIC vNIC がデフォルトで使用できます。 ステップ 3 UCS-A /org/service-profile # scope vnic vnic name 指定した vNIC の vnic モードを開始します。 ステップ 4 UCS-A /org/service-profile/vnic # show usnic-conn-policy-refusnic connection policy reference name 使用する vNIC の usNIC 接続ポリシーの参照先を指定します。 ステップ 5 UCS-A /org/service-profile/vnic # delete usnic-conn-policy-refusnic connection policy reference name 指定した usNIC 接続ポリシーの参照先を削除します。 ステップ 6 UCS-A /org/service-profile/vnic/usnic-conn-policy-ref* # commit-buffer トランザクションをシステムの設定にコミットします。 次の例は、Cisco usNIC プロパティの変更方法を示します。
Server # scope service-profile server 1/1 Server /org/service-profile # show vnic vNIC: Name Fabric ID Dynamic MAC Addr Virtualization Preference ------------------ --------- ------------------ ------------------------- eth0 A 00:25:B5:00:00:8F SRIOV USNIC eth1 A 00:25:B5:00:00:9F NONE eth2 A Derived NONE Server /org/service-profile # scope vnic eth0 Server /org/service-profile/vnic # show usnic-conn-policy-ref USNIC Connection Policy Reference: USNIC Connection Policy Name ---------------------------- usnic0 Server /org/service-profile/vnic # delete usnic-conn-policy-ref usnic0 Server /org/service-profile/vnic* # commit-buffer Server /org/service-profile/vnic # exitCisco usNIC の Linux ドライバのインストール
ここでは、UCS ドライバ ISO バンドルに含まれている Cisco usNIC ビルド フォルダの内容を示します。 Cisco usNIC の既知の問題とインストール手順(README)のドキュメントは、ビルド フォルダにも含まれています。
(注)
OS が usNIC アプリケーションに割り当てられているメモリをスワップアウトすることを回避するために、インストール ソフトウェアは OS のロックされたメモリ システム設定を無制限に拡張します。
kmod-usnic_verbs-1.0.2.116-1.x86_64.rpm:Cisco VIC SR-IOV イーサネット NIC の usNIC 機能の Linux カーネル verbs ドライバ。
libusnic_usnic_verbs-1.0.1.116-1.x86_64.rpm:usNIC 用のユーザ領域のライブラリ libibverbs プラグイン。
kmod-enic-2.1.1.52-rhel6u4.el6.x86_64.rpm:Enic 用の OOB Linux カーネル ドライバ。正しく動作するためにインストーラ スクリプトの親フォルダ(Cisco usNIC のインストール ファイルの 1 つ上のレベル)にコピーする必要があります。
openmpi-cisco-1.6.5cisco1.0.2.120-1.x86 _64.rpm:Cisco usNIC オープン MPI:Cisco usNIC BTL MPI 転送を使用したオープン MPI。
usnic_tools-1.0.2.120-1.x86_64.rpm:usNIC 用のユーティリティ プログラム。
usnic_installer.sh:この項に記載される usNIC パッケージをインストールするスクリプト。
usnic_uninstaller.sh:この項に記載される usNIC パッケージをアンインストールするスクリプト。
はじめる前に手順Cisco UCS Manager(UCSM)に Cisco usNIC プロパティを設定したことを確認してください。 プロパティの設定方法の詳細については、Cisco UCS Manager での Cisco usNIC の設定を参照してください。
また、 Cisco usNIC をインストールするホスト OS(RHEL 6.4)に、サポート対象のバージョンの Cisco Enic ドライバがインストールされていることを確認する必要があります。 Cisco Enic ドライバは Cisco VIC SR-IOV イーサネット NIC 用の Linux カーネル ネットワーキング ドライバです。
ステップ 1 #./usnic_installer.sh
Cisco usNIC のインストール ファイルが置かれているディレクトリからインストーラ スクリプトを実行し、インストーラ スクリプトの出力を親フォルダ(Cisco usNIC のインストール ファイルが置かれている場所の 1 つ上のレベル)に追加します。
(注) root (#) プロンプトでスクリプトを実行するには、admin 権限が必要です。
ステップ 2 インストーラ スクリプトの出力を親フォルダ(Cisco usNIC のインストール ファイルが置かれている場所の 1 つ上のレベル)に追加します。 これはインストールを成功させるために必要です。
ステップ 3 # chkconfig rdma on
rdma をイネーブルにします。一度イネーブルにすると、システムのリブート後に自動的に起動します。
ステップ 4 # service rdma start
rdma サービスが開始されていることを確認します。 このサービスは usnic_verbs カーネル モジュールに必要です。
ステップ 5 サーバをリブートしてインストールの変更を有効にする必要があります サーバをリブートしない場合、カーネル モジュールを手動でロードできます。 モジュールのロード方法の詳細については、Cisco usNI のカーネル モジュールの手動のロードを参照してください。
Cisco usNI のカーネル モジュールの手動のロード
手順
コマンドまたはアクション 目的 ステップ 1 # rmmod enic
既存の Enic ドライバ モジュールをアンロードします。
(注) たとえば SSH 経由でネットワークを使用して、OS にログインしていないことを確認します。 そうしない場合、ネットワーク接続が完全に切断されている状態になる可能性があります。 または、UCSM KVM を使用してサーバにログインして、このステップを実行することができます。
ステップ 2 # modprobe enic
Enic ドライバ モジュールをロードします。
ステップ 3 # modprobe usnic_verbs
usnic_verbs ドライバ モジュールをロードします。
Cisco usNIC のインストールの確認
手順
ステップ 1 usnic_verbs が名前に付いたすべてのカーネル モジュールを検索および一覧表示して、OS ドライバのインストール時にカーネル モジュールがロードされていることを確認してください。 $ lsmod | grep usnic_verbs$ lsmod | grep usnic_verbs コマンドを入力すると、次の詳細情報が表示されます。 コンソールに一覧表示されているカーネル モジュールは、OS に現在ロードされているモジュールに基づいて異なる場合があります。
usnic_verbs 78776 0 ib_core 73747 13 ib_ipoib,rdma_ucm,ib_ucm,ib_uverbs,ib_umad,rdma_cm,ib_cm,iw_cm,ib_sa,ib_mad, iw_cxgb4,iw_cxgb3,usnic_verbs enic 67741 1 usnic_verbsステップ 2 Cisco usNIC 対応 NIC の設定を確認してください。 $ ibv_devinfo次のセクションは、 ibv_devinfo コマンドを実行するときに表示される結果の簡単な例になります。 結果は、現在のインストール環境によって異なる場合があります。 結果がコンソールに表示されたら、一覧表示されたポートのそれぞれの状態が PORT_ACTIVE と表示されていることを確認します。 次の例では、 Cisco UCS VIC アダプタ上に設定された 2 つのポート( usnic_1 および usnic_0)を示します。 1 つの usNIC 対応 vNIC だけを設定した場合、 usnic_0 のみのリストが表示されます。
(注) ibv_devinfo コマンドは iWARP としてトランスポート パラメータの値を表示します。 ただし、Cisco usNIC は iWARP 転送を使用しません。
hca_id: usnic_1 transport: iWARP (1) node_guid: 0200:00ff:fe00:0000 sys_image_guid: 2657:20ff:fe6f:1100 vendor_id: 0x1137 vendor_part_id: 207 hw_ver: 0x2 board_id: 133 phys_port_cnt: 1 port: 1 state: PORT_ACTIVE (4) max_mtu: 4096 (5) active_mtu: 4096 (5) sm_lid: 0 port_lid: 0 port_lmc: 0x01 link_layer: Ethernet hca_id: usnic_0 transport: iWARP (1) node_guid: 0200:00ff:fe00:0000 sys_image_guid: 2657:20ff:fe6f:1000 vendor_id: 0x1137 vendor_part_id: 207 hw_ver: 0x2 board_id: 133 phys_port_cnt: 1 port: 1 state: PORT_ACTIVE (4) max_mtu: 4096 (5) active_mtu: 4096 (5) sm_lid: 0 port_lid: 0 port_lmc: 0x01 link_layer: Ethernetステップ 3 rdma がオンになっていることを確認します。 このサービスは usnic_verbs カーネル モジュールのロードに必要です。 # chkconfig --level 2345 rdma onステップ 4 インストールされている RPM およびバージョンを確認するには usnic_verbs_check スクリプトを実行します。 $ /opt/cisco/usnic/bin/usnic_verbs_checkエラーが OS ドライバのインストール中に発生している場合、警告が生成されます。
usnic_verbs モジュールのロードで失敗した場合は、次の簡単な例が生成された警告を示します。$ rmmod usnic_verbs $ /opt/cisco/usnic/bin/usnic_verbs_check enic RPM version 2.1.1.52-rhel6u4.el6 installed usnic_verbs RPM version 1.0.2.116-1 installed WARNING: usnic_verbs module not loaded libusnic_verbs RPM version 1.0.1.116-1 installed Open MPI RPM version 1.6.5cisco1.0.2.120-1 installed WARNING: No usnic verbs devices found WARNING: No usnic verbs devices found 3 warningsステップ 5 Cisco usNIC ネットワーク パケットがクライアントとサーバのホスト間で正常に送信されていることを確認してください。
次の例は、 ibv_ud_pingpong プログラムを実行するときに表示される結果を示します。Server-side: <server>$ ibv_ud_pingpong -g 0 -d usnic_0 -s 200 local address: LID 0x0000, QPN 0x000001, PSN 0x38ffcb: GID fe80::2657:20ff:fe6f:1000 remote address: LID 0x0000, QPN 0x000001, PSN 0x3a9e22, GID fe80::b2fa:ebff:fe72:84fd 400000 bytes in 0.01 seconds = 637.70 Mbit/sec 1000 iters in 0.01 seconds = 5.02 usec/iter Client-side: <client>$ ibv_ud_pingpong -g 0 -d usnic_0 -s 200 10.1.0.1 local address: LID 0x0000, QPN 0x000001, PSN 0x3a9e22: GID fe80::b2fa:eb ff:fe72:84fd remote address: LID 0x0000, QPN 0x000001, PSN 0x38ffcb, GID fe80::2657:20 ff:fe6f:1000 400000 bytes in 0.01 seconds = 617.40 Mbit/sec 1000 iters in 0.01 seconds = 5.18 usec/iterステップ 6 ring_c テスト プログラムをダウンロード、コンパイル、および実行して、MPI トラフィックがクライアントとサーバのホスト間で正しく送信されていることを検証します。 ring_c テスト プログラムは、http://svn.open-mpi.org/svn/ompi/branches/v1.6/examples/ring_c.cのリンクから取得できます。
次の例は、 wget ユーティリティを使用して ring_c を取得、コンパイル、および実行する方法を示します。 また、テスト プログラムの取得および実行のその他の方法を使用できます。$ wget http://svn.open-mpi.org/svn/ompi/branches/v1.6/examples/ring_c.c --2013-08-06 15:27:33-- http://svn.open-mpi.org/svn/ompi/branches/v1.6/examples/ring_c.c Resolving svn.open-mpi.org... 129.79.13.24 Connecting to svn.open-mpi.org|129.79.13.24|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 2418 (2.4K) [text/plain] Saving to: “ring_c.c” 100%[======================================>] 2,418 --.-K/s in 0s Last-modified header invalid -- time-stamp ignored. 2013-08-06 15:27:33 (10.7 MB/s) - “ring_c.c” saved [2418/2418] $ mpicc ring_c.c -o ring_c [no output] $ mpiexec --host host1,host2 -n 4 ./ring_c Process 0 sending 10 to 1, tag 201 (4 processes in ring) Process 0 sent to 1 Process 0 decremented value: 9 Process 0 decremented value: 8 Process 0 decremented value: 7 Process 0 decremented value: 6 Process 0 decremented value: 5 Process 0 decremented value: 4 Process 0 decremented value: 3 Process 0 decremented value: 2 Process 0 decremented value: 1 Process 0 decremented value: 0 Process 0 exiting Process 2 exiting Process 1 exiting Process 3 exiting ...
ibv_ud_pingpong プログラムおよび ring_c プログラムが正常に実行された場合、usNIC 上で MPI アプリケーションを実行できるはずです。
Copyright © 2013, Cisco Systems, Inc. All rights reserved.