Linuxは同時ディスクIOをどのように処理しますか?


12

Linuxサーバーが多数の異なるファイルを読み取るための多数の同時要求を処理している場合、次のことを行います。

  1. File_1にシークし、ファイル全体を読み取ってからFile_2にシークし、ファイル全体を読み取ってからFile_3にシークするなど

  2. File_1をシークし、その一部を(先読み値まで?)読み取り、File_2をシークし、その一部を読み取り、File_1に戻ってシークし、続きを読み取り、File_3にシークします。等

2番目の場合、サーバーは必要以上に多くのシークを実行しているため、処理速度が大幅に低下します。その場合、私ができるチューニングはありますか?

回答:


14

ディスクI / Oにはエレベーターと呼ばれるものがあります。ディスクサブシステムは、プラッター全体でディスクヘッドがスラッシングされるのを回避しようとします。I / O要求を並べ替えて(バリアなどで禁止されていない場合)、ヘッドがディスクの内側から外側に移動し、要求されたI / Oを途中で実行します。

2つ目は、I / O要求のマージです。ファイルのさまざまな部分にアクセスする短い時間枠内に多くの要求がある場合、I / Oサブシステムはいくつかのばらばらな要求を発行する代わりに、すべてのデータを一度に取得しようとします。

チューニングに関しては。あなたがアプリケーションの作成者であれば、できることはたくさんあります。fsync()などを使用できる場合はいつでも、大規模な順次I / Oを発行できます。データがプラッター上にあることを確認する必要がある場合。

あなたがシステム管理者であり、2つのアプリのデータリクエストが飛び跳ねて、ファイルを順番に読み取ろうとしていることを完全に知っている場合(たとえば、2つのDVDを並行してトランスコードしている場合)、はい、先読みの増加が役立つはずです。それ以外の場合は、チューニングを行う前に、I / Oパターンとサイズを確認し、RAIDレベル(ある場合)およびその他の要因を検討する必要があります。実際のボトルネックを確認してください。チューニングを開始する前に、システムを実際に制限しているものを推測するのは難しいかもしれません。


5

Linuxでは、独自のスケジューリングアルゴリズムを定義できます。さまざまな可能性があります。学校でそれについて説明する必要がありました。RedHatのこの記事は、私を大いに助けてくれました。Red Hat専用ですが、これらのスケジューラは事実上すべてのLinuxディストリビューションにあります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.