Topology Managerについて
Yuichiro Ueno (y1r96) @ Kubernetes Meetup Tokyo #50 (LT)
2
コンピュータのハードウェア構成は複雑
$ sudo apt install hwloc
$ lstopo
私のPCのハードウェア構成
● 階層キャッシュがある
○ CPUコアによって距離の差がある
● PCIe デバイスがたくさん
○ NIC, GPU, NVMe SSD などなど
○ 階層もある
■ チップセット経由 or CPU直結
● multi-socket ならもっとややこしい
○ 各socketとPCIeデバイスとの距離
○ 各socketとメモリの距離
3
● リソースは CPU, Memory Manager と Device Plugin で管理される
○ 各Managerだけでは大域的に良い割り当てを見つけられない
誰かが調停して割り当てを決める必要がある ⇒ Topology Manager
Kubernetes におけるリソースの割り当て
Icon pack by Icons8 - https://icons8.com
CPU Socket
CPU Socket
GPU NIC
MEM CPU CPU
MEM
NIC GPU
CPU Managerは
こっち!?
nvidia-device-pluginは
こっち!?
NUMA Node #1 NUMA Node #2
4
Topology Manager
https://kubernetes.io/docs/tasks/administer-cluster/topology-manager/
● kubelet の機能 (v1.18 から beta)
● 複数のリソースにまたがって「良い」リソース割り当てを実現
○ CPU, Memory, Device Manager が HintProvider interface を実装して
リソース要求を満たす NUMA Affinity を Topology Manager に報告
○ Topology Manager は 希望が満たされるように結果をmergeする
■ 満たせないときにどうするかは policy で注入
● none, best-effort, restricted, single-numa-node
○ 見つかったNUMA Affinityに基づいてリソースをallocateする
5
TopologyHintによるNUMA Affinityの解決の概要
CPU Manager: [10], [01]
→ またがっちゃだめ
Memory Manager: [10], [01]
→ またがっちゃだめ
GPU Device Plugin: [10]
→ Socket 0のみOK
TopologyHint ≒ [ 1 0 ]
i 番目がTrue ⇔ Socket(~NUMA) iとのAffinity可能
Socket 0と近い割り当てができそう!
Mergeされた結果
[1 0]
→Socket 0のみOK
CPU Socket 1
CPU Socket 0
GPU NIC
MEM CPU CPU
MEM
NIC GPU
使用中
Icon pack by Icons8 - https://icons8.com
6
● Topology Managerを使い始めました!
○ 最近K8s v1.23に更新しました
○ best-effort policy で,GPUがCPUソケットにまたがって割当てられなくなった
■ うれしい!
Icon pack by Icons8 - https://icons8.com
CPU Socket
CPU Socket
GPU NIC
MEM CPU CPU
MEM
NIC GPU
PFNでもTopology Managerを使い始めました
PFNの計算ノードの構成
● CPU: 2ソケット
● GPU: 各ソケットに複数
● NIC: 各ソケットに複数
Making the real world computable

Topology Managerについて / Kubernetes Meetup Tokyo 50

  • 1.
    Topology Managerについて Yuichiro Ueno(y1r96) @ Kubernetes Meetup Tokyo #50 (LT)
  • 2.
    2 コンピュータのハードウェア構成は複雑 $ sudo aptinstall hwloc $ lstopo 私のPCのハードウェア構成 ● 階層キャッシュがある ○ CPUコアによって距離の差がある ● PCIe デバイスがたくさん ○ NIC, GPU, NVMe SSD などなど ○ 階層もある ■ チップセット経由 or CPU直結 ● multi-socket ならもっとややこしい ○ 各socketとPCIeデバイスとの距離 ○ 各socketとメモリの距離
  • 3.
    3 ● リソースは CPU,Memory Manager と Device Plugin で管理される ○ 各Managerだけでは大域的に良い割り当てを見つけられない 誰かが調停して割り当てを決める必要がある ⇒ Topology Manager Kubernetes におけるリソースの割り当て Icon pack by Icons8 - https://icons8.com CPU Socket CPU Socket GPU NIC MEM CPU CPU MEM NIC GPU CPU Managerは こっち!? nvidia-device-pluginは こっち!? NUMA Node #1 NUMA Node #2
  • 4.
    4 Topology Manager https://kubernetes.io/docs/tasks/administer-cluster/topology-manager/ ● kubeletの機能 (v1.18 から beta) ● 複数のリソースにまたがって「良い」リソース割り当てを実現 ○ CPU, Memory, Device Manager が HintProvider interface を実装して リソース要求を満たす NUMA Affinity を Topology Manager に報告 ○ Topology Manager は 希望が満たされるように結果をmergeする ■ 満たせないときにどうするかは policy で注入 ● none, best-effort, restricted, single-numa-node ○ 見つかったNUMA Affinityに基づいてリソースをallocateする
  • 5.
    5 TopologyHintによるNUMA Affinityの解決の概要 CPU Manager:[10], [01] → またがっちゃだめ Memory Manager: [10], [01] → またがっちゃだめ GPU Device Plugin: [10] → Socket 0のみOK TopologyHint ≒ [ 1 0 ] i 番目がTrue ⇔ Socket(~NUMA) iとのAffinity可能 Socket 0と近い割り当てができそう! Mergeされた結果 [1 0] →Socket 0のみOK CPU Socket 1 CPU Socket 0 GPU NIC MEM CPU CPU MEM NIC GPU 使用中 Icon pack by Icons8 - https://icons8.com
  • 6.
    6 ● Topology Managerを使い始めました! ○最近K8s v1.23に更新しました ○ best-effort policy で,GPUがCPUソケットにまたがって割当てられなくなった ■ うれしい! Icon pack by Icons8 - https://icons8.com CPU Socket CPU Socket GPU NIC MEM CPU CPU MEM NIC GPU PFNでもTopology Managerを使い始めました PFNの計算ノードの構成 ● CPU: 2ソケット ● GPU: 各ソケットに複数 ● NIC: 各ソケットに複数
  • 7.
    Making the realworld computable