タグ付けされた質問 「cgroups」

Linux cgroup(コントロールグループ)を使用すると、CPU、メモリ、ブロックI / Oなど、システム上のリソースを制限およびアカウンティングできます。

1
cgroupsを使用して、ホワイトリストを除くすべてのプロセスを単一のCPUに制限する方法は?
Red Hatのcgroupsのガイドがありますが、これは一種の役に立つかもしれません(ただし、この質問には答えていません) 特定のプロセスを開始するコマンドの実行中に、特定のプロセスを特定のCPUに制限する方法を知っています。 まず、以下を*に入れます/etc/cgconfig.conf。 mount { cpuset = /cgroup/cpuset; cpu = /cgroup/cpu; cpuacct = /cgroup/cpuacct; memory = /cgroup/memory; devices = /cgroup/devices; freezer = /cgroup/freezer; net_cls = /cgroup/net_cls; blkio = /cgroup/blkio; } group cpu0only { cpuset { cpuset.cpus = 0; cpuset.mems = 0; } } そして、プロセスを開始し、次を使用してそのcgroupにそれを明確に割り当てます: cgexec -g cpuset:cpu0only myprocessname 特定のプロセス名のすべてのインスタンスを自動的に制限するには、(これは正しいと思います)に以下を入力し/etc/cgrules.confます。 …

4
最も単純で安全なサンドボックス(限られたリソースが必要)
私は、分散シミュレーションを実装するプロジェクトに取り組んでいます。任意のコードが複数のノードで実行され、結果が後で収集および集計されます。 各ノードはUbuntu Linux仮想マシンのインスタンスであり、実行されるコードを複数のワーカープロセス(コアごとに1つ)に転送するマスタープロセスを実行します。 この質問は、各ワーカーに仮想マシンインスタンスを使用せずに、各ワーカーがサンドボックス環境で動作することを確認する方法に関するものです。労働者の正確な要件は次のとおりです。 fs:書き込み許可なし、単一ディレクトリ(およびサブフォルダ)に制限された読み取り専用許可 net:ローカル通信のみが許可されます(IPC、TCPなど) mem:メモリ使用量の上限(スワップメモリ​​なし) cpu:許可されるコアは1つのみです。時間制限を超えた場合は強制終了します 他の制限を課すべきではありません:ワーカーは、動的ライブラリを(読み取り専用フォルダーから)ロードし、新しいスレッドまたはプロセスを生成し、システム関数を呼び出し、ecc eccできる必要がありますが、制限は、生成/ロードされたエンティティによって継承される必要があり、合計方式で適用する必要があります(たとえば、それぞれ800MBを使用する2つのスレッドをワーカーに生成させることはできません。そのようなワーカーのメモリ制限は1GBです)。 言うまでもなく、労働者がその権利を高める方法はないはずです。 要件を満たす最もシンプルなソリューションのための利用可能な代替案(SELinux、AppArmor、cgroups、ulimit、Linux名前空間、LXC、Dockerなど)を検討するのにかなりの時間を費やしましたが、フィールドでの経験は限られています。 現在の理解:LXCとDockerは、私のユースケースでは少し重く、完全に安全ではありません1。AppArmorは設定が簡単であるため、SELinuxよりも望ましいです。fsとネットの制限に使用します。cgroupsはulimit(単一のプロセスで動作する)よりも好ましく、memおよびcpuの制限に使用します。 これは私の目標を達成する最も簡単な方法ですか?AppArmorまたはcgroupsのみを使用できますか?モデルに明らかなセキュリティホールはありますか?ガイドラインは「労働者自身を倒すことを許可されているが、それ以外は何もしてはならない」であるべきである。


