

z/Linuxとは(IA Linuxとの違い)
こんにちは、システム基盤サービス部の田上です。
私がz/Linuxに最初に出会ったのは2006年になりますが、そのときは既に導入済みの環境でしたので、ログオンしてみて「IA Linuxと何が違うの?」というのが第一印象でした。シェルスクリプトを書いてみても、PerlやCで簡単なプログラムを書いて動かしてみても、当初はIA Linuxとの違いが分かりませんでした。
今回は、z/Linuxのインフラ構築、運用ツールの作成をする中で私が感じた点を加えながら、System zおよびz/Linuxについて一般的な紹介をさせていただこうと思います。
z/Linuxとは
z/Linuxとは、IBMの製品であるSystem z(いわゆるメインフレーム)上で動作するLinuxを指します。LinuxのディストリビューションとしてはSUSE (R) Linux Enterprise Server、Red Hat Enterprise Linux等があります。この他にもSystem z上で動作するLinuxは存在しますが、現在商用目的として利用されるz/Linuxは前記の2種類がほとんどです。
何故System zなのか?
メインフレームは1964年に誕生し、長年に渡って企業システムの基幹業務を支えてきました。その長い歴史と技術革新の変遷の中で非常に高い「信頼性」、「可用性」、「拡張性」を培ってきました。また昨今の流行である仮想化技術もその祖はSystem zであり、堂々たる歴史を持っています。他にもI/O処理能力や同時並行処理能力に優れているのがSystem zの特徴です。企業システムのプラットホームとして圧倒的な信頼性と安定性を誇るSystem zの上でLinuxを稼動させることで、Linuxのオープン性を保持したままSystem zのこれらのメリットを享受できるのがz/Linuxを選択する最大の理由です。
IA Linuxとの違い
z/LinuxとIA Linuxを比べるとそのソース改修箇所は全体の数%と言われています。Linuxのコード構造自体には変更を加えず、「カーネル内のハードウェア依存コード」、「デバイスドライバ」、「アセンブラコード」のみに改修が入っており、IA Linux用に開発されたソースコードの90%以上は無修正のままz/Linux上で動くといわれています。
では、どこがどう違うのか?
アセンブラコードについては我々の目に触れるようなことはありません。IA Linuxとの最大の違いは「デバイス周り」と言ってしまえばそれまでなのですが、インフラ構築のSEとして実作業の中で気づいた違いについて、いくつか例を挙げてみます。
ディスク
z/Linuxが使用するディスク形式には大きくFBとCKDの2つの形式があります。
FBはIA Linuxが使用するディスクと使われ方も見え方も同じです。z/Linuxからは、SCSIディスクとして/dev/sdxといった名称で認識されます。
一方で、多くの場合に使用されているのはCKD形式です。CKD形式はz/Linux独自の形式で、System zのH/W機能であるChannel subsystemを使用してI/Oを行うことが出来ます。通常System zにおけるディスク接続は冗長性を考慮し、複数経路を用意します。FB形式では複数経路に対してソフトウェア的にI/Oの最適化を図りますが、CKD形式の場合Channel subsystemが専用H/WとしてI/Oの最適化を担います。単独のI/OのパフォーマンスとしてはFB形式のほうが速いですが、細かいI/Oが重なるようなケースでは最適化のオーバーヘッドが大きくなるため、CKD形式が向いているといわれています。CKD形式はz/Linux独自のドライバが使用され、/dev/dasdxといった名称で認識されます。
ネットワークデバイス
IA Linuxではひとつのポートに対してethxといったように単純にデバイスが割り当てられます。z/Linuxでは、System zがQDIOというプロトコルを用いてポートを使用し、論理的に複数デバイスとして分割します。z/Linuxは分割された論理デバイスのうち3つのデバイスをRead、Write、Dataとして用途を分けて認識し、これらをグルーピングすることによってひとつのネットワークデバイスqeth-xxxxとして認識します。構築時にはこれらを意識してデバイスの追加・削除といった定義変更をしなくてはなりません。
sysfs(/sys配下)
Linuxでは/sys配下にデバイスドライバにアクセスするための構造を提供していますが、System zが提供する独自のデバイスをz/Linuxにおいて使用するために、z/Linux独自のドライバが追加され、sysfsから操作できるようになっています。例えば、同一筐体上の別区画で稼動するOSを含めたリソース使用状況を取得するためのものや、CKD形式のディスク、ネットワークデバイス等を動的に追加・削除するためのドライバ等です。後に述べるz/Linux独自コマンドは実はスクリプトが多く、このsysfsの中身を収集・操作しているものがほとんどです。
ブートローダー
IA LinuxがLiloやGrubといったブートローダーを使用するのに対して、z/Linuxは起動時にSystem z独自のデバイス制御を必要とするため、ziplと呼ばれるブートローダーを使用します。
設定ファイル
上記のような違いを吸収する必要があるため、やはり設定ファイルもオプションが増えたりしています。IA Linuxをご存知の方であれば想像がつくと思いますが、/etc/fstab(ファイルシステム定義)、/etc/sysconfig/network/ifcfg-*(ネットワークデバイス定義)、/etc/zipl.conf(ブートローダー定義)等のファイルがその影響を受ける設定ファイルです。
独自コマンド
やはりデバイス周りのコマンドになりますが、構築時に頻繁に利用したz/Linux独自のコマンドをいくつか紹介します。
zipl | ブートローダー情報書き換え、表示 |
dasdfmt | dasdデバイスフォーマット |
fdasd | dasdデバイス上のパーティション作成 |
lsdasd | dasd情報表示(スクリプト:sysfs情報収集) |
lscss | 接続デバイス情報表示(スクリプト:sysfs情報収集) |
chccwdev | dasdのon/off制御(スクリプト:sysfs操作) |
chchp | チャネルのon/off制御(スクリプト:sysfs操作) |
lschp | チャネル情報表示(スクリプト:sysfs情報収集) |
lsqeth | ネットワークデバイス情報表示(スクリプト:sysfs情報収集) |
まとめ
上述のように、z/LinuxとIA Linuxの違いは
・利用者から見ると変わらない
・しかしながら構築時にはH/Wを意識した違いがある
といった説明が一番わかりやすいと思います。構築時のH/Wを意識した違いは、「高い信頼性/可用性/拡張性」を享受するために必要なものであり、予め分かっていれば臆する事は無い、と言えると考えています。
次回の記事はこちら。