23
Linux KVM + Control Groups + OMAKE 2013/01/31 #ssmjp @togakushi

KVM+cgroup

Embed Size (px)

Citation preview

Page 1: KVM+cgroup

Linux KVM+

Control Groups+

OMAKE2013/01/31 #ssmjp @togakushi

Page 2: KVM+cgroup

2

もくじ

● KVMってなぁに?● cgroupってなぁに?● 本日のデモ● おまけ

Page 3: KVM+cgroup

3

Linux KVM

● Linux Kernel-based Virtual Machine– Linuxの仮想化基盤– エミュレーションのほとんどはQEMUで提供– 1ゲスト =1プロセスで動作

Page 4: KVM+cgroup

4

Linux KVM

● Linux Kernel-based Virtual Machine– Linuxの仮想化基盤– エミュレーションのほとんどはQEMUで提供– 1ゲスト =1プロセスで動作

Page 5: KVM+cgroup

5

Control Groups(cgroup)

● Linuxのリソースを管理 (制限とレポート )する仕組み– メモリや CPUなどのリソース毎の Subsystemに分けて管理

– 管理する単位 (グループ )でプロセスを登録 (タスク )

– /procと同様に仮想ファイルシステムを使用● echo/cat/mkdir/rmdirで設定可能

Page 6: KVM+cgroup

6

Subsystems(一部 )● Blkio

– 物理ドライブ やブロックデバイスへの入出力を制限● Cpuset

– CPUのリソースを制限● Freezer

– タスクの一時停止/再開● Memory

– メモリのリソースを制限● net_cls

– パケットにタグを付ける ( トラフィックコントローラ ( tc) がパケットを識別できるようにする )

Page 7: KVM+cgroup

7

libcgroup● cgroupに対するアクセス手段 (タスク作成・設定読み取り・設定書き込み )を提供するライブラリ群

– CentOS● libcgroup: Tools and libraries to control and monitor control groups

– ubuntu● cgroup-lite - Light-weight package to set up cgroups at system boot● cgroup-bin - Tools to control and monitor control groups● libcgroup1 - Library to control and monitor control groups

Page 8: KVM+cgroup

8

提供されるコマンド群 (抜粋 )

● lssubsys– 利用できるサブシステムの表示

● lscgroup– タスクグループ名の一覧

● cgget– パラメータの取得

● cgset– パラメータの設定

Page 9: KVM+cgroup

9

提供されるコマンド群 (抜粋 )

● cgcreate– タスクグループの作成

● cgdelete– タスクグループの削除

● cgexec– タスクグループに割り当ててコマンド実行

● cgclassify– すでに実行しているコマンドをタスクグループに追加

Page 10: KVM+cgroup

10

cgconfig.conf

● libcgroupの設定ファイル– サブシステムのマウントポイント– 作成するタスクグループ– タスクに設定するパラメータ

Page 11: KVM+cgroup

11

cgrules.conf

● 実行されたコマンド (プロセス )を自動でタスクグループに割り当てるルールを記述– ユーザやグループ– プロセス名

Page 12: KVM+cgroup

12

libvirt+libcgroup

● KVM→1VM=1プロセス● cgroup→プロセスで管理

2つとも入っていたら

自動的にタスクグループ作る!

Page 13: KVM+cgroup

13

libvirtのタスクグループ

● /sys/fs/cgroup/<subsystem>/libvirt/qemu– ディストリビューションによってマウントポイントは違う

● ...(省略 ).../libvirt/qemu/<VM名 >– VMを起動させたら自動的に VM名のサブグループが作成され、 VMのプロセスが登録される

– 固定された名前が割り当てられるので、予めcgconfig.confで設定しておける

Page 14: KVM+cgroup

14

本日のデモ

Page 15: KVM+cgroup

15

blkioでVMの書き込み制限

● 転送速度の制限– blkio.throttle.write_bps_device

– blkio.throttle.read_bps_device

● IOPSの制限– blkio.throttle.write_iops_device

– blkio.throttle.read_iops_device

Page 16: KVM+cgroup

16

cgconfig.confに書く場合

● VM01が sdaを使用している● 読み込み /書き込みを 10MB/sに制限

group libvirt/qemu/VM01 { blkio { blkio.throttle.read_bps_device = "8:0 10000000"; blkio.throttle.write_bps_device = "8:0 10000000"; }}

Page 17: KVM+cgroup

17

freezerでVMの一時停止

● freezer.state– THAWED:動いてる– FREEZING:止まっている– Virshからは動いている様にみえる

● 料金未払いのユーザの VMを止めるとか● LVMスナップショットを作ってみるとか

Page 18: KVM+cgroup

18

LVMスナップショット

● 止めてスナップショット作ってすぐ動かす

# cgset -r freezer.state=FROZEN libvirt/qemu/${VM_NAME}# lvcreate -s -L 1G -n ${SNAP_IMG} ${TARGET_IMG}# cgset -r freezer.state=THAWED libvirt/qemu/${VM_NAME}

Page 19: KVM+cgroup

19

OMAKE

Page 20: KVM+cgroup

20

ディスクイメージのマウント

● パーティション情報が含まれている raw– loopback→kpartx

– qemu-nbd

● raw以外のディスクイメージ (qcow2とか )– guestfish

– qemu-nbd

Page 21: KVM+cgroup

21

qemu-nbd

● nbdにマッピング

● そのままマウント可能

% sudo qemu-nbd -c /dev/nbd0 <Disk-img>% ls -l /dev/nbd0*brw-rw---- 1 root disk 43, 0 Jan 31 08:17 /dev/nbd0brw-rw---- 1 root disk 43, 1 Jan 31 08:17 /dev/nbd0p1brw-rw---- 1 root disk 43, 2 Jan 31 08:17 /dev/nbd0p2

% sudo mount /dev/nbd0p1 /mnt…% sudo qemu-nbd -d /dev/nbd0

Page 22: KVM+cgroup

22

LVM領域のマウント

● デバイスにマッピング (nbd / loop)– マッピング完了時点で VGが見えるようになる– 見えなければ vgscan

– VGの名前がカブてったら vgchangeで変える● Lvscanで LVが確認できる

– Inactiveになっていたら vgchangeで activeに– マウントできるようになる

Page 23: KVM+cgroup

23

参考資料

● リソース管理ガイド– https://access.redhat.com/knowledge/docs/ja-JP/R

ed_Hat_Enterprise_Linux/6/html/Resource_Management_Guide/