27
Kernelのリソース管理 佐々木海(@Lewuathe)

Kernel resource

Embed Size (px)

Citation preview

Page 1: Kernel resource

Kernelのリソース管理佐々木海(@Lewuathe)

Page 2: Kernel resource

今日のお話• メモリ管理

• 自動NUMAバランス、メモリホットプラグ、vmpressure、zram、zswap

• CPU管理

• スケジューリングポリシー、RT Throttling、Fair Group Scheduling

• cgroup

• cpusets, memory group

Page 3: Kernel resource

メモリ管理割と新しめの機能

• 自動NUMAバランス

• vmpressure

• zram, zswap

Page 4: Kernel resource

自動NUMAバランスx86アーキテクチャ

• NUMA(Non Uniformed Memory Architecture)

Linuxではファームウェアが提示する構成情報を元にメモリアロケータがノードを管理

Page 5: Kernel resource

自動NUMAバランスx86アーキテクチャ

• SMP(Symmetric Memory Processing)

• NUMA(Non Uniformed Memory Architecture)CPU CPU CPU

cache cache cache

cache

mem

CPU CPU

cache cache

mem mem

SMP NUMA

Page 6: Kernel resource

自動NUMAバランス• NUMA(Non Uniform Memory Architecture)

マルチプロセッサを持ったシステムの共有メモリのアーキテクチャ

CPU1

Mem1

CPU2

Mem2

CPU3

Mem3

node1 node2 node3

Page 7: Kernel resource

自動NUMAバランス• 使用しているCPUとメモリの位置によってパフォーマンスが異なる

CPU1

Mem1

CPU2

Mem2

CPU3

Mem3

node1 node2 node3

データが遠い

Page 8: Kernel resource

自動NUMAバランス• 使うCPUを変える

• データを移す

CPU1

Mem1

CPU2

Mem2

CPU3

Mem3

node1 node2 node3

node3のCPUを使う

node1のメモリ上に移す

Page 9: Kernel resource

vmpressureメモリ回収処理の負荷に応じてユーザに通知

memkswapdなどがメモリ回収

2MBごとにメモリ回収失敗 スキャン量をチェック

ユーザに通知

Page 10: Kernel resource

zram, zswap空きメモリが必要になった場合の戦略

• データを捨てる

• データを退避させる(swap deviceの利用)

• データ圧縮する

Page 11: Kernel resource

zram物理メモリの一部を圧縮機能を持つRAMディスクとして扱う機能。3.14より正式ドライバとなった

アプリケーション

zram

書き込み時に自動で圧縮

読み込み時に自動で伸張

Page 12: Kernel resource

zram利点

• CPUリソースが余りがちなのでswapのI/Oより安定的な性能が期待できる

•クラウド上では実ディスクの場所が不明なので zramの方が安定的に動作することがある

Page 13: Kernel resource

zswap圧縮を伴ってswap deviceとのキャッシュとして動作する

swap device

memmemmempagezswap

page

pack

unpack

あふれるとディスクに書き出す

Page 14: Kernel resource

zram, zswap圧縮アルゴリズムは両方ともデフォルトでは

lzoを用いる。zramではlz4を選ぶこともできる

Page 15: Kernel resource

CPU管理スケジューリングポリシーのためのクラス

• TSS

• CPUに割り当てられた時間だけ動作

• リアルタイム

• 静的な実行優先度が設定可能

Page 16: Kernel resource

CPU管理スケジューリングポリシーの種類(2.6.23時点)

• SCHED_OTHER

• SCHED_FIFO

• SCHED_RR

• SCHED_BATCH

• SCHED_IDLE

Page 17: Kernel resource

CPU管理スケジューリングポリシーの種類(2.6.23時点)

• SCHED_OTHER

• TSSクラスのスケジューリングポリシー。CFSではCPU利用時間に基づいて公平に割り振られる

• SCHED_FIFO

• リアルタイムクラスのスケジューリングポリシー。SCHED_FIFOが適用されたプロセスはI/O待ちや自発的な休止などをのぞいて実行権を手放さない

Page 18: Kernel resource

CPU管理スケジューリングポリシーの種類(2.6.23時点)

• SCHED_RR

• タイムスライスを持ったリアルタイムクラスのスケジューリングポリシー。タイムスライスを使い切ると実行権が移る。

• SCHED_BATCH

• 休止時間による優先度の変更が行われない。ただCFSではバッチ処理、バックグラウンド処理の扱いは別になっているのでSCHED_OTHERとの実質的な差はない

Page 19: Kernel resource

CPU管理スケジューリングポリシーの種類(2.6.23時点)

• SCHED_IDLE

• タCPUがアイドル状態の時にのみ実行権が与えられる。実質最も優先度が低いプロセスになる

Page 20: Kernel resource

chrtユーザがスケジューリングポリシーを変更するためのコマンド

$ chrt -h

chrt - manipulate real-time attributes of a process

Set policy: chrt [options] <policy> <priority> {<pid> | <command> [<arg> ...]}

Get policy: chrt [options] {<pid> | <command> [<arg> ...]}

Scheduling policies: -b | --batch set policy to SCHED_BATCH -f | --fifo set policy to SCHED_FIFO -i | --idle set policy to SCHED_IDLE -o | --other set policy to SCHED_OTHER -r | --rr set policy to SCHED_RR (default)

Page 21: Kernel resource

RT Throttlingリアルタイムクラスへ割り当てるCPU時間を制限する機能

設定方法は単位時間当たりのリアルタイムクラスへの割り当て時間で設定可能

例:単位時間1秒, RT割り当て 0.95秒 リアルタイムクラスでないプロセスも0.05秒  はCPUを使える

Page 22: Kernel resource

RT Throttling設定値の参照の仕方

設定変更は -w

-1はリアルタイムクラスへのCPU時間の制限をなくす効果がある

$ sysctl -n kernel.sched_rt_period_us 1000000 $ sysctl -n kernel.sched_rt_runtime_us 950000

$ sysctl -w kernel.sched_rt_runtime_us=-1

Page 23: Kernel resource

Fair Group Schedulingcgroupを使ったリソース管理のひとつプロセススケジューラによるCPU割り当てを制御

$ mount -t cgroup -o cpu cgroup /cgroup

Page 24: Kernel resource

cgroup任意のプロセスをグループ化して管理する機能cgroupはグループ化のためのI/Fのみ提供実際の管理はサブシステムに任される

$ cat /proc/cgroups #subsys_name hierarchy num_cgroups enabled cpuset 0 1 1 cpu 3 3 1 cpuacct 0 1 1 memory 0 1 1 devices 0 1 1 freezer 0 1 1 blkio 0 1 1 perf_event 0 1 1 hugetlb 0 1 1

Page 25: Kernel resource

cpusetcgroupのサブシステムのひとつ特定のプロセスやスレッドが使用するCPUの組を指定することができる

$ mount -t cgroup -o cpuset cgroup /cgroup

Page 26: Kernel resource

Memory cgroupプロセスが利用するメモリの量を制限する

$ mount -t cgroup -o memory memcg /cgroup

10M制限あり 制限なし

Page 27: Kernel resource

Thank you