第4回 メインフレームLinuxの実装(後編)

日本アイ・ビー・エム株式会社
システムズ&テクノロジー・エバンジェリスト
北沢 強
2008/10/23

アイコン アーキテクチャ特有の実装の検討

 Linuxカーネル機能の中で、アーキテクチャ特有の実装として検討したのは、以下の項目です。

  • Linuxの起動処理(ブート)
  • メモリ管理
  • システムコール・インターフェイス
  • デバイスドライバ
  • SMP(Symmetric Multi Processing)
  • SIGNALの処理

 これらの中でも特徴的な実装として、メモリ管理とデバイスドライバについて紹介します。

■メモリ管理―64ビット・アドレッシングの実装

 メインフレームは完全な64ビットアドレッシングを実装していますが、実際に装備されるメモリはほとんどの場合で1Tbyte以下です。Linuxとして64ビットアドレッシングを完全実装してしまうと、ページテーブルや制御ブロックなどの管理用メモリを大量消費してしまい、メモリ効率がよくないうえに、DAT(Dynamic Address Translation)による変換も段数が多く、効率が悪くなります。

 そこで、現状に見合ったサイズで効率よく動かすため、メインフレームLinuxでは42ビットアドレッシング(4Tbytesまで)を採用しています(カーネルソース内のパラメータを変更してリビルドすれば、もっと大きなビット数に変更することも可能)。

 64bit-DATの場合(図1)に比べて、42bit-DAT図2)では、Region-1とRegion-2を0として変換ステップを省略でき、5レベル変換を3レベル変換に減らすことで高速化にも寄与しています。アドレス変換モードにおいては、制御レジスタとアクセスレジスタを活用しています。特にアクセスレジスタは、コンテキストスイッチの高速化に寄与しています。

図1
図1 動的アドレス変換 64bit DAT(クリックすると拡大します)

図2
図2 動的アドレス変換 42bit DAT(クリックすると拡大します)

■メモリ管理 - コンテキストスイッチの高速化

 LinuxはマルチタスクOSであり、複数のプロセスが仮想メモリによる複数のアドレス空間で同時並行的に実行されます(図3)。しかし、ハードウェアに搭載されるCPUは1〜数十個であり、同時に動くプロセス数よりも少ないので、時分割処理によって1つのCPUで複数のプロセスを実行します。

図3
図3 アドレス空間のレイアウト

 このときのプロセスを切り替える処理がコンテキストスイッチであり、Linuxカーネルの重要な仕事の1つです。

 コンテキストスイッチを行うときには、プロセスのコンテキストを退避させたり戻したりするため、仮想アドレス空間の間でのデータのコピーが発生します。このメモリ間のコピー量が大きくなるほど、カーネルのオーバーヘッドとして目立つようになり、高負荷になってシステムが急にスローダウンしてしまうような原因の1つとなります。

 メインフレームLinuxでは、それを高速化するためにアクセスレジスタを使いました。アクセスレジスタは、仮想アドレス空間をまたいだ処理ができる特別なレジスタで、ベースレジスタとして使用できます。

 図4に示したとおり、通常のプライマリ空間やセカンダリ空間(ホーム空間)においては、そのアドレス空間の中でのコピーは簡単な命令で自由にできますが、アドレス空間をまたいでのコピーは簡単なハードウェア命令だけではできません。そこで、アクセスレジスタを使って、2つのアドレス空間それぞれをポイントしてコピーします。

図4
図4 アクセスレジスタによるアドレス空間をまたいだコピー

 コンテキストスイッチにおけるコンテキストのコピーは、たった数ステップのハードウェア命令で実行できるため、非常に高速です。結果として、高負荷下で多重度が高い状況でも、コンテキストスイッチによるオーバーヘッドがほとんどなく安定稼働を続けられるのです。一般的にメインフレームはCPU使用率が高い状態であっても安定しているといわれますが、これも理由の1つだといえるでしょう。

前のページ
2/3

Index
あなたの知らないメインフレームLinuxの世界
 第4回 メインフレームLinuxの実装(後編)
  Page 1
メインフレームLinuxの仕様を知る
レジスタの使い方
メインフレームになかった命令
  Page 2
アーキテクチャ特有の実装の検討
  Page 3
デバイスドライバの実装
メインフレームLinuxが目指すところ


Linux & OSS フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Linux & OSS 記事ランキング

本日 月間