最終回 メインフレームLinuxの今後
日本アイ・ビー・エム株式会社
システムズ&テクノロジー・エバンジェリスト
北沢 強
2009/2/16
最近のメインフレームLinuxの機能強化(続き)
■ゲストOSとホストOSのメモリ連携
z/VMのような仮想OSも、実際のOS同様、仮想メモリが実装されておりページング処理を行います。その上でゲストOSとして稼働するLinuxにも仮想メモリが実装されており、ページング処理を行っています。このような仮想化環境で起こる問題に「ダブルページング」があり、以下のような症状が挙げられます。
- Linuxはアクセスされないメモリだと思ってページアウトしているが、z/VMはそのことを知らないので実メモリに常駐している(メモリ効率の悪化)
- Linuxにとって、アクセス頻度は低いが重要なデータがあるメモリページなので常駐しておきたい部分が、z/VMはその重要性を知らず、アクセスされないメモリだと思ってページアウトしてしまう(システムの不安定要因)
ホストOSであるz/VMからは、ゲストOSであるLinuxの中のメモリ管理がどういう状況なのか見えていないため、お互いに勝手にメモリ管理を行います。こうした現象は、その結果引き起こされるものです。
Linuxカーネルにとっては重要なメモリページなのに、アクセス頻度が低いからといってz/VMがページアウトしてしまうと、ページ不在によってページインするまで数ミリ秒(ディスク速度)の遅延が生じ、それがLinuxカーネルを不安定にさせる要因になりかねません。
このダブルページング問題は、メインフレームでは「ページハンドシェイク(Page hand shaking)」という手法を使って1970年代に解決しています。ホストOSとゲストOSの間で「握手」して、互いの無駄を省くように連携しようというものです。
実装としては、z/VM側とLinux側の両方で対応機能が必要になります。さらに処理を効率化するには、ハードウェア命令で実装することが有効です。
ここで、ページハンドシェイクに関連して、メインフレームLinuxに実装された機能を紹介しておきましょう。
・疑似ページ不在(pseudo page fault)の処理
Linuxメモリでページ不在(page fault)が起きたとき、z/VMは該当するページを実メモリに読み込むまでLinux全体をウェイト状態にしてしまいます。しかしながら、ページ不在を起こしたプロセス以外は動き続けられるべきなので、ハンドシェイクによって、Linux全体を停止させずに特定プロセスだけウェイト状態にし、この問題を解決します。
・ページ固定(page fix)の処理
Linuxの中でページアウトしたくないメモリに対してページを固定(page fix)しますが、それをz/VMにも知らせることで、z/VMとしても当該空間をページアウトしないようにページ固定します。
・CMM(Collaborative Memory Management)
z/VMとLinuxの間でページ属性情報を交換して、ゲストとホストの全体でのメモリ最適化を行う仕組みがCMMです(図2)。例えば、Linux上のあるプロセスが終了してメモリが開放されたらz/VM側でも該当ページを開放し、優先的に再利用できるようにすることでメモリ効率を高めます。また、Linuxのファイルキャッシュのように開放可能なメモリについてもz/VM側で認識し、z/VMではその領域のページアウトを省略することでページングI/Oを減らすことができます。
CMMは、処理ロジックは単純ですが、メモリ管理の処理であるため頻繁に実行されます。アセンブラで記述しても負荷が無視できないため、SIE命令と同様にハードウェアで実装することで高速化されています。System z10ではCMMA(Collaborative Memory Management Assist)というハードウェア命令により実装されています。
図2 CMMの仕組み(クリックすると拡大します) |
■CPU時間の計算(CPU time accounting)
Linuxでは、カーネル内でカウントしている100Hz(10ミリ秒)のタイマー刻時(Timer Ticks)を用いて、さまざまな計数や計算を行っています。分かりやすい例としては、CPU使用率の計算が挙げられます。
ところが、複数のLinuxでプロセッサを共有している仮想化環境では、CPU時間が別のLinuxやハイパーバイザに奪われたりします。そのためタイマー刻時が不正確になってしまい、CPU使用率などの計算値が不正確になることが問題になっていました。
そこでメインフレームLinuxでは、カーネル 2.6.16から、ハードウェアが持っているTODクロック(Time-of-date)を用いて時刻補正を行うように実装を変更しました。TODクロックは1マイクロ秒の精度があり、メインフレーム筐体(きょうたい)内で唯一の時間として使用できます。
この実装により、仮想化共有環境においてもCPU使用率などの計算値が正確になるとともに、steal(別のOSシステムにCPU時間が盗まれている割合)も表示できるようになりました。これにはカーネルのみならず、vmstatやtop、それからsysstatに含まれるsar、iostat、mpstatなどのコマンドでも対応が必要でした(リスト2)。
|
|
リスト2 vmstatの出力例 |
■共有メモリのサポート
z/VMにはDCSS(Discontinuous Saved Segment)という共有メモリ機能があります(図3)。固定アドレスを持ったメモリ領域ですので、z/VM上の複数のLinuxの間でメモリ共有をすることができます。
図3 DCSSの仕組み |
そこをファイルシステムとして利用すれば、高速な共有RAMディスクとして使用できます。またそこにカーネルを置けば、ディスクにI/Oせずに高速にブートできるうえに、カーネル1つ分のメモリ使用量で、100個でも1000個でもLinuxをブートできますから、メモリ効率の改善にも使えます。
カーネルの実体は1つなので、保守の観点からいっても容易になるかもしれません。DCSSセグメントは複数定義できますが、NSS(Named Shared Segment)としてセグメントに名前を付ければ、アドレスを指定しなくても名前で管理することもできます(図4)。
図4 NSSの仕組み |
また、DCSSをRAMディスクとして使用する場合は、XIP(eXecute-in-place)を併用することで、ページキャッシュを使用せずにmmap()によって直接実行できるようになります。XIPには、ファイルのロード時間とページキャッシュ使用率の削減効果がありますから、/usr下のファイルをすべてDCSSに置いて数十〜数百個のLinuxで共有すれば、メモリ効率は格段に高まり、ディスクI/Oも大幅削減ができるかもしれません。
固定アドレスを持ったLinux間のメモリ共有という技術はまだ未開拓の領域でもあり、今後の発展に期待するところが大きいと考えられます。
以上、メインフレームLinuxに最近追加された機能について、いくつか紹介しました。これらは仮想化サーバ統合環境におけるさまざまな課題を解決するものです。このほかに、メインフレームで重視される運用管理面での機能追加も多く、FCP(Fiber-channel Protocol)における統計情報の取得やz/VMモニタ情報の処理など、監視や問題判別に必要な機能が追加されています。
Linuxそのものとの互換性を保持しながらも、「メインフレーム品質」を目指してハードウェア部分で独自実装を行い、RAS向上やスケーラビリティ・効率性改善に向けた努力を続けています。
2/3 |
|
||||||
|
- 【 pidof 】コマンド――コマンド名からプロセスIDを探す (2017/7/27)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、コマンド名からプロセスIDを探す「pidof」コマンドです。 - Linuxの「ジョブコントロール」をマスターしよう (2017/7/21)
今回は、コマンドライン環境でのジョブコントロールを試してみましょう。X環境を持たないサーバ管理やリモート接続時に役立つ操作です - 【 pidstat 】コマンド――プロセスのリソース使用量を表示する (2017/7/21)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、プロセスごとのCPUの使用率やI/Oデバイスの使用状況を表示する「pidstat」コマンドです。 - 【 iostat 】コマンド――I/Oデバイスの使用状況を表示する (2017/7/20)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、I/Oデバイスの使用状況を表示する「iostat」コマンドです。
|
|