ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
Main Menu
Tweet
Facebook
Line
:-?
フラット表示 前のトピック | 次のトピック
投稿者 スレッド
webadm
投稿日時: 2008-3-18 6:41
Webmaster
登録日: 2004-11-7
居住地:
投稿: 3080
思わぬ伏兵が潜んでいた
Linuxの仕事、思わぬ伏兵が最後に待ちかまえていた。

Linusがcomp.os.minixでLinuxの公開をアナウンスした時に居合わせた世代だけど、その頃は皆競ってフロッピー一枚に入ったLinuxのイメージをあちこちのPC AT互換機のフロッピードライブに入れて試しだしたのがLinuxブームの始まりである。

当時試したDELLのマシンはフロッピー制御のタイミングが早すぎてブートしなかったのを憶えている。いろいろとハードウェアの相性というかタイミングは千差万別だというのがわかった。

LinuxはPOSIXという当時IEEEとかが制定したUNIXのAPIや基本コマンド群の仕様を外部仕様として採用した。これは今も変わっていない設計思想である。しかし外側はそれで変わらないが中身は今もどろどろとサナギの様に変貌し続けて定まらない状態である。

Linux 0.99とか限りなく1.0に近づいていた頃はとても単純だったけど、PC AT互換機よりも手の込んだアーキテクチャをサポートしはじめた頃からどんどん巨大化複雑化して来た。

PC AT系のアーキテクチャはメモリが中央に固まりとしてどんとあって、バス上のデバイスやCPUがそれを共有するという、いわゆるUniform Memoryアーキテクチャであるのに対して、CPUを複数搭載した対称型マルチプロセッサシステムでは、それぞれのCPUの処理負荷が高くなるとメモリーアクセスの負荷がUniform Memoryアーキテクチャで一点に集中してCPUが互いのメモリアクセスを邪魔し合うということになり性能が出ないということが明らかになった。

そこで登場したのが、CPU毎にメモリを分離して、メモリを分断するというNon Uniform Memoryアーキテクチャ(NUMA)が登場。

でもNUMAの場合は周辺バスがCPUやメモリから遠ざかることになるので周辺デバイスがメモリやCPUとお話する場合に遠くて時間がかかるというペナルティがある。

それでも計算を早くするにはCPUに最も近いところにメモリを置くのが正解。それぞれのCPUは最寄りのメモリをアクセスする頻度が高くなればなるほど他のCPUを邪魔することなく理論的にCPUの個数に比例して処理能力も上がる。

そうしたちょっと逆説的なアーキテクチャも同じソースコードでサポートしなければならないので百年戦争のようなアイデアの戦いが今も続いている。ある人がある案をだせば別の人ももっと良い案を出して、新しい案が消えてはまた別の現れるという感じ。

久々にカーネルメーリングリストを覗いたらつい最近も今回悩まされた技術的な問題をどうゆう方向にもっていくか議論されていたようだ。

まあ、特定のアーキテクチャに関してはそれを使える人とメンテナンスやパッチを提供する人は自ずと限られるのでいずれは定まっていくのだろうけど、仕事となるとそれを待ってはいられない。

ここはオープンソースの良いところ、面倒だけどそれなりに労力を費やせば自分の好きなように修正して問題解決が出来る。

これがクローズドな商用OSだったら地獄だ。手も足も出ないだろう。

昔DECのVAX/VMSのパッチを考案しては米国DECに提案していたけど、「あ、その機能外すことにしたから」とか米国人らしい技術的な決定に唖然とすることも。日本人はなんとか機能は残してより良いものにと思うのだが、米国人は割り切りが早いので問題のある機能は削ってしまうのが一番というカルチャーの違いがあったり。

初期のVAX/VMSはそれ以前のミニコンピューターの主要な需要家だった組み込みシステムやリアルタイムシステム向けに設計されていた。売り文句もリアルタイム向きですからというもの。でも当時仮想記憶をサポートして汎用機並に大きなアドレス空間を消費する大型アプリケーション(CAD、シミュレーター、画像処理)の要望が強くなり、次第に今で言うコンピューティングサーバーみたいな方向に進路を変えていった向きがある。決定的だったのは、V2まではスワップスペースがシステムの最大ワーキングセットサイズ*最大プロセス数だったのが、プロセスの最大ワーキングセットサイズが可変になったのでスワップスペースのアロケーションも可変長に変わったことだった。これは何を意味するかというと、以前は最大ワーキングセットサイズ(1プロセスが使用できる最大仮想アドレスページ数)分のスワップスロットが最大利用可能なプロセス数分配列で用意すればよかったのが、可変になると全体でいくら用意してもフラグメンテーション(虫食い)状態になると全体のスワップスペース分の割に同時期に走行可能なプロセス数が制限されることになる。言い換えればV2まではどのプロセスも1stクラスで各自用に十分な個室が予約されていたのが、全員自由席、席取りは早い者勝ちということになってしまったのである。V3からそういうことになったのでいろいろ支障が出てきた。

