OSカーネル技術

インターネット、イントラネットの急激な普及によりネットワークノードにおかれたファイルサーバでは飛躍的な負荷増大に対応してNAS(Network Attached Storage)やSAN(Storage Area Network)が急速に普及しています。
このネットワーク技術および基礎となるファイルシステムをSolaris,Windows,LinuxなどのOS種を問わずに開発実装する実績を上げています。これは当社の長年培ったOSカーネル技術によるものです。技術者の層の厚さと経験の豊かさは出色です。

開発者コメント

各種OS

カーネル移植

最初にUNIXを移植したのは1983年です。
昔は新しいチップが出ると、それを載せたコンピュータを製造し、UNIXのポーティングをしました。
ブートコード、仮想メモリ管理コードを書き替え、搭載デバイスのドライバを書き、コンパイラを書いて、デバッガも書きました。
68000, 20, 30, i386, 88k...。旧いなぁ。。

tron

1986年ころからCTRONのインタフェース検討を行っては、CTRONにUNIX環境を作ったり、ネットワークプロトコルスタックを作ったりもしました。
68030にITRONを載せて、UNIX APIを作って、Xターミナルにしてみたりもしました。マイクロカーネルがもてはやされている頃でした。

linux

linuxを最初に動かしたのはアルファでした。
PALコードを一所懸命読んだものです。
カーネルコードはとても簡素で呆気ないほどでした。
こんなに複雑で膨大なものになるとは。別物です。

ジョブマイグレーション

クラスタ上のジョブ(プロセス群)をダイナミックに移動させるシステムをカーネルモードで開発しました。
クラスタ上のジョブのチェックポイントをとり、適当なチェックポイントから再開させるカーネルモードジョブ凍結システムを開発しました。アプリケーションモードのチェックポイントシステムも開発しました。

実体の移動、再開は実は難しくなく、難しいのは再開時の環境との折り合いでした。プロセスIDとか、ポート番号とかが既に使われている、IPアドレスが変わっているなどがややこしい。

存在は関係である、と認識させられました。唯我独尊孤立宇宙であれば名前は不要です。

ファイルシステム

Solaris上のステートフル分散ファイルシステムを開発しました。
windows上の分散複製ファイルシステムを開発しました。
linux上の分散世代管理ファイルシステムを開発しました。

まだOpenSolarisもwindowsのソース公開もない頃で仮想メモリ、キャッシュ管理との関係が手探りで大変でした。
linuxやbsdのカーネルコードは暗記する程読みました。

洩れも矛盾もないプロトコルを作成検証するのは難しい作業です。
spinでもチェックしましたが、モデル化できたのは一部だけでした。
一番楽しいところだから人間がやります。
データエクステントやディレクトリの管理方式に工夫がありました。
スペースと時間の効率、作成と参照のスピード、トレードオフばかりで人間くさい議論が飛び交います。
fsck も書きます。
矛盾した状態から何を修復すべきかが問題です。
fsckでマニュアル個別修復ができるようになってしまいました。

クラスタ向け分散ファイルシステムの高速化

サーバ1台とクライアント16台程度を想定している。サーバはメタデータの管理とデータブロックの調停をする。
POSIXセマンティックスを守ろうとしたためにパフォーマンスが上がらず。
CPU・ネットワーク・ディスクの性能バランスは時代とともに変わってゆくのでいつになっても完成することのない分野だとおもう。

fsck

クラスタ向け分散ファイルシステムのfsckの高速化。fsckとは整合性がなくなったファイルシステムを修復するプログラムのこと。
fuckと一時違いなのはunix文化でしょう。
ディレクトリが木構造であるかどうかなどのチェック。ジャーナルファイルシステムでもメタデータは(バグとか物理的理由とかで)壊れることがあるため必要。
fsckは整合性をチェックするためにメタデータを主記憶上に集めてくる。
このため大きなファイルシステムだとout of memoryでfsckが実行できなくなるので、専用のパーティションを用意して実行できるように改造する仕事をした。

lockfs

Solaris lockfsのクラスタ・ファイルシステム版。
ファイルシステムを一時的にread onlyにしてバックアップをとったりするのに使う。
カーネル内のロックがいろいろ絡んでくるのでデッドロック回避が大変でSPINをつかってプロトコルの検証をした。