システム値 QPRCMLTTSK CPUマルチタスク処理が0のシステムでPOWER8->10移行後レスポンスが悪化
メモとして。
環境
移行前:POWER8, IBM i 7.3, 0.4コア程度割当
移行後:POWER10, IBM i 7.5, 0.2~0.5コアでテスト
発生した事象
昼間の業務時間帯ほぼ全体にわたって移行前よりも明確に体感できるレベルでジョブのレスポンスタイムが悪化。バッチ処理時間も数倍~に悪化。
原因
システム値QPRCMLTTSKがデフォルト2のところ、0に設定されていました。移行前のPOWER8, IBM i 7.3も同様だったのであるタイミングで何らかの理由で変更されたのだと思われますが確認不能でした。
QPRCMLTTSKシステム値を0->2に変更したところCPU性能向上に近いレスポンスタイムの改善がみられました。
収集サービス ヘルス標識
収集サービスデータを見ると、たとえば下記は最も悪い時間帯の断面ですが、CPUが赤標識で、とくにCPUキューイングがとても悪いものでした。
システム値 QPRCMLTTSK CPUマルチタスク処理 とは
マニュアル:システム・デフォルトおよびユーザー・デフォルトのシステム値: プロセッサー・マルチタスキング
(以下抜粋)
プロセッサー・マルチタスキングを制御できます。 このシステム値は、 ハードウェアが、1 つのプロセッサーで一度に 1 つのタスクのみを実行するか、 それとも 2 つ以上のタスクを実行するかを制御します。
このシステム値には、以下の値があります。
オフ (0)
各プロセッサーは、どの瞬間でも、1 つのタスクだけを処理します。
オン (1)
複数のプロセッサーが同時に複数のタスクを処理できます。
システム制御 (2)
複数のプロセッサーが同時に複数のタスクを処理できます。 また、システム制御状態では、 オペレーティング・システムで、 必要に応じて 1 つのプロセッサーが 1 つのタスクだけを処理するよう制限できます。
値はパフォーマンスを基にして指定する必要があり、ワークロードに依存します。 1 つのプロセッサーに複数のタスクを許可すると、多くの場合、システムのパフォーマンス能力が増大します。 したがって、システムはより多くの作業を処理します。 プロセッサーを単一タスクの実行に制限すると、多くの場合、 システムでの個別タスクの実行を高速にすることができます。
システム値への変更は、Power6® 以降のハードウェアに即時に有効になります。
出荷時の値はシステム制御 (2) です。
CPUキューイングはCPUの演算装置数(= 一般に割当CPUコア数に近似と考えていいと思います)の不足を表していると思われます。上記の1つのプロセッサー=1つのコアを意味していると考えられますので、POWER10 1コアの場合、8SMT *1 で動作できるところを1SMT(こんな表現は本来ありませんが・・)で動作していたためと思われます。
システム値変更後の収集サービスデータが分かれば追記したいと思います。
注記
*1 POWER CPUのSMT = インテルCPUのハイパースレッドと同義です。
考察
POWER8と同じシステム値だったにも関わらずPOWER10でパフォーマンス劣化が顕著に見られた件から、逆に言うと、POWER10はPOWER8よりもSMT8有効時のパフォーマンスが高い、SMT8により最適化している、と言えるかもしれません。
質問
ちなみに、「ジョブのCPUキューイング・パーセント」は、ジョブが 不適格待ち行列 にある時間的 (あるいは個数的) 割合を示しているのでしょうか?
参照 : IBM i アーキテクチャー:実行管理 ジョブ状態遷移の具体例
A.
いいえ
CPUキューイングは、「スレッドやタスクが待ち⾏列に⼊り、プロセッサーの実⾏を待っている状態」を意味し、ジョブの活動レベルを維持した状態です。不適格待ち行列は活動レベルを放棄したジョブが入る待ち行列なので異なります。
図示すると以下のようになります。CPUキューイングは短時間待機(2秒以内の待機)に該当すると思います。
事後付記:QPRCMLTTSKシステム値変更後、改善結果のヘルス標識
参考までに首記について追記します。
全く同じトランザクション、処理内容というわけではありませんが、ほぼ同様な傾向の処理がなされた上でのデータとなります。上記システム値変更後、下記のようにシスステムヘルス標識は大きく改善されました。