ユーザー間でリソースを公平に共有するようにcgroupをどのように設定しますか?

ユーザー間でリソースを公平に共有するようにcgroupをどのように設定しますか?

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

答え1

コア文書cgroupの一般的な内容は、例に付属しています。

ディストリビューションですでに提供されているパッケージ(その内容によって異なります)は大丈夫ですcgroups-binlibcgroup1

構成は、次の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ルールデーモン(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/

これは、ユーザー「アリス」と「ボブ」との間で約50〜50のCPUリソースを共有します。

関連情報