SlideShare une entreprise Scribd logo
1  sur  23
Télécharger pour lire hors ligne
Linux KVM
       +
Control Groups
       +
    OMAKE
         2013/01/31 #ssmjp @togakushi
もくじ
●   KVM ってなぁに?
●   cgroup ってなぁに?
●   本日のデモ
●   おまけ




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




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




                                         4
Control Groups(cgroup)
●   Linux のリソースを管理 ( 制限とレポート ) す
    る仕組み
    –   メモリや CPU などのリソース毎の Subsystem に
        分けて管理
    –   管理する単位 ( グループ ) でプロセスを登録 ( タス
        ク)
    –   /proc と同様に仮想ファイルシステムを使用
        ●   echo/cat/mkdir/rmdir で設定可能



                                         5
Subsystems( 一部 )
●   Blkio
    –   物理ドライブ やブロックデバイスへの入出力を制限
●   Cpuset
    –   CPU のリソースを制限
●   Freezer
    –   タスクの一時停止/再開
●   Memory
    –   メモリのリソースを制限
●   net_cls
    –   パケットにタグを付ける ( トラフィックコントローラ ( tc) がパケットを
        識別できるようにする )


                                                  6
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




                                                                                   7
提供されるコマンド群 ( 抜粋 )
●   lssubsys
    –   利用できるサブシステムの表示
●   lscgroup
    –   タスクグループ名の一覧
●   cgget
    –   パラメータの取得
●   cgset
    –   パラメータの設定


                            8
提供されるコマンド群 ( 抜粋 )
●   cgcreate
    –   タスクグループの作成
●   cgdelete
    –   タスクグループの削除
●   cgexec
    –   タスクグループに割り当ててコマンド実行
●   cgclassify
    –   すでに実行しているコマンドをタスクグループに追加


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




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




                                11
libvirt+libcgroup
●   KVM→1VM=1 プロセス
●   cgroup→ プロセスで管理


      2つとも入っていたら
    自動的にタスクグループ作る!


                             12
libvirt のタスクグループ
●   /sys/fs/cgroup/<subsystem>/libvirt/qemu
    –   ディストリビューションによってマウントポイン
        トは違う
●   ...( 省略 ).../libvirt/qemu/<VM 名 >
    –   VM を起動させたら自動的に VM 名のサブグルー
        プが作成され、 VM のプロセスが登録される
    –   固定された名前が割り当てられるので、予め
        cgconfig.conf で設定しておける


                                              13
本日のデモ




        14
blkio で VM の書き込み制限
●   転送速度の制限
    –   blkio.throttle.write_bps_device
    –   blkio.throttle.read_bps_device
●   IOPS の制限
    –   blkio.throttle.write_iops_device
    –   blkio.throttle.read_iops_device




                                           15
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";
      }
    }



                                                            16
freezer で VM の一時停止
●   freezer.state
    –   THAWED :動いてる
    –   FREEZING :止まっている
    –   Virsh からは動いている様にみえる

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


                              17
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}




                                                              18
OMAKE




        19
ディスクイメージのマウント
●   パーティション情報が含まれている raw
    –   loopback→kpartx
    –   qemu-nbd
●   raw 以外のディスクイメージ (qcow2 とか )
    –   guestfish
    –   qemu-nbd




                                  20
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/nbd0
brw-rw---- 1 root disk 43, 1 Jan 31 08:17 /dev/nbd0p1
brw-rw---- 1 root disk 43, 2 Jan 31 08:17 /dev/nbd0p2

●   そのままマウント可能
% sudo mount /dev/nbd0p1 /mnt
…
% sudo qemu-nbd -d /dev/nbd0
                                                        21
LVM 領域のマウント
●   デバイスにマッピング (nbd / loop)
    –   マッピング完了時点で VG が見えるようになる
    –   見えなければ vgscan
    –   VG の名前がカブてったら vgchange で変える
●   Lvscan で LV が確認できる
    –   Inactive になっていたら vgchange で active に
    –   マウントできるようになる


                                               22
参考資料
●   リソース管理ガイド
    –   https://access.redhat.com/knowledge/docs/ja-JP/R
        ed_Hat_Enterprise_Linux/6/html/Resource_Manag
        ement_Guide/




                                                           23

Contenu connexe

Tendances

Tendances (20)

CloudFront経由でのCORS利用
CloudFront経由でのCORS利用CloudFront経由でのCORS利用
CloudFront経由でのCORS利用
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較
 
OpenStack入門 2016/06/27
OpenStack入門 2016/06/27OpenStack入門 2016/06/27
OpenStack入門 2016/06/27
 
コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話
 
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
 
[社内勉強会]ELBとALBと数万スパイク負荷テスト
[社内勉強会]ELBとALBと数万スパイク負荷テスト[社内勉強会]ELBとALBと数万スパイク負荷テスト
[社内勉強会]ELBとALBと数万スパイク負荷テスト
 
OpenStackで始めるクラウド環境構築入門(Horizon 基礎編)
OpenStackで始めるクラウド環境構築入門(Horizon 基礎編)OpenStackで始めるクラウド環境構築入門(Horizon 基礎編)
OpenStackで始めるクラウド環境構築入門(Horizon 基礎編)
 
Ansible 2.10 と Collection
Ansible 2.10 と CollectionAnsible 2.10 と Collection
Ansible 2.10 と Collection
 
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
 
OpenStackを一発でデプロイ – Juju/MAAS - OpenStack最新情報セミナー 2015年2月
OpenStackを一発でデプロイ – Juju/MAAS  - OpenStack最新情報セミナー 2015年2月OpenStackを一発でデプロイ – Juju/MAAS  - OpenStack最新情報セミナー 2015年2月
OpenStackを一発でデプロイ – Juju/MAAS - OpenStack最新情報セミナー 2015年2月
 
OVN 設定サンプル | OVN config example 2015/12/27
OVN 設定サンプル | OVN config example 2015/12/27OVN 設定サンプル | OVN config example 2015/12/27
OVN 設定サンプル | OVN config example 2015/12/27
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
はじめての vSRX on AWS
はじめての vSRX on AWSはじめての vSRX on AWS
はじめての vSRX on AWS
 
知っているようで知らないNeutron -仮想ルータの冗長と分散- - OpenStack最新情報セミナー 2016年3月
知っているようで知らないNeutron -仮想ルータの冗長と分散- - OpenStack最新情報セミナー 2016年3月 知っているようで知らないNeutron -仮想ルータの冗長と分散- - OpenStack最新情報セミナー 2016年3月
知っているようで知らないNeutron -仮想ルータの冗長と分散- - OpenStack最新情報セミナー 2016年3月
 
Fluentdのお勧めシステム構成パターン
Fluentdのお勧めシステム構成パターンFluentdのお勧めシステム構成パターン
Fluentdのお勧めシステム構成パターン
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
AWSでDockerを扱うためのベストプラクティス
AWSでDockerを扱うためのベストプラクティスAWSでDockerを扱うためのベストプラクティス
AWSでDockerを扱うためのベストプラクティス
 
Linux女子部 firewalld徹底入門!
Linux女子部 firewalld徹底入門!Linux女子部 firewalld徹底入門!
Linux女子部 firewalld徹底入門!
 
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
 
DNSキャッシュサーバ チューニングの勘所
DNSキャッシュサーバ チューニングの勘所DNSキャッシュサーバ チューニングの勘所
DNSキャッシュサーバ チューニングの勘所
 

Similaire à KVM+cgroup

Lvmを縮小してみた
Lvmを縮小してみたLvmを縮小してみた
Lvmを縮小してみた
koedoyoshida
 
tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1
Ryosuke IWANAGA
 
initとプロセス再起動
initとプロセス再起動initとプロセス再起動
initとプロセス再起動
Takashi Takizawa
 
Bhyve code reading
Bhyve code readingBhyve code reading
Bhyve code reading
Takuya ASADA
 
Nseg20120825
Nseg20120825Nseg20120825
Nseg20120825
hiro345
 
OpenStackでつくる開発環境と外道塾
OpenStackでつくる開発環境と外道塾OpenStackでつくる開発環境と外道塾
OpenStackでつくる開発環境と外道塾
外道 父
 
環境構築自動化ツールのご紹介
環境構築自動化ツールのご紹介環境構築自動化ツールのご紹介
環境構築自動化ツールのご紹介
Etsuji Nakai
 

Similaire à KVM+cgroup (20)

Lxc cf201207-presen
Lxc cf201207-presenLxc cf201207-presen
Lxc cf201207-presen
 
Lvmを縮小してみた
Lvmを縮小してみたLvmを縮小してみた
Lvmを縮小してみた
 
20190926_Try_RHEL8_NVMEoF_Beta
20190926_Try_RHEL8_NVMEoF_Beta20190926_Try_RHEL8_NVMEoF_Beta
20190926_Try_RHEL8_NVMEoF_Beta
 
tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1
 
