私は4コアのCPUを使用していますが、CPUリソースの制限が100mのKubernetesポッドを作成しています。つまり、コア電力の1/10を占有します。
この場合、100mは完全なコアではないのではないかと思います。アプリがマルチスレッドアプリの場合、アプリのスレッドは並列に実行されますか?または、すべてのスレッドがコア(100ミリコア)の一部でのみ実行されますか?
誰かが背後にあるメカニズムをさらに説明できますか?
私がこれまでに見つけた最も近い答えはこれです one :
シングルスレッドプログラムの場合、0.1のCPU使用率は、ランダムな瞬間にマシンをフリーズし、各コアの動作を確認できた場合、シングルスレッドが実行されている可能性が10分の1であることを意味します。その瞬間。マシンのコアの数は、0.1の意味には影響しません。複数のスレッドを持つコンテナーの場合、コンテナーの使用量はそのスレッドの使用量の合計です(以前の定義による)。どのコアで実行するかについての保証はなく、別のコアで実行する可能性がありますコンテナのライフタイムのさまざまな時点でコア。 CPU制限0.1は、使用量がかなりの期間0.1を超えることができないことを意味します。 0.1のCPU要求は、スレッドが頻繁にブロックされていない場合に、システムが少なくとも0.1のCPU使用率を確保できるようにすることを意味します。
上記はかなり論理的に聞こえます。私の質問に基づくと、CPUパワーの100mコアはすべてのCPUコアに分散します。つまり、Kubernetesでマルチスレッドが機能するはずです。
Kubernetesのリソースに関連する このドキュメント をご覧ください。
記事に記載されているリソースを使用できます。
コンテナのCPUリクエストを指定するには、コンテナリソースマニフェストに
resources:requests
フィールドを含めます。 CPU制限を指定するには、resources:limits
を含めます。この演習では、コンテナが1つあるポッドを作成します。コンテナには、0.5 CPUのリクエストと1 CPUの制限があります。ポッドの構成ファイルは次のとおりです。
apiVersion: v1
kind: Pod
metadata:
name: cpu-demo
namespace: cpu-example
spec:
containers:
- name: cpu-demo-ctr
image: vish/stress
resources:
limits:
cpu: "1"
requests:
cpu: "0.5"
args:
- -cpus
- "2"
あなたの質問に加えて:はい、並列で実行するつもりはありません(マルチコアスレッド)。ただし、ポッドでアプリケーションのコアをほとんど表示せず、マルチスレッドを使用してそれを実行できます。
設定ファイルの
args
セクションは、コンテナの起動時にコンテナの引数を提供します。-cpus "2"
引数は、2つのCPUを使用するようにコンテナに指示します。