第19章 リアルタイムおよび低レイテンシーワークロードのプロビジョニング
組織が高性能コンピューティングと低遅延かつ予測可能なレイテンシーを必要とする場合、特に金融業界や通信業界においては、Node Tuning Operator を使用して自動チューニングを実装することで、OpenShift Container Platform アプリケーションの低レイテンシー性能と一貫した応答時間を実現できます。
このような変更を行うには、パフォーマンスプロファイル設定を使用します。
kernel-rt へのカーネルの更新、Pod インフラコンテナーを含むクラスターおよびオペレーティングシステムのハウスキーピング作業用 CPU の予約、アプリケーションコンテナーがワークロードを実行するための CPU の分離、未使用の CPU の無効化による電力消費削減を行うことができます。
アプリケーションを作成するときは、RHEL for Real Time プロセスおよびスレッド に記載されている一般的な推奨事項に従ってください。
19.1. 低遅延ワークロードをコンピュートノードにスケジュールする リンクのコピーリンクがクリップボードにコピーされました!
リアルタイム機能を設定するパフォーマンスプロファイルが適用されたコンピュートノードに、低遅延のワークロードをスケジュールすることができます。
ワークロードを特定のノードにスケジュールするには、Pod カスタムリソース (CR) のラベルセレクターを使用します。ラベルセレクターは、Node Tuning Operator によって低レイテンシー用に設定されたマシン設定プールに割り当てられているノードと一致している必要があります。
前提条件
-
OpenShift CLI (
oc) がインストールされている。 -
cluster-admin権限を持つユーザーとしてログインしている。 - クラスターに、低遅延ワークロード向けにコンピュートノードを調整するパフォーマンスプロファイルを適用しました。
手順
低レイテンシーのワークロード用の
PodCR を作成し、クラスターに適用します。次に例を示します。リアルタイム処理を使用するように設定した
Pod仕様の例apiVersion: v1 kind: Pod metadata: name: dynamic-low-latency-pod annotations: cpu-quota.crio.io: "disable" cpu-load-balancing.crio.io: "disable" irq-load-balancing.crio.io: "disable" spec: securityContext: runAsNonRoot: true seccompProfile: type: RuntimeDefault containers: - name: dynamic-low-latency-pod image: "registry.redhat.io/openshift4/cnf-tests-rhel8:v4.20" command: ["sleep", "10h"] resources: requests: cpu: 2 memory: "200M" limits: cpu: 2 memory: "200M" securityContext: allowPrivilegeEscalation: false capabilities: drop: [ALL] nodeSelector: node-role.kubernetes.io/worker-cnf: "" runtimeClassName: performance-dynamic-low-latency-profile1 # ...以下は、
metadata.annotations.cpu-quota.crio.io- Pod の実行時に CPU Completely Fair Scheduler (CFS) のクォータを無効にします。
metadata.annotations.cpu-load-balancing.crio.io- CPU 負荷分散を無効にします。
metadata.annotations.irq-load-balancing.crio.io- ノード上の Pod を割り込み処理から除外します。
spec.nodeSelector.node-role.kubernetes.io/worker-cnf-
nodeSelectorラベルは、NodeCR で指定したラベルと一致している必要があります。 spec.runtimeClassName-
runtimeClassNameは、クラスターで設定したパフォーマンスプロファイルの名前と一致している必要があります。
-
Pod の
runtimeClassNameを performance-<profile_name> の形式で入力します。<profile_name> はPerformanceProfileYAML のnameです。前述の YAML の例では、名前はperformance-dynamic-low-latency-profileです。 Pod が正常に実行されていることを確認します。ステータスは
実行中である必要があり、正しいcnf-workerノードが設定されている必要があります。$ oc get pod -o wide予想される出力
NAME READY STATUS RESTARTS AGE IP NODE dynamic-low-latency-pod 1/1 Running 0 5h33m 10.131.0.10 cnf-worker.example.comIRQ の動的負荷分散向けに設定された Pod が実行される CPU を取得します。
$ oc exec -it dynamic-low-latency-pod -- /bin/bash -c "grep Cpus_allowed_list /proc/self/status | awk '{print $2}'"予想される出力
Cpus_allowed_list: 2-3
検証
ノードにログインして設定を確認します。
$ oc debug node/<node-name>ノードのファイルシステムを使用できることを確認します。
sh-4.4# chroot /host予想される出力
sh-4.4#デフォルトのシステム CPU アフィニティーマスクに、CPU 2 や 3 などの
dynamic-low-latency-podCPU が含まれていないことを確認します。sh-4.4# cat /proc/irq/default_smp_affinity出力例
33システムの IRQ が
dynamic-low-latency-podCPU で実行されるように設定されていないことを確認します。sh-4.4# find /proc/irq/ -name smp_affinity_list -exec sh -c 'i="$1"; mask=$(cat $i); file=$(echo $i); echo $file: $mask' _ {} \;出力例
/proc/irq/0/smp_affinity_list: 0-5 /proc/irq/1/smp_affinity_list: 5 /proc/irq/2/smp_affinity_list: 0-5 /proc/irq/3/smp_affinity_list: 0-5 /proc/irq/4/smp_affinity_list: 0 /proc/irq/5/smp_affinity_list: 0-5 /proc/irq/6/smp_affinity_list: 0-5 /proc/irq/7/smp_affinity_list: 0-5 /proc/irq/8/smp_affinity_list: 4 /proc/irq/9/smp_affinity_list: 4 /proc/irq/10/smp_affinity_list: 0-5 /proc/irq/11/smp_affinity_list: 0 /proc/irq/12/smp_affinity_list: 1 /proc/irq/13/smp_affinity_list: 0-5 /proc/irq/14/smp_affinity_list: 1 /proc/irq/15/smp_affinity_list: 0 /proc/irq/24/smp_affinity_list: 1 /proc/irq/25/smp_affinity_list: 1 /proc/irq/26/smp_affinity_list: 1 /proc/irq/27/smp_affinity_list: 5 /proc/irq/28/smp_affinity_list: 1 /proc/irq/29/smp_affinity_list: 0 /proc/irq/30/smp_affinity_list: 0-5警告低レイテンシー用にノードをチューニングするときに、保証された CPU を必要とするアプリケーションと組み合わせて実行プローブを使用すると、レイテンシーが急上昇する可能性があります。代わりに、適切に設定されたネットワークプローブのセットなど、他のプローブを使用してください。