JellyBeanのソースをとりあえず眺めてみた(手抜き)
JellyBeanのソースをとりあえず眺めてみた(手抜き)JellyBeanのソースをとりあえず眺めてみた(手抜き)
JellyBeanのソースをとりあえず眺めてみた(手抜き)
 
MINCS – containers in the shell script
MINCS – containers in the shell scriptMINCS – containers in the shell script
MINCS – containers in the shell script
 
Docker最新動向2017秋+セキュリティの落とし穴
Docker最新動向2017秋+セキュリティの落とし穴Docker最新動向2017秋+セキュリティの落とし穴
Docker最新動向2017秋+セキュリティの落とし穴
 
〜Apache Geode 入門 gfsh によるクラスター構築・管理
〜Apache Geode 入門 gfsh によるクラスター構築・管理〜Apache Geode 入門 gfsh によるクラスター構築・管理
〜Apache Geode 入門 gfsh によるクラスター構築・管理
 
今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門
 
OSC 2011 Hokkaido 自宅SAN友の会(後半)
OSC 2011 Hokkaido 自宅SAN友の会(後半)OSC 2011 Hokkaido 自宅SAN友の会(後半)
OSC 2011 Hokkaido 自宅SAN友の会(後半)
 
Open VZ
Open VZOpen VZ
Open VZ
 
Infinite Debian - Platform for mass-producing system every second
Infinite Debian - Platform for mass-producing system every secondInfinite Debian - Platform for mass-producing system every second
Infinite Debian - Platform for mass-producing system every second
 
initとプロセス再起動
initとプロセス再起動initとプロセス再起動
initとプロセス再起動
 
Bhyve code reading
Bhyve code readingBhyve code reading
Bhyve code reading
 
Nseg20120825
Nseg20120825Nseg20120825
Nseg20120825
 
OpenStackでつくる開発環境と外道塾
OpenStackでつくる開発環境と外道塾OpenStackでつくる開発環境と外道塾
OpenStackでつくる開発環境と外道塾
 
kube-system落としてみました
kube-system落としてみましたkube-system落としてみました
kube-system落としてみました
 
環境構築自動化ツールのご紹介
環境構築自動化ツールのご紹介環境構築自動化ツールのご紹介
環境構築自動化ツールのご紹介
 
Kubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-cluster
Kubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-clusterKubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-cluster
Kubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-cluster
 
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
 

Plus de (^-^) togakushi (15)

ささみ麻雀部の紹介
ささみ麻雀部の紹介ささみ麻雀部の紹介
ささみ麻雀部の紹介
 
ファイナル・ファンタジー2のデータを解析してみる
ファイナル・ファンタジー2のデータを解析してみるファイナル・ファンタジー2のデータを解析してみる
ファイナル・ファンタジー2のデータを解析してみる
 
手順書の話 Ver.0.3.0
手順書の話 Ver.0.3.0手順書の話 Ver.0.3.0
手順書の話 Ver.0.3.0
 
仕事の捉え方の話 #ssmjp
仕事の捉え方の話 #ssmjp仕事の捉え方の話 #ssmjp
仕事の捉え方の話 #ssmjp
 
OpenSSH User EnumerationTime-Based Attack と Python-paramiko
OpenSSH User EnumerationTime-Based Attack と Python-paramikoOpenSSH User EnumerationTime-Based Attack と Python-paramiko
OpenSSH User EnumerationTime-Based Attack と Python-paramiko
 
Janog33.5
Janog33.5Janog33.5
Janog33.5
 
現場で役に立たないsudoの使い方
現場で役に立たないsudoの使い方現場で役に立たないsudoの使い方
現場で役に立たないsudoの使い方
 
sshdのお話
sshdのお話sshdのお話
sshdのお話
 
tcpdumpとtcpreplayとtcprewriteと他。
tcpdumpとtcpreplayとtcprewriteと他。tcpdumpとtcpreplayとtcprewriteと他。
tcpdumpとtcpreplayとtcprewriteと他。
 
SSH力をつかおう
SSH力をつかおうSSH力をつかおう
SSH力をつかおう
 
jenkinsで遊ぶ
jenkinsで遊ぶjenkinsで遊ぶ
jenkinsで遊ぶ
 
Pakena #9
Pakena #9Pakena #9
Pakena #9
 
SSH力をつけよう
SSH力をつけようSSH力をつけよう
SSH力をつけよう
 
Sfstudy #2
Sfstudy #2Sfstudy #2
Sfstudy #2
 
ひとりsphinx
ひとりsphinxひとりsphinx
ひとりsphinx
 

