Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.
Linux KVM環境における
GPGPU活用最新動向
- OSC2015 Fukuoka -
TAIRA Hajime <htaira@pantora.net>TAIRA Hajime <htaira@pantora.net>
2
自己紹介
平 初
仮想化友の会 発起人
生息地 : 東京 / 愛知 / 北海道 / 熊本
好きなゆるキャラ : くまモン
好きなふりかけ : 御飯の友
3
御飯の友
4
本日のお題
「GPUパススルー」
5
Linux KVM における
GPU パススルーの構成図
ゲストOS ゲストOSゲストOS
Intel VT-d
QEMU/KVM QEMU/KVM QEMU/KVM
DMA Remapping
NVIDIAドライバー NVIDIAドライバ...
6
GPU パススルーの効果
GPU パススルーでどのような恩恵が得られるか
● ゲーミング環境の隔離
● GPGPU を必要とするサーバーの集約
● GPGPU ファームのクラウド化
⇒ 仮想マシンに対して必要な時に GPU を割り当てるこ
...
7
KVM でパススルー可能なデバイス
USB SCSI PCIe
8
PCIe パススルー
PCIe パススルーの中でも一般的によく行われるの
は、ネットワークインターフェースカード (NIC)
ゲストOS ゲストOSゲストOS
Intel VT-d
QEMU/KVM QEMU/KVM QEMU/KVM
DM...
9
Intel VT-d とは
Intel VT-d とはデバイス I/O の仮想化支援を行う Intel
CPU と対応するチップセットが提供する機能
ゲストOS
Intel VT-d
QEMU/KVM
DMA Remapping
VF
VF...
10
Intel VT-d の使い方
まずは Intel VT-d 搭載の CPU を用意
※Intel Xeon だと Nehalem 世代以降
自分の CPU で使えるかどうか分からない場合、
Intel ARK で探すと良い
http:/...
11
展示ブースのデモ環境
マザーボード : ASRock H77M-ITX (BIOS ver 1.90)
CPU: Intel Core i7 3770 (Intel VT-d 搭載 )
GPU: NVIDIA Quadro K2200
H...
12
Linux カーネルにおける有効化
BIOS/UEFI で Intel VT-d を有効化した後に、 Linux の
起動オプションで有効化する必要がある
/etc/default/grub
GRUB_CMDLINE_LINUX="rd....
13
Linux カーネルにおける有効化
Intel VT-dの確認方法
# dmesg|grep -e DMAR -e IOMMU
[ 0.000000] ACPI: DMAR 00000000bd9a5c48 000B8 (v01 INTE...
14
ホスト OS から GPU を
初期化させない方法
●
この設定手順を行っておくと、手動での virsh nodedev-detach が不要に
なる
最初からホスト OS から初期化させない方が楽
→ カーネルオプションで GPU を ...
15
対象 PCIe カードの探し方
● lspci コマンドから grep で抽出する
# lspci | grep -i nvidia
01:00.0 VGA compatible controller: NVIDIA Corporatio...
16
GPU パススルー可能な GPU
● NVIDIA Tesla シリーズ
● NVIDIA GRID シリーズ
※GPU 仮想化技術 NVIDIA GRID vGPU は利用不可
● NVIDIA Quadro シリーズ
※K2000 以...
17
GPU パススルーの利用構成
● 1 枚目のプライマリービデオカードを仮想デバイスの QXL
GPU にして、 2 枚目のセカンダリービデオカードをパススルー
された GPU として利用する
※ 主に GPGPU を仮想環境で利用する場合...
18
GPU パススルーの構成図
ゲストOS
Intel VT-d
QEMU/KVM
DMA Remapping
NVIDIAドライバーQXLドライバー
QXL
1枚目のプライマリービデオ
カードを仮想デバイスのQXL
GPUにして、2枚目のセ...
19
GPGPU on OpenStack
20
OpenStack における GPU 活用
Nova Instance#2
g1.large
Nova Instance#1
m1.large
QEMU/KVM QEMU/KVM
NVIDIAドライバー
Nova
Compute Node...
21
OpenStack Nova における実装
PciPassthroughFilter
Nova Instance
g1.large
QEMU/KVM
NVIDIAドライバー
Nova
Compute Node
Nova
Controlle...
22
PCI Manager の役割
● PCI Manager は MariaDB の pci_devices テーブル内に PCI デバイスの
割り当て管理情報を格納する
● PCI デバイスを搭載するサーバーの情報 ( ノード ID 、 ...
23
Nova Flavor の定義
Nova に GPU インスタンス用のフレーバーを追加して、そこにフレー
バー属性で GPU の種類と枚数を指定する
例 : g1.xlarge には NVIDIA Tesla を 2 枚割り当てる、 g2...
24
/etc/nova/nova.conf の設定
Nova Controller Node 側
Nova で利用したい GPU のエイリアスを定義する
必要な情報は名前と PCI の Vendor ID 、 Product ID を列挙
例...
25
/etc/nova/nova.conf の設定
Nova Controller Node 側
スケジューラーに PciPassthroughFilter フィルターを追加する
scheduler_driver=nova.scheduler...
26
/etc/nova/nova.conf の設定
Nova Compute Node 側
Nova で利用したい GPU のホワイトリストを定義する
必要な情報は名前と PCI の Vendor ID 、 Product ID を列挙
例 ...
27
OpenStack 環境でインスタンス上に
認識された NVIDIA Quadro 2000
28
OpenStack 環境で GPU を使う上
での制約事項
OpenStack 環境での GPU 利用の注意点
●
GPU 付きのインスタンスは定義してから抹消されるまで GPU は
返却されません。
※ つまりマシン上に 1 枚しか G...
Q&A
30
参考情報
OpenStack Wiki: Pci passthrough
https://wiki.openstack.org/wiki/Pci_passthrough
Red Hat Enterprise Linux 7 - Virtu...
Prochain SlideShare
Chargement dans…5
×

Linux KVM環境におけるGPGPU活用最新動向

Linux KVMによる仮想化環境においてGPGPUを使うための前提技術や、その手順、OpenStackにおけるGPGPUの活用方法についてご紹介します。

  • Identifiez-vous pour voir les commentaires

Linux KVM環境におけるGPGPU活用最新動向

  1. 1. Linux KVM環境における GPGPU活用最新動向 - OSC2015 Fukuoka - TAIRA Hajime <htaira@pantora.net>TAIRA Hajime <htaira@pantora.net>
  2. 2. 2 自己紹介 平 初 仮想化友の会 発起人 生息地 : 東京 / 愛知 / 北海道 / 熊本 好きなゆるキャラ : くまモン 好きなふりかけ : 御飯の友
  3. 3. 3 御飯の友
  4. 4. 4 本日のお題 「GPUパススルー」
  5. 5. 5 Linux KVM における GPU パススルーの構成図 ゲストOS ゲストOSゲストOS Intel VT-d QEMU/KVM QEMU/KVM QEMU/KVM DMA Remapping NVIDIAドライバー NVIDIAドライバー NVIDIAドライバー
  6. 6. 6 GPU パススルーの効果 GPU パススルーでどのような恩恵が得られるか ● ゲーミング環境の隔離 ● GPGPU を必要とするサーバーの集約 ● GPGPU ファームのクラウド化 ⇒ 仮想マシンに対して必要な時に GPU を割り当てるこ とができる ● GPU の利用効率を最大化できる ⇒ GPGPU アプリの開発環境、 HPC クラスターへデー タを投げる前の Pre/Post 処理の実行環境
  7. 7. 7 KVM でパススルー可能なデバイス USB SCSI PCIe
  8. 8. 8 PCIe パススルー PCIe パススルーの中でも一般的によく行われるの は、ネットワークインターフェースカード (NIC) ゲストOS ゲストOSゲストOS Intel VT-d QEMU/KVM QEMU/KVM QEMU/KVM DMA Remapping VF VF VF VF VF VF VF NICドライバー VF NICドライバー VF NICドライバー
  9. 9. 9 Intel VT-d とは Intel VT-d とはデバイス I/O の仮想化支援を行う Intel CPU と対応するチップセットが提供する機能 ゲストOS Intel VT-d QEMU/KVM DMA Remapping VF VF VF NICドライバー VT-dを使うことによりPCIeデバイスを仮想マシ ンへパススルーした時のDMAで利用するメモ リー領域のリマッピングをCPUとチップセット 側でオフロードすることができるようになる VT-dは主に仮想ネットワークインターフェース カードのパススルー処理(SR-IOV)に使われる 基本的にPCIeデバイスであれば、USBカードで もキャプチャーカードでもパススルー可能 メモリー領域 ※AMD CPUにもAMD Viという 同様の仕組みがある
  10. 10. 10 Intel VT-d の使い方 まずは Intel VT-d 搭載の CPU を用意 ※Intel Xeon だと Nehalem 世代以降 自分の CPU で使えるかどうか分からない場合、 Intel ARK で探すと良い http://ark.intel.com/search/advanced?VTD=true BIOS/UEFI で Intel VT-d を有効化 だいたい Advanced や CPU Configuration などと 表記されている設定項目あたりにある
  11. 11. 11 展示ブースのデモ環境 マザーボード : ASRock H77M-ITX (BIOS ver 1.90) CPU: Intel Core i7 3770 (Intel VT-d 搭載 ) GPU: NVIDIA Quadro K2200 Host OS: Red Hat Enterprise Linux 7.1 Guest OS: Windows 8.1, Ubuntu 14.10 LTS
  12. 12. 12 Linux カーネルにおける有効化 BIOS/UEFI で Intel VT-d を有効化した後に、 Linux の 起動オプションで有効化する必要がある /etc/default/grub GRUB_CMDLINE_LINUX="rd.lvm.lv=vg_root/lv_swap rd.lvm.lv=vg_root/lv_root rhgb quiet intel_iommu=on"
  13. 13. 13 Linux カーネルにおける有効化 Intel VT-dの確認方法 # dmesg|grep -e DMAR -e IOMMU [ 0.000000] ACPI: DMAR 00000000bd9a5c48 000B8 (v01 INTEL SNB 00000001 INTL 00000001) [ 0.000000] Intel-IOMMU: enabled [ 0.020582] dmar: IOMMU 0: reg_base_addr fed90000 ver 1:0 cap c0000020e60262 ecap f0101a [ 0.020586] dmar: IOMMU 1: reg_base_addr fed91000 ver 1:0 cap c9008020660262 ecap f0105a [ 0.020657] IOAPIC id 2 under DRHD base 0xfed91000 IOMMU 1 [ 0.340560] DMAR: No ATSR found [ 0.340578] IOMMU 0 0xfed90000: using Queued invalidation [ 0.340579] IOMMU 1 0xfed91000: using Queued invalidation [ 0.340580] IOMMU: Setting RMRR: [ 0.340588] IOMMU: Setting identity map for device 0000:00:02.0 [0xbf800000 - 0xcf9fffff] [ 0.341693] IOMMU: Setting identity map for device 0000:00:1d.0 [0xbd56f000 - 0xbd599fff] [ 0.341710] IOMMU: Setting identity map for device 0000:00:1a.0 [0xbd56f000 - 0xbd599fff] [ 0.341722] IOMMU: Setting identity map for device 0000:00:14.0 [0xbd56f000 - 0xbd599fff] [ 0.341731] IOMMU: Prepare 0-16MiB unity mapping for LPC [ 0.341737] IOMMU: Setting identity map for device 0000:00:1f.0 [0x0 - 0xffffff]
  14. 14. 14 ホスト OS から GPU を 初期化させない方法 ● この設定手順を行っておくと、手動での virsh nodedev-detach が不要に なる 最初からホスト OS から初期化させない方が楽 → カーネルオプションで GPU を pci-stub ドライバーに割り当て pci-stub.ids=xxxx:xxxx (※vendorid:productid) ● dracut で組み込まないようにカーネルオプションのブラックリストに追加 rdblacklist=nouveau ● modprobe でカーネルモジュールを読み込まないようにブラックリストに 記述 echo "blacklist nouveau" >> /etc/modprobe.d/blacklist-nouveau.conf
  15. 15. 15 対象 PCIe カードの探し方 ● lspci コマンドから grep で抽出する # lspci | grep -i nvidia 01:00.0 VGA compatible controller: NVIDIA Corporation GM107GL [Quadro K2200] (rev a2) 01:00.1 Audio device: NVIDIA Corporation Device (rev a1) ※ 同じような Bus ID を持つもう 1 つのカードは だいたいの場合、 HDMI Audio の音源
  16. 16. 16 GPU パススルー可能な GPU ● NVIDIA Tesla シリーズ ● NVIDIA GRID シリーズ ※GPU 仮想化技術 NVIDIA GRID vGPU は利用不可 ● NVIDIA Quadro シリーズ ※K2000 以降の 4 桁番台、 3 桁番台は不可 ● AMD Radeon HD69xx シリーズが動くらしい ● Intel HD Graphics シリーズも制約が多いけど動くら しい
  17. 17. 17 GPU パススルーの利用構成 ● 1 枚目のプライマリービデオカードを仮想デバイスの QXL GPU にして、 2 枚目のセカンダリービデオカードをパススルー された GPU として利用する ※ 主に GPGPU を仮想環境で利用する場合 ※ ゲスト OS が Windows 7 や Windows Server 2008 の場 合、 GPU パススルーすると 1 枚目の QXL ビデオカードが動か なくなる場合がある。つまり 2 枚目のパススルーされた GPU 側のモニターにログイン画面が出る ● 1 枚目のプライマリービデオカードをパススルーされた GPU と する ※ 主にデスクトップマシンでゲーム環境で利用する場合 ( 割愛 )
  18. 18. 18 GPU パススルーの構成図 ゲストOS Intel VT-d QEMU/KVM DMA Remapping NVIDIAドライバーQXLドライバー QXL 1枚目のプライマリービデオ カードを仮想デバイスのQXL GPUにして、2枚目のセカンダ リービデオカードをパススルー されたGPUとして利用する ※主にGPGPUを仮想環境で利 用する場合
  19. 19. 19 GPGPU on OpenStack
  20. 20. 20 OpenStack における GPU 活用 Nova Instance#2 g1.large Nova Instance#1 m1.large QEMU/KVM QEMU/KVM NVIDIAドライバー Nova Compute Node ● コンピューティングリ ソースを管理する NovaがHavanaリリー スからPCIパススルー に対応済み ● GPUが必要なインスタ ンスのみ割り当てが行 われる(フレーバーの タイプにより判別) libvirt
  21. 21. 21 OpenStack Nova における実装 PciPassthroughFilter Nova Instance g1.large QEMU/KVM NVIDIAドライバー Nova Compute Node Nova Controller Node PCI Manager ※列名は一部省略 id address instance_uuid 1 0000:01:00.0 abcdabcd-1234-xxxx 2 0000:02:00.0 NULL (1) PCI Managerに対してプールしたいGPUの情報を事前に登録 (2) Novaスケジューラーが PciPassthroughFilter により、PCI Manager に GPU の の割り当てリクエストを行ない、空きのGPUが割り当てられる (3) Nova Compute Node上で GPU を パススルーで割り 当てる仮想マシン 定義ファイルが作 られ、libvirt 経由で 仮想マシンが起動 する libvirt
  22. 22. 22 PCI Manager の役割 ● PCI Manager は MariaDB の pci_devices テーブル内に PCI デバイスの 割り当て管理情報を格納する ● PCI デバイスを搭載するサーバーの情報 ( ノード ID 、 Bus ID 、 Vendor ID 、 Product ID) 、割り当て先のインスタンスの UUID などが記録される PCI Manager id vendor_id product_id address compute_node_id instance_uuid 1 10de 1023 0000:01:00.0 1 abcdabcd-1234-xxxx 2 10de 1023 0000:02:00.0 1 NULL pci_devices テーブル ※列名は一部省略
  23. 23. 23 Nova Flavor の定義 Nova に GPU インスタンス用のフレーバーを追加して、そこにフレー バー属性で GPU の種類と枚数を指定する 例 : g1.xlarge には NVIDIA Tesla を 2 枚割り当てる、 g2.medium には NVIDIA Quadro を 1 枚割り当てる (keystone_admin)# nova flavor-create g1.xlarge ⇒ --is-public true auto 65536 16 8 (keystone_admin)# nova flavor-key g1.xlarge ⇒ set "pci_passthrough:alias"="TeslaK40:2" (keystone_admin)# nova flavor-create g1.medium ⇒ --is-public true auto 16384 16 4 (keystone_admin)# nova flavor-key g1.medium ⇒ set "pci_passthrough:alias"="QuadroK2200:1"
  24. 24. 24 /etc/nova/nova.conf の設定 Nova Controller Node 側 Nova で利用したい GPU のエイリアスを定義する 必要な情報は名前と PCI の Vendor ID 、 Product ID を列挙 例 : NVIDIA Tesla K40(10de:1023) の場合 pci_alias={"name":"TeslaK40", ⇒ "vendor_id":"10de", "product_id":"1023"} 例 : NVIDIA Quadro K2200(10de:13ba) の場合 pci_alias={"name":"QuadroK2200", ⇒ "vendor_id":"10de", "product_id":"13ba"}
  25. 25. 25 /etc/nova/nova.conf の設定 Nova Controller Node 側 スケジューラーに PciPassthroughFilter フィルターを追加する scheduler_driver=nova.scheduler.filter_scheduler.F ilterScheduler scheduler_available_filters=nova.scheduler.filters .all_filters,nova.scheduler.filters.pci_passthroug h_filter.PciPassthroughFilter scheduler_default_filters=RamFilter,ComputeFilter, AvailabilityZoneFilter,ComputeCapabilitiesFilter,I magePropertiesFilter,PciPassthroughFilter
  26. 26. 26 /etc/nova/nova.conf の設定 Nova Compute Node 側 Nova で利用したい GPU のホワイトリストを定義する 必要な情報は名前と PCI の Vendor ID 、 Product ID を列挙 例 : NVIDIA Tesla K40(10de:1023) の場合 pci_passthrough_whitelist={"name":"TeslaK40", ⇒ "vendor_id":"10de", "product_id":"1023"} 例 : NVIDIA Quadro K2200(10de:13ba) の場合 pci_passthrough_whitelist={"name":"QuadroK2200", ⇒ "vendor_id":"10de", "product_id":"13ba"}
  27. 27. 27 OpenStack 環境でインスタンス上に 認識された NVIDIA Quadro 2000
  28. 28. 28 OpenStack 環境で GPU を使う上 での制約事項 OpenStack 環境での GPU 利用の注意点 ● GPU 付きのインスタンスは定義してから抹消されるまで GPU は 返却されません。 ※ つまりマシン上に 1 枚しか GPU が搭載されていない場 合、 GPU が使えるのは 1 インスタンスまで ⇒ マシン 1 台に GPU を複数枚搭載することを推奨 ● NVIDIA GRID を用意しても KVM では NVIDIA GRID vGPU は利用 できません。 ※ また、 NVIDIA GRID vGPU の現在の実装では、そもそも vGPU で CUDA 、 OpenCL は利用できません。
  29. 29. Q&A
  30. 30. 30 参考情報 OpenStack Wiki: Pci passthrough https://wiki.openstack.org/wiki/Pci_passthrough Red Hat Enterprise Linux 7 - Virtualization Deployment and Administration Guide https://access.redhat.com/documentation/en-US/Red_Hat_ Enterprise_Linux/7/html/Virtualization_Deployment_and_ Administration_Guide/sect-device-GPU.html

×