
500 Gb のディスクがあり、それを 3 つのパーティションに分割すると Linux のパフォーマンスに違いが出るかどうかを調べようとしています。つまり、同じディスクの異なるパーティションに複数のスレッドが書き込んでいる場合、最初のスレッドがディスク 1 のパーティション 1 に書き込んでいる場合、2 番目のスレッドは同じディスクのパーティション 2 に書き込むのを待たなければなりませんか?
答え1
ディスクは、物理的な書き込みヘッドを備えた物理デバイスです (SSD についてはここでは無視します)。一度に書き込める場所は 1 か所だけです。複数のスレッドが同時に書き込みを試みると、互いに競合し、ヘッドが正しい位置を探すためにより多くのシークを行う必要があるため、実際には全体的な速度が低下します。最速の書き込みは、隣接するセクターへの 1 回の長い連続書き込みです。
SSD には物理的な側面はありませんが、IO 速度には制限があります。スレッドを追加しても根本的なボトルネックは変わらないため、速度は上がりません。
これはすべて、特定のスレッドが最大速度で書き込みできる状態にあることを前提としています。アプリケーションが他のリソース (ユーザー入力、ネットワーク) に依存している場合は、スレッドを追加すると、それらのスレッドがディスクに書き込むデータを「キューに入れる」作業が増えるため、書き込みが高速になるように見えることがあります。
答え2
いいえ、逆です。一般的な磁気ハードディスクは、ディスクの互いに近い領域に書き込むときに最もパフォーマンスが高くなります。2 つの大きなファイルが、ディスクのほぼ同じ領域に 1 つ、非常に離れた部分に 1 つ書き込まれるという単純なケースを考えてみましょう。前者の場合、書き込みヘッドは実質的に連続的に移動できますが、後者の場合、2 つの離れたポイント間でヘッドを移動するのにかなりの時間がかかります。
一般的なファイルシステム ドライバーは、書き込みをいつどこで続行するかについて適切な判断を下せるよう、すでに高度に最適化されています。しかし、未処理の書き込みについてそれぞれが限定されたビューを持つファイルシステム ドライバーの 2 つのインスタンスを使用して、ディスクの完全に異なる領域に同時に書き込みを行う場合、こうした最適化の多くは失われます。
SSD (物理的な距離に対処するために多くの時間を費やさない) でも、一度に大きな領域を書き込む場合 (小さな書き込みをここで行い、次に小さな書き込みをあちらで行うのではなく、ブロック全体にまたがる) はパフォーマンスが向上します。したがって、SSD の場合でも、単一のファイルシステムの方が、別々のパーティションにある複数のファイルシステムよりもパフォーマンスが向上することが期待できます。
パーティションのアイデアが、1つのファイルシステムがいっぱいになっても他のファイルシステムへの書き込みがブロックされないようにしたい(各フォルダに異なる最大スペースを予約する)というものであるなら、単一ファイルシステムにも解決策があります。その場合、探しているキーワードは次のとおりです。クォータ。