組み込みシステムでは基本的にディスクへのワーキングセットの吐き出しは発生しないようにメモリは十分積んでいる。V2の頃は配列分ディスクスペースを用意していれば書き出されることはなくともプロセスがワーキングセットを最大値までのびのび成長させることは出来た。しかしアロケーションが可変長になると、動きはじめはワーキングセットが少ないけど、処理を重ねるたびにワーキングセットが成長し、それまでアロケートしていたスワップスペースがそれに合わせて拡張できない状況が発生し得る(前後に隣接して他のプロセスのスワップ領域がアロケートされて挟まれている場合)。

そうするとまだまだ伸び盛りなのに他にもっと大きなスワップ領域が空いていないとワーキングセット(アドレススペース)を拡大できないという問題が発生する。アドレススペースが拡張できないとページフォルトで処理が止まったままになってしまう、これはリアルタイムシステムではあってはならない事態。

実際にそういう事例や状況がいろいろなシステムで発生することが知られていたので、上司に命じられて対策を考えることにした。当時上司が考案したVAX/VMSにシステムの再起動の必要の無いランタイムにカーネルにパッチを施すことができる画期的な方法を考案したので私にその具現化の機会が与えられた、その方法をつかってスワップスペースが虫食い状態なったのを自動的に検出して、今でいうファイルシステムのデフラグメント処理みたいに、並べ替えをするコードをVAX/VMSカーネルに、今で言えばレトロウイルスを使った遺伝子操作と同じ方法だ。パッチは恒久的に施すのではなくメモリ上にのみ施す。システム起動後の任意のタイミングでパッチをあてるプログラムを自動起動するようにしておくだけ。

効果はてきめんでスワップスペースのフラグメント化ですくんだプロセスが出るとアロケーション状態を整理しなおして、大きな空きスペースを作り、成長したプロセスがそこにもっと大きなスワップスペースをアロケートして引っ越せるようにした。

まあ今のようにメモリが有り余る時代ではなく数MBも貴重だった時代なので、そういうことも有用だった。今ならディスク増やせばいいじゃんとかいう話になってしまう。当時は60MBでも大きい方だった。

なんの話だっけ。

ああ、Linuxの話ね。

これも仮想記憶に関係する根深い問題なのだけれども、カーネル中のデバイスドライバがアロケートしたメモリ空間をユーザーからもアクセスできるようにダブルマップするというのがVAX/VMSの時代から当然のごとくある。しかしLinux 2.6になってそれが大変やりにくくなってしまったらしい。というのもそれに絡んだ処理でDoS攻撃の標的になる脆弱性が見つかったらしいのもある。

でもページングとか仮想記憶の原理を知っていれば、ああなんだという方法なのだが、2.6カーネルでも出来るらしいし、数少ないけどそういうことをやっている既存のドライバもあるらしい。

それと同じことをやれば問題は解決。目出度し目出度し。まだ終わっていないけど。

朝だ徹夜だ!

そういう名前の作家が昔居た記憶が。「麻雀放浪記」昔読んだっけ。

もう夜だし、まだ一睡もしていない。
フラット表示 前のトピック | 次のトピック

