本文へジャンプ

System i スペシャリストが教えるV5 ちょっと、イイ話

第14回 IBM System i5 のSMT(Simultaneous Multi-Threading)機能

IBM System i5のSMT(Simultaneous Multi-Threading)機能

2004年5月に発表されたIBM System i5は、IBMとしてはじめてPOWER5プロセッサーを搭載したサーバーです。今回は、i5のハードウェアに焦点を当て、POWER5プロセッサーのSMT(Simultaneous Multi-Threading...同時マルチスレッド)機能について説明します。
パフォーマンスモデリングの結果では、同じプロセッサーでSMTがある場合は、ない場合に比べてパフォーマンスが35-40%ほども向上する、と算定されています。*1

SMTの概要

SMTは、複数スレッドを1つのプロセッサーで同時実行させる技術です。スレッドとはプロセッサーから見たプログラムの実行単位のことで、通常のの5250アプリケーションでは、1ジョブが1スレッドになると考えて差し支えありません。WebSphere Application Server等のJavaベースのプログラムやLotus Domino等のアプリケーションは、マルチスレッドを多用して稼動します。
POWER5プロセッサーには、2つのロード/ストアユニット、2つの算術演算ユニット、1つの分岐ユニット、2つの浮動小数点演算ユニットがあります。プロセッサーの1サイクルでこれらのユニットは同時並行して処理を行うことができますが、通常のジョブ(スレッド)は一度にこれらのユニットをすべて使うことはありません。SMTのないシステムでは1サイクルでは1つのスレッドしか処理しないため、あるサイクルでスレッドによって使われないユニットは遊んでしまうことになります。
プロセッサーの1サイクルのうちにスレッドで使われないこれらの機構を、同時実行可能なスレッドをもう一つ増やし、別のスレッドから利用できるようにする仕組みがSMTです。
POWER5のSMTでは、1プロセッサーで2つのスレッドが実行され、これらはL1キャッシュを共用しますが、レジスタ域は別に取られます。SMTのないシステムでは厳密には一時点では1プロセッサーに1つのスレッドしか実行されていませんが、SMTでは、厳密にみても一時点で2つのスレッドが実行されていることになります。このため、SMTを活動化するとOSからはユニプロセッサーのマシンでも2Wayの様に見えます。 SMTの挙動を模式的に書くと、下の図のようになります。一つ一つの箱がプロセッサーの機構、縦の1列が1プロセッサーサイクルに相当し、左から右に時間が流れる、と考えます。
マルチスレッディングのないシステムでは、プロセッサーは同時には1つのスレッドしか実行できません。また、メモリーからキャッシュにデータを移動する、といった処理はプロセッサーから見れば非常に長い時間がかかり、そういう場合には何サイクルもプロセッサーが遊休してしまうことがあります(中央の白い部分)。
SMTでは、この遊休時間を有効利用することに加え、1サイクルの中でも2つのスレッドがプロセッサーを同時に使用することができます

*1
1-16プロセッサーでのデータベーストランザクション ベンチマーク。パフォーマンスは環境により異なります。

模式図

SMTの影響

SMTを利用すれば一般にシステムのパフォーマンスは向上しますが、逆にパフォーマンスを低下させる要素がないわけではありません。2つのスレッドの間でパイプラインステージの競合が起こった場合等は、1つのスレッドにだけ着目すると実行時間が長くなることがあります。しかし、複数のスレッドを同時実行する場合、SMTはシステム全体のスループットを飛躍的に増大させます。SMTを利用すると、システムが単位時間に処理できる仕事量が大きくなります。
このほかに、ワークロードのタイプ、同時多重処理されるスレッドのキャッシュ共用の度合、コーディングのスタイル(命令を同時実行させる度合)、等によってもSMTの効果は異なります。
SMTは1つのプロセッサーを複数スレッドで効率よく利用するための技術であって、スレッドの実行速度を上げるものではありません。そのため、1スレッドからなる処理を1つだけ実行する場合は、SMTの効果は得られません。SMTは、あくまでもシステムのスループットを向上させるためのものです。

i5/OSでのSMTの制御

i5/OSでは、システム値 QPRCMLTTSK の設定によって、SMTの動きを3通りに制御できます。

0=オフ
プロセッサーでSMTは利用されません。
ハードウェアはシングルスレッド(ST)モードとして動作し、1つの物理プロセッサーには1時点では1つのスレッドのみ割振られ、その1つのスレッドでプロセッサーの全資源を利用可能です。上記の説明で、「SMTがない場合」にあてはまります。
0=オフが指定された場合、その区画内のすべてのプロセッサーに対して有効になります。

1=オン
物理プロセッサー1つにつき2つまでのスレッドがタスクディスパッチャによって割当てられます。
しかし、物理プロセッサーが2つ以上ある場合には、すでにスレッドを1つ実行しているプロセッサーに追加でスレッドを割振るよりも、まったく使われていないプロセッサーに割振る方がパフォーマンスは通常よくなります。
1=オン が指定された場合、その区画内のすべてのプロセッサーに対して有効になります。

2=システム制御*2
1=オンに加えてさらに拡張された機能を提供します。
このモードでは、物理プロセッサーで実行すべきスレッドがただ1つしかない場合、OSの判断によりそのプロセッサーを一時的にシングルスレッドモードで稼動させることができます。実行すべきスレッドが1つしかない場合は、この方が実行時間がわずかに短くなります。プロセッサーがシングルスレッドモードのときに別のスレッドをこのプロセッサーに割振る必要が生じた場合、プロセッサーはSMTモードに復帰します。
このモードでは、区画のCPU使用率の値が予期しない値になることがあります。
OSがプロセッサーをシングルスレッドモードにするのは、一時点では1つの処理を行えば十分である程度にプロセッサーの使用率が低く、当面はSMTが必要ない、と判断した場合です。この判断は自動的に行われます。

*2
i5/OS V5R3では、「2=システム制御」は「1=オン」と同じ動きをします。ここで説明されている機能は将来提供される予定です。

参考情報