Home news&trend 01 IBM iの実行環境

01 IBM iの実行環境

by kusui

IBM i の実行管理機能は、システムに対する操作やシステム上のワークロードを制御するために必要なコマンドおよび内部機能を提供する。またアプリケーションのリソースを管理して、システムがアプリケーションを処理するのに必要な機能が含まれている。

システムの目的は作業を円滑に、遅滞なく実行することであり、作業はシステムに入力され、処理され、そして終了する。ここでは、作業がどこからシステムに投入されるのか、作業がどのリソースを使ってどこで処理されるのか、および作業の出力の行き先はどこで決められるのか、という観点でIBM i の実行管理の基本を解説する。

サブシステムとジョブ待ち行列

IBM i の環境を実行管理という観点から見ると、「システム」「サブシステム」「ジョブ」という大きく分けて3つの単位がある(図表1)

 

図表1 画像をクリックすると拡大します】

 

システム全体に関わるような設定は、システム値と呼ばれるパラメータで指定する。これはデフォルト値のようなものであり、より下位の要素では、必要な部分だけオーバーライドして指定するのが基本である。

サブシステムは、共通の特性をもった作業をまとめてグループ化し、それらに対して処理環境を提供し、かつ制御する。複数の作業の実行環境をサブシステム単位でまとめることで一括変更でき、リソース管理なども容易になる。

サブシステムの属性は、「サブシステム記述」と呼ばれるオブジェクトで定義する。サブシステムが作業を処理する空間を表すものだとすると、サブシステム記述はその空間の設計図に相当する。

サブシステム記述には、必ずと言っていいほど「ジョブ待ち行列」が併せて定義されている。ジョブ待ち行列は入力の順番待ちを司る仕組みであり、ここに入力されるのは、ユーザーから見た作業の単位となる「ジョブ」である。

ジョブ待ち行列にジョブが投入されると、サブシステムの定義に従って、そのジョブ待ち行列に連結した活動中のサブシステム上でジョブが動き出す。

ジョブが開始されるには、ジョブ待ち行列に入る必要があるが、このジョブ待ち行列はどのように決定されるのだろうか。ジョブ待ち行列の決定要素について、SBMJOBというバッチジョブを投入するためのCLコマンドを例に取り、以下に解説する(図表2)

 

図表2 画像をクリックすると拡大します】

 

SBMJOBコマンドにおけるジョブ待ち行列の省略値は*JOBDであり、SBMJOBコマンドの別パラメータであるJOBD(ジョブ記述、後述)に指定されたものを使用する。

さらに、JOBDパラメータの省略値は*USRPRFであり、ユーザー・プロファイルに指定されたジョブ記述から指定される。SBMJOBコマンドにおけるJOBQパラメータに特定のジョブ待ち行列名を直接指定する。あるいは、特別なジョブ記述を指定して間接的に指定することも可能である。

なおジョブ待ち行列の決定方法は、ADDJOBSCDEコマンドによるジョブスケジュール登録機能(WindowsのタスクスケジューラやUNIXのcrontabに相当する)でも同様である。

ジョブ待ち行列はCRTJOBQコマンドで作成でき、作成されたジョブ待ち行列はADDJOBQEコマンドによって特定のサブシステムに関連付けられる。

このADDJOBQEコマンドで重要なのがMAXACTパラメータである。このコマンドを使って、ジョブ待ち行列に投入されたジョブの同時並行実行数を指定する。

たとえば10個のジョブがジョブ待ち行列に投入された場合、そのジョブ待ち行列と関連付けられたサブシステムのMAXACTが1ならば、サブシステム上で活動するジョブの数は1個、そのジョブの終了後に次の1個、さらにそれが終了したら、次の1個という動きを10回繰り返すことになる。

またMAXACTが5の場合は、最初に5個のジョブが同時に処理され、その5個のジョブのうち1個終わるたびに、ジョブ待ち行列上の残りのジョブが1つ取り出されて、ジョブが順次活動状態になる(図表3)

 

図表3 画像をクリックすると拡大します】

 

ジョブ待ち行列のMAXACTパラメータをうまく利用することで、一時点で順列に処理したいジョブ群と同時並行で処理したいジョブ群を分割したり、システム上のリソース状況から判断し、ユーザー側でジョブ実行の並行度数を制御することが可能になる。

 

ジョブ記述

画面を媒介する対話型ジョブにしても、SBMJOBコマンドによるバッチジョブ開始にしても、そのジョブを実行する環境や性質(ジョブ属性)を、何らかの方法で決定する必要がある。

