web-dev-qa-db-ja.com

ユーザー間でリソースを公平に共有するようにcgroupを構成するにはどうすればよいですか?

以前は、sched_userなどのカーネル構成オプションがcgroupsの下にありました。これにより、(私の知る限り)すべてのユーザーがシステムリソースを公平に共有できるようになりました。 2.6.35では使用できません。すべてのユーザー(rootを含む)間でio/cpu/memoryリソースを自動的に共有するようにシステムを構成する方法はありますか?これまでにcgroupを設定したことがありません。そうするための良いチュートリアルはありますか?どうもありがとうございました。

11
NightwishFan

カーネル documentation は、cgroupの一般的なカバレッジと例を提供します。

cgroups-binパッケージ(これはlibcgroup1)ディストリビューションによって既に提供されているので問題ありません。

構成は、次の2つのファイルを編集することによって行われます。

/etc/cgconfig.conf

Libcgroupによって、制御グループ、それらのパラメーター、およびマウントポイントを定義するために使用されます。

/etc/cgrules.conf

プロセスが属するコントロールグループを定義するためにlibcgroupによって使用されます。

これらの構成ファイルにはすでに例が含まれているため、要件に合わせて調整してみてください。マニュアルページはそれらの構成を非常によくカバーしています。

その後、ワークロードマネージャーとルールデーモンを起動します。

service cgconfig restart
service cgred restart

ワークロードマネージャ(cgconfig)は、リソースの割り当てを担当します。
マネージャーに新しいプロセスを追加する:

cgexec [-g <controllers>:<path>] command [args]

すでに実行中のプロセスをマネージャーに追加します。

cgclassify [-g <controllers>:<path>] <pidlist>

または、cgrules.confファイルとCGroup Rules Daemon(cgred)を自動的に上書きします。これにより、新しく生成されたすべてのプロセスが指定されたグループに強制されます。


/etc/cgconfig.confの例:

group group1 {
    perm {
            task {
                    uid = alice;
                    gid = alice;
            }
            admin {
                    uid = root;
                    gid = root;
            }
    }

    cpu {
            cpu.shares = 500;
    }

}

group group2 {
    perm {
            task {
                    uid = bob;
                    gid = bob;
            }
            admin {
                    uid = root;
                    gid = root;
            }
    }

    cpu {
            cpu.shares = 500;
    }

}

mount {
    cpu = /dev/cgroups/cpu;
    cpuacct = /dev/cgroups/cpuacct;
}

/etc/cgrules.confの例:

alice            cpu             group1/
bob              cpu             group2/

これにより、ユーザー「alice」と「bob」の間で約50〜50のCPUリソースが共有されます。

12
wag