私はbootchart
sを見て、何かがおかしいようです。 ureadahead
プロセスは、本来行うべきことを行います(ほとんどの場合、ディスク使用率は100%です)が、他のアクションもブロックします。
遅いラップトップのハードドライブを持っているので、ureadahead
自体はブート時間の約50秒かかります。それから、目に見えるブートシーケンスの残りは、多くのCPUを使用して完了するまでにさらに100秒かかりますが、最大化せず、多くのIO(ほぼ常に100%)です。
これは私には奇妙に思えます。 ureadahead
の設定が間違っていますか?多くのCPUを使用しているように見えるネットワークを立ち上げるようなタスクをブロックするのはなぜですか?一般に、ブートチャート時間の約50%が必要ですか?
編集:ここにブートチャートの例があります: http://img191.imageshack.us/img191/1049/localhostkarmic20100815.png (または直接の場合はこれ動作しませんでした: http://yfrog.com/f/5blocalhostkarmic20100815p/ )
ブートのブロックは仕様です。ウレアダヘッドのポイントは、ブートに必要なすべてのデータを事前にプリロードすることです。これを行う理由は、ディスクが遅くなる主な理由はシーク時間です-低速のハードドライブでも50 MB /秒以上の読み取りをプッシュアウトできるはずですが、シークする必要がある場合は数十 ミリ秒 シークあたり-劇的に減少します。ウレアダヘッドは、事前に実行することで、シークを最小限に抑えることができるため、ブートに必要なすべてのデータの読み取りに必要な時間を最小限に抑えることができます。
だから、 理想的 bootchartは、I/O使用率が100%であるureadaheadのように見え、その後、他のすべてが起動して(ディスク)I/Oを使用しません。このブートは実際には達成できません。特に、私たちが開始しているサービスの多くがディスクに書き込むためです。しかし、それはアイデアです。
ブートチャートを見ると、ureaheadが実際にディスクからデータを引き出すのに苦労しているようです-非常に低いスループットである多くの時間があります。それでも、その仕事の一部を行っているように見えます-ウレアダヘッドが起動した後、ブートはほとんどI/OバウンドではなくCPUバウンドであり、I/Oバウンドブートの大きなパッチがpreload
起動します。
preload
を削除するか、ブートを再プロファイリングする¹、またはファイルの一部が非常に断片化されている、またはureaheadのバグである可能性があります。
1:/ var/lib/ureadaheadからpack
ファイルを削除すると、次回ブート時にureaheadが再プロファイリングされます。