web-dev-qa-db-ja.com

ウレアダヘッドは起動時にシステムをブロックするようです

私はbootchartsを見て、何かがおかしいようです。 ureadaheadプロセスは、本来行うべきことを行います(ほとんどの場合、ディスク使用率は100%です)が、他のアクションもブロックします。

遅いラップトップのハードドライブを持っているので、ureadahead自体はブート時間の約50秒かかります。それから、目に見えるブートシーケンスの残りは、多くのCPUを使用して完了するまでにさらに100秒かかりますが、最大化せず、多くのIO(ほぼ常に100%)です。

これは私には奇妙に思えます。 ureadaheadの設定が間違っていますか?多くのCPUを使用しているように見えるネットワークを立ち上げるようなタスクをブロックするのはなぜですか?一般に、ブートチャート時間の約50%が必要ですか?

編集:ここにブートチャートの例があります: http://img191.imageshack.us/img191/1049/localhostkarmic20100815.png (または直接の場合はこれ動作しませんでした: http://yfrog.com/f/5blocalhostkarmic20100815p/

5
viraptor

ブートのブロックは仕様です。ウレアダヘッドのポイントは、ブートに必要なすべてのデータを事前にプリロードすることです。これを行う理由は、ディスクが遅くなる主な理由はシーク時間です-低速のハードドライブでも50 MB /秒以上の読み取りをプッシュアウトできるはずですが、シークする必要がある場合は数十 ミリ秒 シークあたり-劇的に減少します。ウレアダヘッドは、事前に実行することで、シークを最小限に抑えることができるため、ブートに必要なすべてのデータの読み取りに必要な時間を最小限に抑えることができます。

だから、 理想的 bootchartは、I/O使用率が100%であるureadaheadのように見え、その後、他のすべてが起動して(ディスク)I/Oを使用しません。このブートは実際には達成できません。特に、私たちが開始しているサービスの多くがディスクに書き込むためです。しかし、それはアイデアです。

ブートチャートを見ると、ureaheadが実際にディスクからデータを引き出すのに苦労しているようです-非常に低いスループットである多くの時間があります。それでも、その仕事の一部を行っているように見えます-ウレアダヘッドが起動した後、ブートはほとんどI/OバウンドではなくCPUバウンドであり、I/Oバウンドブートの大きなパッチがpreload起動します。

preloadを削除するか、ブートを再プロファイリングする¹、またはファイルの一部が非常に断片化されている、またはureaheadのバグである可能性があります。

1:/ var/lib/ureadaheadからpackファイルを削除すると、次回ブート時にureaheadが再プロファイリングされます。

4
RAOF