このジョブ属性を決定する際のテンプレートになっているのが、ジョブ記述である。1つのジョブ記述を複数のユーザー・プロファイルで共有したり、複数のジョブから参照することも可能である。

ジョブ記述でとくに重要なキーワードは、以下のとおりである。

 

ジョブ待ち行列(JOBQ):ジョブを投入するための入口

出力待ち行列(OUTQ):スプール化された印刷データが、プリンタからの印刷の順番待ちをする場所

初期ライブラリー・リスト(INLLIBL):ジョブが開始された際に使用するライブラリー群の一覧(UNIXのパスに相当するもの)

メッセージのロギング(LOG):ジョブの実行結果の出力有無やログ・レベルの詳細化を決定

 

前述のSBMJOBコマンドと、ジョブ記述を作成するCRTJOBDコマンドでは、多くの共通したパラメータが存在する。ジョブの投入や生成だけなら、SBMJOBコマンドでジョブ記述を指定することにより、およそのジョブ属性を決定できる。

ただし特定の場面で柔軟性をもたせられるように、SBMJOBコマンドでは指定したジョブ記述の内容を変更して実行できるようになっている。ここでも、必要な部分だけをオーバーライドして指定するという発想が基本になっている。

 

記憶域プール

IBM i では、物理メモリを複数のエリア(記憶域プール)に分割し、実行するジョブのタイプごとに各プールを使い分けられる。このプールは、サブシステム記述において各サブシステムと関連付け、あるジョブを他のジョブから切り離して(資源の影響を受けずに)実行できるようになっている。

ジョブ待ち行列を経由して投入されたジョブがサブシステム上で活動を開始すると、そのサブシステムと関連するプールという資源を活用して、ジョブが処理される。

標準では、以下の4つのプールがあらかじめ設定されている。

 

マシンプール:システムタスクが使用する

ベースプール:サーバージョブやバッチジョブなどが使用する

対話型プール:対話型ジョブ(主に5250エミュレータ画面)が使用する

スプールプール:スプーラー・ジョブ(印刷書き出しジョブ)が使用する

 

上記以外に、アプリケーションが占有使用するプールをユーザー独自で設定することも可能であり、これらすべてのプールに対して、サイズ(MB)および活動レベルを動的に変更できる(ただしマシンプールの活動レベルだけはシステムが設定するため、ユーザー側で設定できない)。

サイズは大きさや容量そのものであるが、活動レベルとは、そのプールで同時に活動できるジョブ数を指定するものである。活動レベルを大きくすれば、同時活動ジョブが増加し、スループットが上がるように思えるかもしれないが、逆にメモリ上でページ・フォールト(ページ不在)が多発して、ディスクI/Oが増加することになり、パフォーマンスの劣化を招く場合もある。

プールサイズおよび活動レベルの決定は、その時点におけるシステム上で実行されているアプリケーションの特性などを考慮して決める必要があるものの、IBM i では、これらのサイズや活動レベルをその時点で最善となる値に自動調整する機能が搭載されている。

この指定は、システムの全体的な属性を設定するシステム値の1つであるQPFRADJで制御できる。この値をオンにすることで、システムが最適なサイズと活動レベルを動的に変更し、オフにした場合は自動調整を実行しなくなる。

 

出力待ち行列

サブシステム上で処理されたジョブは、ユーザープログラムによる帳票の印刷出力や、そのジョブの処理経過を記録したジョブ・ログ出力など、関連するプリンタ出力ファイル(スプールファイル)を出力して終了する(もちろん処理内容によっては、何も出力せずに終わるジョブも多数ある)。

出力待ち行列とは、これらのスプールファイルが処理され、プリンタに送信されるまで待機する領域である。スプールファイルは、システム、もしくは印刷ファイルを使用するユーザーのいずれかによって作成される。

印刷ファイルは、プリンタ出力のための属性のデフォルト値が設定されているテンプレートのようなものであり、出力待ち行列(OUTQ)パラメータおよびプリンタ(DEV)パラメータが含まれる。

デフォルト設定は通常、*JOBであり、実行されたジョブの属性(そのジョブの実行時に指定されたジョブ記述など)によってオーバーライドされるものが大半である。ただしなかにはQPJOBLOG(ジョブログのテンプレート)のように、OUTQパラメータにQEZJOBLOGというシステム提供のジョブ・ログ用出力待ち行列が特別に指定されている場合もある(図表4)。【小林 直樹】

 

図表4 画像をクリックすると拡大します】

related posts