開発者が説明する ureadahead

Ubuntu 10.04 lucid の beta2 が発表された模様。

lucid には当然ながら色々な新機能が組み込まれてますが、しかしよくよく見てみると、デザイン面の変更とか、Ubuntu One に代表されるような外部のウェブと結びついたサービスなどを除くと、Ubuntu 発といえる新機能ってあまりないような…

例えば脱獄の必要なく iPhone に繋げられるようになったというのも、その開発のメンテを引き継いでる人は Suse ユーザーみたいだし、その人のブログには「言っとくけど、これに関して Canonical は何も貢献してないぞ。」みたいに書かれちゃってるし…

追記:ブログの人は別に Ubuntu を批判してるわけじゃなくて、あたかも Canonical , Ubuntu が開発して実装したかのような印象がネットで広まったことに対して単に事実を説明してるだけですね。そもそも、ものがものだけに、Canonical や他のディストリにしても公式に新機能として謳うことはあり得ないだろうし。

http://blog.sukimashita.com/2010/03/23/native-iphone-ipod-touch-support-arrives-on-the-linux-desktop/

しかし、Upstart とか ureadahead とか、起動周りについては独自の開発で、Ubuntu を特色づける部分の1つなんじゃないかと思うんですよ。

この Upstart とか ureadahead は別に lucid からの新機能ではなくて、以前のバージョンから採用されてるわけですが、lucid では他の面での改良も相まってこれらが益々威力を発揮してるような印象です。

で、今まで自分は Plymouth をちょっと追っかけてましたが、Ubuntu における Plymouth 担当らしき人はどうやらその ureadahead の開発者でもあるらしく、公式フォーラムに ureadahead の簡単な説明を2週間くらい前に投稿してくれていました。

公式フォーラムで ureadahead についてあることないこと文句を言われて、開発者として我慢の限界に達したのが投稿の理由な感じですが。^ ^ ;

起動がすでに激速な Ubuntu ですけれど 、まだ速度向上の余地はあるみたい。


http://ubuntuforums.org/showthread.php?t=1434502#post8998483
ureadahead って何するの?

Ubuntu を起動するには、100MB から 200MB の間ほどのデータをディスクからメモリに読み出す必要がある。残念ながら、全体的に高速なマシンのうち、一番遅い部分がハードディスク。

だから、このデータをまず最初にメモリに置きたい。

ハードディスクは、単にデータの読み取りが遅いばかりでなく、データを見つけ出すのも遅い!

そのため、ハードディスクが必要なデータを見つけ出し、その後メモリに読み出すのを待っているだけのための時間分、起動時間を浪費してしまう可能性がある。

ureadahead が行うのは、ファイルのうちで実際に必要なのはどの部分かを把握し、ディスクからメモリへ全部を一辺に読み出すことだ。

一度に行ってしまうことで、全部を見つけ出すのに時間をかける必要はなくなる。また、メモリにすでに存在するため、起動中の時間を全く浪費しない。

SSD のためだけのもので、回転駆動HDD向けじゃないんでしょ?

いや、まったくその逆。sreadahead (“Super-readahead”「超先読み」) のことを考えてそう言うのだろうけれど、それは Intel が自身の Moblin プロジェクト用に書いた類似ツールで、非常にあからさまに SSD に最適化されている。

自分たちもしばらく試してはみたが、回転駆動HDDでは単純にパフォーマンスが悪かった。

自分は腰を下ろし、大量のお茶を飲みながら、それに代わる ureadahead (“Über-readahead”「チョー先読み」) を書いた。 ureadahead は初っ端から明確に回転駆動ハードドライブに最適化されている。

これは別に SSD ではパフォーマンスが悪いと言っているわけではなくて、少なくとも sreadaheadthat と同程度に SSD でも働く。

でも起動時間のうちの数秒を ureadahead が食ってしまう!

その通り。全部のデータを一辺に読み出している。もし readahead がない場合、それ以外のすべてにその数秒が分散して、恐らく時間が2倍ないしは3倍長くかかる!

Bootchart を見てみると ureadahead はフルのスループットを得てない

ureadahead は全部を一度に読み出し、ディスク上の実際の順番に従って全部を読み出すための最適化が相当程度されてもいる。しかし、必要ないデータビットをスキップして飛び越す必要が依然としてある。

この「シーク時間」は、まず最初にデータを見つけ出すのと同じような、パフォーマンス上のペナルティだ。

これを避けるには、ディスクをデフラグするしかない。

でもLinuxファイルシステムにデフラグは不要だよ!

それを伝えたのは誰であろうが深い誤解で、最も広まっているLinux神話の1つだ。

Linuxファイルシステムは、iノードテーブルのフラグメントを極力避ける、というのが真実。

つまり、ファイルがディスクにどの様に散らばって(フラグメントして)いて、その各パーツはどこに存在するか、というインデックスを出来るだけひとまとまりにする、ということ。

iノードテーブルのフラグメント発生は、他のファイルシステム(FAT 等)にとって大きな問題なので、これは良いことだ。

iノードテーブルをフラグメントさせないようにすることで、パフォーマンス面でのかなりのメリットになる。

しかし、データ自体は依然としてフラグメントして、ランダムな順番でディスク全体に渡り散らばってしまう。

そして残念なことに、起動中において必要となるのが、その散らばったデータ。

将来的にしたいと思っていることの1つは、起動にどれが必要かの ureadahead による分析情報を、デフラグ・プログラムに流すこと。

そうすれば、必要な全ては、ディスク上で1つの大きな固まりになる。

ureadahead が再プロファイルするのはいつ?

/etc/init または /etc/init.d に存在するファイルを含んだパッケージが、1つでもインストールされたりアップグレードされたりする度に。