KVM+cgroup

  • 1. Linux KVM + Control Groups + OMAKE 2013/01/31 #ssmjp @togakushi
  • 2. もくじ ● KVM ってなぁに? ● cgroup ってなぁに? ● 本日のデモ ● おまけ 2
  • 3. Linux KVM ● Linux Kernel-based Virtual Machine – Linux の仮想化基盤 – エミュレーションのほとんどは QEMU で提供 – 1 ゲスト =1 プロセスで動作 3
  • 4. Linux KVM ● Linux Kernel-based Virtual Machine – Linux の仮想化基盤 – エミュレーションのほとんどは QEMU で提供 – 1 ゲスト =1 プロセスで動作 4
  • 5. Control Groups(cgroup) ● Linux のリソースを管理 ( 制限とレポート ) す る仕組み – メモリや CPU などのリソース毎の Subsystem に 分けて管理 – 管理する単位 ( グループ ) でプロセスを登録 ( タス ク) – /proc と同様に仮想ファイルシステムを使用 ● echo/cat/mkdir/rmdir で設定可能 5
  • 6. Subsystems( 一部 ) ● Blkio – 物理ドライブ やブロックデバイスへの入出力を制限 ● Cpuset – CPU のリソースを制限 ● Freezer – タスクの一時停止/再開 ● Memory – メモリのリソースを制限 ● net_cls – パケットにタグを付ける ( トラフィックコントローラ ( tc) がパケットを 識別できるようにする ) 6
  • 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 7
  • 8. 提供されるコマンド群 ( 抜粋 ) ● lssubsys – 利用できるサブシステムの表示 ● lscgroup – タスクグループ名の一覧 ● cgget – パラメータの取得 ● cgset – パラメータの設定 8
  • 9. 提供されるコマンド群 ( 抜粋 ) ● cgcreate – タスクグループの作成 ● cgdelete – タスクグループの削除 ● cgexec – タスクグループに割り当ててコマンド実行 ● cgclassify – すでに実行しているコマンドをタスクグループに追加 9
  • 10. cgconfig.conf ● libcgroup の設定ファイル – サブシステムのマウントポイント – 作成するタスクグループ – タスクに設定するパラメータ 10
  • 11. cgrules.conf ● 実行されたコマンド ( プロセス ) を自動でタス クグループに割り当てるルールを記述 – ユーザやグループ – プロセス名 11
  • 12. libvirt+libcgroup ● KVM→1VM=1 プロセス ● cgroup→ プロセスで管理 2つとも入っていたら 自動的にタスクグループ作る! 12
  • 13. libvirt のタスクグループ ● /sys/fs/cgroup/<subsystem>/libvirt/qemu – ディストリビューションによってマウントポイン トは違う ● ...( 省略 ).../libvirt/qemu/<VM 名 > – VM を起動させたら自動的に VM 名のサブグルー プが作成され、 VM のプロセスが登録される – 固定された名前が割り当てられるので、予め cgconfig.conf で設定しておける 13
  • 15. blkio で VM の書き込み制限 ● 転送速度の制限 – blkio.throttle.write_bps_device – blkio.throttle.read_bps_device ● IOPS の制限 – blkio.throttle.write_iops_device – blkio.throttle.read_iops_device 15
  • 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"; } } 16
  • 17. freezer で VM の一時停止 ● freezer.state – THAWED :動いてる – FREEZING :止まっている – Virsh からは動いている様にみえる ● 料金未払いのユーザの VM を止めるとか ● LVM スナップショットを作ってみるとか 17
  • 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} 18
  • 19. OMAKE 19
  • 20. ディスクイメージのマウント ● パーティション情報が含まれている raw – loopback→kpartx – qemu-nbd ● raw 以外のディスクイメージ (qcow2 とか ) – guestfish – qemu-nbd 20
  • 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/nbd0 brw-rw---- 1 root disk 43, 1 Jan 31 08:17 /dev/nbd0p1 brw-rw---- 1 root disk 43, 2 Jan 31 08:17 /dev/nbd0p2 ● そのままマウント可能 % sudo mount /dev/nbd0p1 /mnt … % sudo qemu-nbd -d /dev/nbd0 21
  • 22. LVM 領域のマウント ● デバイスにマッピング (nbd / loop) – マッピング完了時点で VG が見えるようになる – 見えなければ vgscan – VG の名前がカブてったら vgchange で変える ● Lvscan で LV が確認できる – Inactive になっていたら vgchange で active に – マウントできるようになる 22
  • 23. 参考資料 ● リソース管理ガイド – https://access.redhat.com/knowledge/docs/ja-JP/R ed_Hat_Enterprise_Linux/6/html/Resource_Manag ement_Guide/ 23