GNU/Linux >> Linux の 問題 >  >> Linux

CPUSharesでcgroupを管理する方法

このシリーズのパート1では、cgroupの基本概念と、cgroupがLinuxサーバーのパフォーマンスとセキュリティの管理にどのように役立つかについて説明しました。ここでパート2では、CPUShares値とそれがcgroupsによってどのように使用されるかについて説明します。パート3ではcgroupの管理について説明し、パート4ではsystemdと相互作用するcgroupsで結論を出すことを忘れないでください。

Linuxエレベーターについて少し

このセクションでは、Red Hat Enterprise Linux(RHEL)に非常に焦点を絞ります。しかし、私のラボにあるいくつかのUbuntuボックスをざっと見てみると、I/Oスケジューラーとの類似点に気づきました。したがって、私のポイントのいくつかは他のディストリビューションにも当てはまる可能性があります。ほとんどのRedHatファミリー製品(Fedora、CentOS、およびRHEL)は、deadlineのいずれかを使用します。 またはcfq デフォルトのスケジューラとして。

  • Completely Fair Queuing(CFQ):リアルタイムプロセスからのI / Oを強調し、履歴データを使用して、アプリケーションが近い将来にさらにI/O要求を発行するかどうかを決定します。
  • 期限:リクエストに保証されたレイテンシを提供しようとします。これは、読み取り操作が書き込み操作よりも頻繁に発生する場合に特に適しています。読み取り用と書き込み用に1つのキューがあります。操作はキューで費やされた時間に基づいて完了し、カーネルは常に最大時間が経過する前に要求を処理しようとします。デフォルトでは、読み取り操作が書き込みバッチよりも優先されます。

そのことを念頭に置いて、RHELはcfqを使用する傾向があります SATAベースのドライブおよびdeadlineの場合 デフォルトでは、他のすべての場合。これは、システムの調整において重要な役割を果たします。もちろん、これらのスケジューラーは変更できます。ワークロードを調査し、タスクに最適なスケジューラーを選択する必要があります。スケジューラーはブロックデバイスごとに選択できることにも注意してください。 。これは、ディスクの構成方法によっては、1つのシステムに複数のスケジューラーを配置できることを意味します。

[次のこともお勧めします:tlogを使用したセッション記録用にコンテナ化されたSSHサーバーを設定する]

CPUシェア

CPUShares valueは、cgroup内のタスクに相対的なCPU時間を提供します。システムがcpucgroupコントローラーをマウントしたら、ファイルcpu.sharesを使用できます。 cgroupに割り当てられる共有の数を定義します。 CPU時間は、cgroupのCPUSharesをシステム上で定義されたCPUSharesの総数で割ることによって決定されます。このCPU時間の計算は非常に複雑になるため、いくつかの図を見て、物事を明確にしましょう。

上の図は、RHEL 7 OpenShiftContainerPlatformコントロールプレーンサーバーで最も一般的な要素のいくつかを表しています。このシステムのすべてのプロセスは、/で始まります cgroup。

RHELでは、これはルート/で始まります 1024の共有と100%のCPUリソースを持つcgroup。残りのリソースは、グループ/system.sliceに均等に分割されます。 、/user.slice 、および/kubepod.slice 、以下に示すように、それぞれデフォルトで1024の等しい重みがあります:

このシナリオでは、ロジックは非常に単純です。すべてのcgroupが同時に共有を要求している場合、各スライスはCPU共有の33%しか使用できません。計算は非常に簡単です:

そして、数字を差し込むと:

ただし、グループをネストしたり、同じレベルでグループの重みを変更したりした場合はどうなりますか?以下は、ネストされたグループの例です。

この例では、さまざまなユーザー用にcgroupを作成したことがわかります。ここで数学が面白くなります。最初は、次の方程式でうまくいくと思うでしょう。

ただし、これはuser.sliceに割り当てられた33%の23%にすぎません。 。つまり、 user1 リソース競合が発生した場合のこれらの重みに基づくと、合計CPU時間の約7.6%になります。

CPUSharesは急いで複雑になりました。ありがたいことに、他のほとんどのコントローラーはこれよりも簡単です。

[コンテナを使い始めますか?この無料コースをチェックしてください。コンテナ化されたアプリケーションのデプロイ:技術的な概要。 ]

まとめ

CPUSharesの値により、cgroupが非常に複雑に見える場合があります。それが、ここでCPUSharesについて説明したかった理由の一部です。ただし、CPUSharesを適切に使用すると、システムをより効率的かつ正確に管理できます。

このシリーズの次の記事では、cgroupの管理について説明します。今後ともこのシリーズを続けていただきたいと思います。パート4では、systemdとcgroupsでの議論を締めくくります。


Linux
  1. Sysbenchを使用してシステム(CPU、ファイルIO、MySQL)をベンチマークする方法

  2. LinuxでSystemctlを使用してSystemdサービスを管理する方法

  3. LinuxでPyenvを使用して複数のPythonバージョンを管理する方法

  1. Linuxでuseraddを使用してユーザーを管理する方法

  2. Linux – Cgroup間で公平な帯域幅共有を構成するにはどうすればよいですか?

  3. Gitでリポジトリを管理する方法

  1. bash コマンドで CPU スパイクを作成する方法

  2. bashでプロセッサ使用率を取得するには?

  3. lxc-execute でメモリと CPU を制限する