3
systemdでユーザーcgroupを作成する方法
で非特権lxcコンテナを使用していArch Linuxます。基本的なシステム情報は次のとおりです。 [chb@conventiont ~]$ uname -a Linux conventiont 3.17.4-Chb #1 SMP PREEMPT Fri Nov 28 12:39:54 UTC 2014 x86_64 GNU/Linux これは、カスタム/コンパイルされたカーネルuser namespace enabledです: [chb@conventiont ~]$ lxc-checkconfig --- Namespaces --- Namespaces: enabled Utsname namespace: enabled Ipc namespace: enabled Pid namespace: enabled User namespace: enabled Network namespace: enabled Multiple /dev/pts instances: enabled …

2
VMの重みベースのブロックIO制御
KVMを使用して仮想マシンを管理しています。VMに提供されるリソースを制限しようとしています。libvirt / cgroupsを使用して、VMに割り当てられるCPUとメモリを制限できます。次に、いくつかの重みを適用して、各VMに割り当てられるディスク時間を制御します。私はcgroupsからのblkioコントロールを見ました。VMは単なるLinuxプロセスなので、cgroupを使用できますが、非同期IOでも動作するかどうかはわかりません。そうでない場合、誰かが良い代替ソリューションを提案できますか?

1
Linux cgroupを使用してCPUパフォーマンスのバランスをとる
比較的最近のカーネルでLinux cgroupを使用して2つのデュアルコアLinuxシステムをインストールしています。1つはDebian Squeezeを実行しており、もう1つはUbuntu 11.04 Natty Narwhalを実行しています。古いカーネルにもかかわらず、Debianシステム上でcgroupの動作が少し改善され、CPUの負荷分散が実現しました。しかし、それはすべてに適しているわけではなく、ここで私が尋ねている特異な奇妙さは両方のシステムで起こります。 コントロールグループを使用したLinuxのリソース管理を読むと、問題の再現方法を示す例が示されています。Ubuntuバージョンは次のとおりです(これをルートとして実行します)。 cd /sys/fs/cgroup/cpu [On Debian Squeeze start at /mnt/cgroups/cpu instead] mkdir low high echo 512 > low/cpu.shares echo 2048 > high/cpu.shares yes low > /dev/null & echo $! > low/tasks yes high > /dev/null & echo $! > high/tasks ps -C yes -opid,%cpu,psr,args [repeat …

1
cgroupはcgroup化されていないプロセスとどのように相互作用しますか?
シングルコアマシンに3つのプロセスがあります。各プロセスはまったく同じであり、CPUを可能な限り高速で焼き付けます(タイトループ)。それらのうちの2つ(AおよびB)は、共有を512および512に設定したcgexecで個別のグループで起動されます。3番目(C)は、cgexecではなく定期的に起動されます。 すべてが稼働するとC、CPUの66%を取得しA、B33%を分割します。殺してC、それぞれ50%AをB得ると(予想どおり)。 なぜC66%を獲得するのですか?このシナリオではそれぞれ33%、または50%(C)、25%(A)、25%(B)を期待していました。Cしかし、66%が私が数学をどのように実行してもうまくいきません。 一般に、リソース共有(特にCPUですが、あまり複雑ではない場合はより一般的な答えがありcgexecます)で起動されるプロセスと対話せずに起動されるプロセスを理解したいと思いcgexecます。
12 cgroups 

4
cgroupの管理にはrootアクセスが必要ですか?
2つの異なるオペレーティングシステム(UbuntuとCentOS)のコントロールグループを操作しようとしています。聞きたいことはほとんどありません。 cgcreateコマンドを使用してコントロールグループを作成しようとしていますが、マシンでrootアクセスが必要なようです。これまでに見た例はすべて、コントロールグループを作成または変更するためにrootユーザーになる必要があることについて何も述べていません。 rootユーザーである必要は本当にありますか?最終目標は、libcgroup APIを使用してリソースを制御するための制御グループを作成および管理するC ++アプリケーションを作成することです。ただし、C ++アプリケーションはrootユーザーによって実行されることはありません。通常のユーザーである可能性があります。

2
競合しないcpuset内のスレッドに対するスケジューラの優先順位とポリシーの影響がある場合、どのような影響がありますか?
私は、cgroupを使用して2つのcpu_exclusive cpusets、AとBを作成し、すべてのユーザースレッドとすべての非バインドカーネルスレッドをcpuset Aに接続されたcgroupに移行したLinuxシステムを持っています。cpusetAで実行されているものは、さまざまなスケジューラポリシーを持っています優先順位が異なり、cpuset Aで実行されているスレッドの数は、cpuset Aのコア数よりも多くなります。 cpuset Bに接続されているいくつかの非常にアクティブなプロセスもあります。これらのプロセス全体のユーザースレッドの総数は、cpuset Bで排他的に使用可能なコアの数を超えることはありません。目的は、cpusetで実行されるこれらの重要なタスクをシールドすることです。マシンの他のアクティビティからのBと、処理の待ち時間を最小限に抑えるため。 このような設定で、cpuset Bで実行されているユーザースレッドのスケジューリングポリシー/優先順位は、目に見える影響を及ぼしますか?言い換えると、B cpusetスレッドのスケジューリングポリシーをデフォルトのSCHED_OTHERからSCHED_FIFOまたはSCHED_RRに変更すると、良い結果も悪い結果も発生しますか? スケジューラはcpuset Bで実行されている各スレッドに独自の専用コアを割り当てることができるため、答えは「いいえ」のように見えます。優先順位を付けたりスケジュールしたりするものは何もないため、Bのポリシーと相対的な優先順位はありません。 cpusetスレッドは重要ではありません。一方で、バインドされたカーネルスレッドと「スケジューラードメイン」の問題があること、そしておそらく私が考慮していない他のこともあります。 オーバープロビジョニングされた排他的cpusetで実行されているスレッドのスケジューリングポリシーと優先順位は、実際的な意味で重要ですか?

2
プロセスがOOMキラー/ cgroupによって強制終了される前に信号を受信します
このクラスターでは、メモリーなどのプロセスリソースを制限しています(memory.limit_in_bytes)。 結局のところ、これもLinuxカーネルのOOMキラーを介して処理されると思います(ソースコードを読むと、そのように見えます)。 プロセスが終了する前にシグナルを取得する方法はありますか?(SGEの-notifyオプションと同様に、プロセスが強制終了さqsubSIGUSR1れる前に送信されます。) 私は/dev/mem_notify ここについて読みましたが、それを持っていません-最近他に何かありますか?私もこれを読んで、ある程度関連性があるようです。 少なくとも小さなスタックトレースと他の有用なデバッグ情報をダンプできるようにしたいのですが、メモリを解放することで回復できるかもしれません。 私が現在使用している回避策の1つは、この小さなスクリプトです。このスクリプトは、上限(95%)に近いかどうかを頻繁にチェックし、上限に近い場合、プロセスにを送信しますSIGUSR1。Bashでは、このスクリプトをバックグラウンド(cgroup-mem-limit-watcher.py &)で開始しているため、同じcgroup内の他のprocを監視し、親Bashプロセスが停止すると自動的に終了します。

1
podmanをsystemdで起動すると、なぜ別のcgroupにconmonが表示されるのですか?
与えられたpodmanはLinuxシステムとbaz.serviceという名前のsystemdユニットにインストールされています: # /etc/systemd/system/baz.service [Service] ExecStart=/usr/bin/podman run --rm --tty --name baz alpine sh -c 'while true; do date; sleep 1; done' ExecStop=/usr/bin/podman stop baz そして、baz.serviceが開始しました: # systemctl daemon-reload # systemctl start baz.service 次に、ユニットのステータスを確認すると、/ system.slice / baz.service cgroupにプロセスshまたはsleepプロセスが表示されません。 # systemctl status baz ● baz.service Loaded: loaded (/etc/systemd/system/baz.service; static; vendor preset: enabl Active: …

2
このメモリの問題を適切に解決するにはどうすればよいですか?
私は標準のLinux(Debianテスト)ラップトップとスワップパーティションを持っています。 私はそれで多くの実験をしています。それらのいくつかは本当にメモリを大量に消費し、Linuxがデフォルトでどのように動作するかは私にとって問題です...愚かな例を挙げましょう: ノートパソコンの前に座る ターミナルを開く 入力しpythonた後、a = [0]*100000000 この大きなリストを処理するための十分なRAMがない可能性が高くなっています。LinuxがRAMを埋め、次にスワップを行い、数分後にOOMキラーがトリガーされ、(ほぼ)ランダムなサービスが強制終了されます。うまくいけば、Ctrl + Cを押すpythonと、ターミナルがまだフォーカスがあったので、コンピュータは再び反応するようになります。 いくつかのメモリ制限を適用して、不要なスワッピングを回避し、(RAMに)持っているよりも多くのメモリを割り当てる権利をプロセスに拒否したいと思います。メモリ要求が特定の制限を下回っている場合、またはrootから要求された場合は、root以外のユーザーのメモリを最も消費しているプロセスを強制終了します。 ulimit -Sv [mem] 後ろで聞く! ホーホー!「cgroups経由で使用してくださいcgexec!」誰かが最初の行で言う! はい、そうです。これらは確かに非常に優れたソリューションです。だが: システム全体には適用されません 制限はプロセスごとに設定されます 制限は静的であり、実際の空きRAM量を無視します(AFAIK) こことそこに、彼らが言うこれらは本当にハード制限を強制するための良い解決策ではありません。 カーネルが言うことは、「あなたはユーザーfoo(rootではなく)に属しています。大量のメモリを使用しているので、メモリが足りなくなります。ごめんなさい...今すぐ死にます!」 または:「一体何をしているのですか?x MB が必要で、y MB しか利用できません。はい、SWAPは空ですが、SWAPを使用してダーティな作業を行うつもりはありませんか?いいえ、私はいいえと言った!記憶はない!主張すれば死ぬぞ!」
10 memory  limit  cgroups  ulimit 

1
systemd cgroupsを持つすべてのユーザーにデフォルトのリソース制限を設定します
次のようにユーザーのメモリ制限を設定できます。 systemctl set-property user-UID.slice MemoryHigh=24G これをすべてのユーザーに適用する方法はありますか?すべてのユーザープロセスの合計24Gではなく、各ユーザーが24Gを取得するようにしたいと思います(これをuser.slice直接設定した結果だと思います)

1
cgroup内のプロセスはブートごとに設定する必要がありますか?もしそうなら、それらを持続させる方法は?
私はcgroupsを使用してプロセスの制限を設定することについての質問に対するこの回答を読んでいました。サンプルは、(この例では、処理のための設定の制限を与えsshd)。その答えとして、プロセスのPIDは手動で設定されます。これは私の目的には受け入れられません。特定のアプリケーションから開始されたプロセスには、いつ開始されても、開始されたプロセスの数によって制限されても、常に制限が設定されるようにしたいと思います。 例からはそれがどのように発生するかが明確でない可能性があります。そのため、明確な説明やリンクを貼っていただければ幸いです。カーネルcgroups.txtの例は、すでに上記で示したものと同じモデルを使用しているようです。

2
cboxを使用してvirtualboxのメモリ使用量を制限する
cgroup(コントロールグループ)を使用してvirtualboxのメモリ使用量を制限しようとしていますが、動作しないようです。 私のマシンは: $ uname -a Linux fc.bgi 2.6.40-4.fc15.i686 #1 SMP Fri Jul 29 18:54:39 UTC 2011 i686 i686 i386 GNU/Linux 私はそれを次のように機能させるようにしました: メモリ階層の下に新しいcgroupを作成します。 $ cgcreate -g memory:vbox vboxのmemory.limit_in_bytesの設定: $ cgset -r memory.limit_in_bytes=512M vbox pidを実行するvboxをvboxにグループ化: $ cgclassify -g memory:vbox 20015 なぜこれが機能しないのか誰かが説明できますか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.