これは少々乱暴で、恐らく、我々が望むよりも若干多く再プロファイルしている。

再プロファイルを強制的に行うには、/var/lib/ureadahead に存在する “pack” ファイルを削除して再起動するだけでいい。

将来のバージョンでは、読み出しても全然使用されなかったものや前回読み出されなかった新しいものを判別することで、毎回の起動の度に pack ファイルの質が向上する方向に行きたいと考えている。

ureadahead がプロファイルを止めるのはいつ?

ureadahead は、ユーザーが自動ログインを使用していることを多少前提にしている。だから、ディスプレイ・マネージャがスタートしてから、プロファイルを停止する前に 45 秒ほど待つ。

パスワードを入力してログインするようにしている場合、デスクトップ・ファイルを pack に含めたいのなら、素早くタイプしよう。

(これについても、将来のバージョンで対処する予定。)

ureadahead が起動を遅くしている!

そうあってはならないので、話をよく聞かせてほしい!

時間短縮の具体例を挙げると、自分の信頼するラップトップは、ureadeahead 無しだと 1 分 30 秒くらいで起動し、有りの場合はたったの 30 秒で起動する。

まず、bootchart パッケージをインストールしてほしい。そして ureadahead の pack ファイルを削除し、/etc/init/ureadahead.conf ファイルを ureadahead.disable などに名前変更の後、再起動、ログイン等々して、bootchart が現れるのを待つ(停止/待機 まで bootchart のステータスを監視)。

そうしたら、ureadahead conf ファイルを元に戻して、再び再起動とログインを行い、bootchart が現れるのを待つ。

そして最後、もう一度再起動してログインし、bootchart が現れるのを待つ。

これで、3つの bootchart があることになる。1つは ureadahead 無し、もう1つは ureadahead がプロファイルを行っているとき、最後の1つは ureadahead が通常の働きをしているときのもの。

ureadahead に関するバグ報告を投稿して、これら3つのファイルとともに、”sudo ureadahead –dump” の出力結果(かなり長くなるのでファイルに出力して)を添付する。

そうしてくれれば、自分はそれを見て、我々がそのバグを直せるかどうかを見極める!

ureadahead が status 4 で終了する!

それは実際のところ、バグじゃない

Status 4(通常このステータスで ureadahead-other は終了する)は、起動中に必要なファイルが1つも存在しないマウントポイントが fstab に記述されていることを意味している。

たぶん、MP3やら動画のファイルばかりがそのドライブにあるんだろう。

そのステータスは、自分が別の事に関してのデバグを行うために存在しているだけであって、たとえそのメッセージが出ても、起動中に必要な全ては読み出される。

ここで本当にバグといえるのは、そのメッセージを Upstart がコンソールにスパムすることだ。

ureadahead-other.conf ファイルには “normal exit 4” と記述してあるにもかかわらず!

(言い換えれば、起動に失敗した場合、その失敗とこのメッセージとは無関係ということだ!この場合、Xサーバのスタートに問題があるか、init スクリプトの実行に問題がある可能性の方が高い。Alt+F2 を押した後、ログイン画面が見られるかどうかが、その判別の大きな手がかりになるかもしれない。)

広告

9件のコメント »

  1. プヨヨネットワークの管理者、オワタです^^ said

    あの、起動自体は、2秒ほど早くなるのですが、
    簡単に言えば、メモリが少ないパソコンで発生します。
    [—————————————-]
    ↑空っぽ。
    [oooooooooooooooooooooo—————]
    ↑ureadaheadなしの起動後の消費量
    [oooooooooooooooooooooooooooooooooo-]
    ↑ureadaheadありの起動後の消費量
    って感じで、起動後の動作を非常に重くするのです。
    時計を使って調べてみると、
    ureadaheadなし:synapticに15秒ほど、
    ureadaheadあり:synapticに40秒ほど、起動後も遅い。
    (ただし、推奨環境でない、めもりが200程度の場合の時だけのようです。)

  2. プヨヨネットワークの管理者、オワタです^^ said

    あっ。
    メモリを終了後も解放してくれないのが原因のようです。

  3. kawaji said

    Kernel trace buffer should be cleared and size restored after profiling (lp 501715)
    このバグ報告が関係してるでしょうか。
    報告が Fixed 扱いにならないうちは、むしろ ureadahead をアンインストした方がよい環境があるのかもしれませんね。
    #18 のコメントの後半には、一応の回避策みたいなものが挙げられてるようなんですが。

  4. プヨヨネットワークの管理者、オワタです^^ said

    http://art29.photozou.jp/pub/534/429534/photo/37887907.v1273317471.png?size=450
    http://art23.photozou.jp/pub/534/429534/photo/37887893.v1273317471.png?size=450
    あらためて。
    かなり違いませんか?

  5. kawaji said

    それだと確かに ureadahead をアンインストールしたくなりますね。

    「最初 ureadahead が原因かと思ったが、アンチウイルス・プログラムの AVG を削除したら直った。」という書き込みを見かけたことはあるんですが。

  6. プヨヨネットワークの管理者、オワタです^^ said

    AVG使ってません。
    klamavです。
    nautilusが重くなるので、
    右クリックメニューの項目は消しています・・・
    (まあ、インストールする前から重いのですが。)

  7. […] 開発者が説明する ureadahead « Kawaji's Weblog ureadahead が起動を遅くしている! […]

  8. 48. fantastic put up, very informative. I ponder why the opposite specialists of this sector do not realize this. You should continue your writing. I’m confident, you’ve a great readers’ base already!

  9. […] 開発者が説明する ureadahead « Kawaji’s Weblog […]

RSS feed for comments on this post · TrackBack URI

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。