題名 投稿者 日時
   このごろの傾向 webadm 2006-12-22 3:20
     高周波はお金がかかる webadm 2007-2-4 21:41
       貧乏人のネットワークアナライザ webadm 2007-2-5 21:39
         HPのゲイン・フェーズアナライザを落札 webadm 2007-2-8 4:09
           FIXTUREをつくらないと webadm 2007-2-8 10:28
             HP87510Aが無事届いた webadm 2007-2-8 23:10
               トラッキングジェネレーター付きのスペクトルアナライザー webadm 2007-2-10 2:43
                 ブロッキングキャパシタ webadm 2007-2-10 3:58
                   スペアナアダプタを落札 webadm 2007-2-11 1:07
                     スペアナアダプタが届いた webadm 2007-2-16 5:37
                       その他のアイデア webadm 2007-2-17 1:14
                         謎のスペクトル webadm 2007-2-17 1:50
                           周波数の測定方法があった webadm 2007-2-18 7:44
                             出力は出てないようだ webadm 2007-2-21 18:06
                               出ることはでるみたいだ webadm 2007-2-21 18:45
                                 改良できないだろうか webadm 2007-2-22 8:59
                                   スパンを狭くするとベースが競り上がる原因 webadm 2007-3-5 10:27
                           新たな謎が webadm 2007-2-24 13:23
                             わかったこと webadm 2007-2-25 6:53
                               内蔵マーカー webadm 2007-2-26 0:22
                                 インパルス信号のスペクトル webadm 2007-2-26 3:39
                                   フィルタリング webadm 2007-2-26 6:06
                                   スペアナアダプタを使って気づいた点 webadm 2007-2-26 7:09
                                     スペアナアダプタの回路で気づいた点 webadm 2007-2-26 10:16
                                       200から250MHzの間にあるスペクトル webadm 2007-2-28 21:56
                                         Re: 200から250MHzの間にあるスペクトル webadm 2007-2-28 22:17
                                           Re: 200から250MHzの間にあるスペクトル webadm 2007-3-5 11:45
                                           285MHz近辺 webadm 2007-3-19 0:07
                                             スーパーハイバンド webadm 2007-3-19 0:31
                                     TR5822とHP8116A webadm 2007-3-1 6:45
                 ローパスフィルタだった webadm 2007-2-11 23:02
               N型コネクタアダプタが届いた webadm 2007-2-24 6:41
                 少し長いケーブルの通過特性 webadm 2007-2-25 5:58
               SUICAのF特性 webadm 2007-3-2 0:48
                 SUICAへのコマンド送信 webadm 2007-3-5 6:31
                   規格になっているらしい webadm 2007-3-8 6:26
                     PaSoRiを購入 webadm 2007-3-8 9:43
                       コマンド・レスポンスフォーマット webadm 2007-3-8 13:24
                         検波してみたが webadm 2007-3-15 19:55
                           13.56MHz webadm 2007-3-18 19:49
                       一部のPaSoRiリコール webadm 2007-8-7 9:34
                 いろいろな特性 webadm 2007-3-13 6:26
                   プロッタ出力 webadm 2007-3-13 17:08
                     HP-GLの仕様 webadm 2007-3-13 17:46
                       Win32-based emulator for the HP 7470A plotter webadm 2007-3-13 18:32
                         Re: Win32-based emulator for the HP 7470A plotter webadm 2007-3-13 18:41
                           シリアルからのプロット出力表示 webadm 2007-3-13 19:32
                           NIのPCI-GPIBでプロットできた webadm 2007-3-20 3:34
                     特性を比較してみた webadm 2007-3-19 10:06
                       自作1000Base-Tモジュールと純正の特性比較 webadm 2007-3-20 4:06
                         千石で買ったHCタイプの10MHz水晶発振子 webadm 2007-3-22 2:17
                         方向性結合器を注文 webadm 2007-3-26 4:10
                           輸出規制対象品だった webadm 2007-3-27 9:46
                             我が国の輸出規制 webadm 2007-3-27 23:18
                             FAXで証書を送付 webadm 2007-3-28 13:53
                               発送通知が届いた webadm 2007-3-29 3:32
                                 方向性結合器が届いた webadm 2007-3-30 19:05
                                   方向性結合器の内部 webadm 2007-3-31 22:56
                           秋月のアッテネーター webadm 2007-3-30 13:22
                       Ethernetモジュール引き合い webadm 2007-4-13 3:09
                         VME64Xコネクタの入手先 webadm 2007-4-29 14:28
                         Ethernetモジュール納品 webadm 2007-5-1 11:27
               セラミックコンデンサの特性 webadm 2007-3-23 10:19
     実物を調べたら webadm 2007-2-19 9:26
       アプリケーションノートには無い回路 webadm 2007-2-20 9:58
         EMIフィルター webadm 2007-3-17 19:35
     今日の出張先 webadm 2007-2-21 6:06
     Digi-Keyへ発注 webadm 2007-3-7 6:51
       成田へ入管したらしい webadm 2007-3-9 10:42
         住所間違えてた(>.<) webadm 2007-3-10 1:23
           やっと届いた webadm 2007-3-10 21:55
             試作完了 webadm 2007-3-12 1:58
               結果オーライ webadm 2007-3-12 6:31
                 その他いろいろ webadm 2007-3-13 6:18
         LPFのF特性実験 webadm 2007-3-10 11:45
           チップコンが間違ってたぽい webadm 2007-3-10 12:17
     本業回帰の季節 webadm 2007-9-10 22:44
       ステップ数を数える webadm 2007-11-23 12:14
       RFへのあこがれ webadm 2008-2-19 9:39
         Linuxの時刻設定 webadm 2008-3-13 11:02
           Re: Linuxの時刻設定 webadm 2008-3-14 11:11
           » 思わぬ伏兵が潜んでいた webadm 2008-3-18 6:41
               伏兵を退治完了 webadm 2008-3-19 10:33
                 またまたLinuxのお仕事 webadm 2009-2-19 9:58
                   期末のアルバイト webadm 2010-2-21 6:17
                     中国製タッチスクリーンパネルのLinuxドライバ webadm 2010-2-22 4:02
                       期末恒例尻ぬぐいアルバイト webadm 2010-2-24 3:22
                         他人の書いたソースコードを読む webadm 2010-2-27 1:33
     今時の特注開発 webadm 2011-1-25 8:51

投稿するにはまず登録を
 
ページ変換(Google Translation)
サイト内検索