パフォーマンスのためにパーティションとファイルを交換しますか?


62

パフォーマンスにとって何が良いですか?ディスクの内側に近いパーティションはアクセス時間が遅くなり、ドライブがOSパーティションとスワップパーティションを切り替えるのを待つ必要があります。

一方、スワップパーティションはすべてのファイルシステムをバイパスし、ファイルへの書き込みよりも高速なディスクへの直接書き込みを許可します。

パフォーマンスのトレードオフとは何ですか?

固定サイズのスワップファイルを使用すると、どの程度違いが生じますか?

スワップパーティションに変更する方が長くなりますが、スワップパーティション上にある場合はスワップファイルであった場合よりもパフォーマンスが向上しますか?


単なる好奇心から。カーネルバージョン、RAM、パーティション、ファイルシステムスキームなどのシステム詳細を提供できますか?
バイキー09年

どのOSをお探しですか?
マチューシャトー

4
Linuxの情報については、lkml.org / lkml / 2005/7/7/326を
Adam Monsen

質問の回答の更新はありますか?
kokbira

回答:


29
  1. ハードディスクでは、ディスクの先頭に向かってスループットとシークが高速になることがよくあります。これは、データがディスクの外側の領域の近くに格納されているためです。したがって、ディスクの先頭にスワップを作成すると、パフォーマンスが向上する場合があります。

  2. 2.6 Linuxカーネルの場合、スワップパーティションと断片化されていないスワップファイルのパフォーマンスに違いはありません。swaponによってスワップパーティション/ファイルが有効になっている場合、2.6カーネルはswapfileが保存されているディスクブロックを検出するため、スワップするときはファイルシステムをまったく処理する必要はありません。

したがって、swapfileが断片化されていない場合、同じ場所にスワップパーティションが存在するかのようになります。別の言い方をすれば、スワップパーティションをそのまま使用するか、ファイルシステムでフォーマットしてからすべてのスペースを埋めるスワップファイルを作成した場合、パフォーマンスは同じになります。カーネルが直接使用します。

そのため、ファイルシステムが新鮮なときにスワップファイルを作成する場合(つまり、断片化されていないことを確認し、ボリュームの先頭にある場合)、パフォーマンスはボリュームの直前にスワップパーティションがある場合と同じになります。さらに、どちらかの側にファイルがある状態でボリュームの中央にスワップファイルを作成すると、スワップのシークが少なくなるため、パフォーマンスが向上する可能性があります。

Linuxでは、少なくともext3 / 4などの通常のファイルシステムでは、スワップファイルが断片化されずに作成され、展開されない場合、断片化することはできません。常に同じディスクブロックを使用しますが、これは連続しています。

専用のスワップパーティションの唯一の利点は、拡張が必要な​​場合にアンフラグメンテーションが保証されることです。スワップが拡張されない場合、新しいファイルシステムで作成されたファイルは追加のパーティションを必要としません。


5
ここで追加する唯一のことは、マシンが「ディスクにサスペンド」するように設定されている場合、実際に行われていることは、メモリ内の内容がスワップに書き込まれることです。これが機能するためには、スワップがアクティブなファイルシステム上に存在することができないため、スワップはそれ自身のパーティション上になければなりません。したがって、サーバーがある場合は、おそらくこの機能を使用せず、喜んでスワップファイルを使用できます。ラップトップをお持ちの場合、ハイバネーションのために「ファイルにサスペンド」できるように、おそらくスワップパーティションが必要でしょう。
ネイサンS.ワトソン-ヘイ

@ NathanS.Watson-Haighすでにスワップされているデータはどうなりますか?捨てることはできません。
XTF

3
@ NathanS.Watson-Haighソースをリンクできますか?Ubuntu 17.04はデフォルトでスワップファイルを使用します。「ディスクにサスペンド」できなかったら驚くでしょう。
マティアスワイラー

22

実際、スパースファイルを使用しない限り、大きな違いはありません。

ddを使用して「通常の」ファイルを作成すると、1回の実行でファイルが割り当てられます(可能な場合)。スパースファイルを作成すると、10GBのファイルが横たわっていますが、実際にすべてのスペースを使い果たしていないことがわかります。とにかくmkswapがスペースを割り当てないかどうかはわかりませんが、通常、スワップファイルは時間とともに成長し、したがってディスクの一部として連続セクタを割り当てませんが、必要に応じてブロックを割り当てます時間の経過に伴う断片化(もちろん、ディスクの使用状況に応じて)

内部的には、Linuxカーネルは、スワップファイルの基礎ブロックに多かれ少なかれ直接アクセスします。現在、内部で発生しているリンクを見つけることができません。誰かがより公式なものを見つけない限り、このリンクを信頼する必要があります。私が今思いつくことができるのは次のとおりです:

これはすべて、Linuxカーネルの2.6行にのみ適用されます。

最適なパフォーマンスが必要な場合(そして実際、それは何ですか?...スワップが遅い、期間。最高のパフォーマンスのためにスワップしないようにRAMを増やしてください)、パーティションを使用することをお勧めします。


18
swaponの最新バージョンは、swapとしてフォーマットされたスパースファイルの処理を完全に拒否します。これは、ファイルに穴があるためです。
ティムポスト

3

これは興味深い質問であり、ほぼ同じように読んでいます。一般的に、スワップパーティションは、ファイルシステムの基礎により、ファイルよりも優れています。ただし、スワップのサイズを常に増やす必要がある場合は、ファイルの方が適しています。カーネル2.4までは、スワップパーティションはファイルよりも高速であると考えられていましたが、カーネル2.6の改善により、パフォーマンスはほぼ同じになりました。

インターネットでも見つけたもの。

http://www.go2linux.org/swap-file-vs-swap-partition

そして

http://www.sunmanagers.org/pipermail/summaries/2005-November/006913.html


ただし、これらのリンクはどちらも、決定の背後にある理由を実際に説明していません。
ビル・グレー

その理由は、ファイルの基礎となるファイルシステムのオーバーロードが発生するためです。ファイルを作成すると、断片化される可能性があります。また、スワップでキャッシュされているファイルによっては、それ自体がスワップファイルシステムであるパー​​ティション全体と比較して、読み取りが遅くなる可能性があります。
バイキー09年

さらに掘り下げて、ウィキの関連記事を見つけました。あなたを支援するために、確認できるスワップ調整パラメータはほとんどありません。また、Linuxの実装の説明を確認してください。役立つかもしれません。 en.wikipedia.org/wiki/Paging
Viky 09年

上記のWikiリンクの引用の1つに従って、同じ問題に関する興味深いスレッドを見つけました。確認したいかもしれません。lkml.org/lkml/2005/6/28/427
Viky

私は質問でファイルシステムのオーバーロードについて言及しましたが、内部ディスクの近くにパーティションを置くほどパフォーマンスは低下しません。その遅延は、ファイルシステムのオーバーヘッドよりも大きいでしょう。
ビル・グレー

2

現在の段階では、一時停止/スリープ時にスワップにデータを書き込む構成でラップトップを実行している場合を除き、スワップは本当に「最後の手段」と見なされるべきです。最善の策は、十分なRAMをボックスに入れて、ディスクにページングしないようにすることです。

そうは言っても、ファイルはより柔軟性がありますが、パーティションはパフォーマンスの点でおそらくより良い方法です。7200+ RPMスピンドル上にあることを確認してください。


1
アクセス時間が遅延の要因になることが多いのに、なぜパーティションのパフォーマンスが優れているのでしょうか?
ビルグレー

5
ファイルを使用すると、より多くの頭の動きが必要になる可能性があるためですパーティション。これにより、アクセス時間(バルクスループットと同等)が差別化要因になります。
デビッドスピレット2009年

2
「休止状態にする必要がない限り、スワップを構成しないでください」は、物議を醸すビューです。システムの実メモリスワップが少ない場合、システムを回復できることがあります。スワップがないと、膨大なメモリ割り当てを行うプログラムの実行を制限できますが、実際にはそのほとんどに触れません(たとえば、特定のデバッグツール)。使用されているがアイドル状態のメモリ領域がディスクキャッシュとしてより適切に使用される場合があり、スワップが利用可能な場合にのみそのトレードオフを行うことができます。議論については、unix.stackexchange.com / questions / 2658 /…を参照してください。
アノン

1
@アノンが言ったこと。Chromeは悪名高いメモリの浪費であり、タブが100個未満でも、メモリ使用率が約90%でスワップファイルがない場合、16 GBのラップトップは数分間応答しなくなります。驚くべきことに、Ubuntuには、OSのメモリが不足していることをユーザーに警告する組み込みのメカニズムがありません
ダンダスカレスク

2

私たちの仕事の考え方は、スワップファイルが断片化される可能性があり、断片化がスワップアクセスを遅くするので、パーティションがより良いアプローチであるということです。もちろん、静的なサイズのスワップファイルを定義することもほとんど同じことをしますが、これは主観的に見た目が良いようです。

このアプローチは正しい方法ですか?おそらくそうではありません。10年近く前に慣行が確立されたからです。介在する年のドライブテクノロジーにおける唯一の大きな変化は、使用するRAIDコントローラーの複雑さです(SSDにはまだ十分な機能がありません)。ドライブサイズの増加は、18GBドライブが標準出荷されていたときよりも、作成するスワップパーティションがドライブの開始点に近いことを意味するため、スワップ速度は昔よりもさらに速くなります。

もちろん、ESXベースのWindowsシステムでは、スワップファイルの位置は完全に無意味です。スワップファイルと物理ディスクプラッタの間には非常に多くの仮想化レイヤーが存在するため、重要ではありません。ただし、これは単なる標準であるため、別のパーティションに保持します。


4
カーネルは直接mmapアプローチを使用し、ファイルを拡大または縮小することはないため、スワップファイルは断片化されません。ただし、仮想化に関するコメントについては+1です。多くの場合、問題ではありません。
parasietje

0

スワップファイルを使用すると、ファイルからメモリへの変換に少し余分なメモリが使用される場合があります。1GBのスワップにつき1MB未満のメモリについて話しています。ファイルシステムキャッシュは、スワップされたデータをキャッシュせず、組織データのみをキャッシュします。これは、追加のメモリ要件のほとんどであるはずです。

それに加えて、1回の追加ヘッドシークの1000回に1回を除き、合理的なパフォーマンスを失うことはないでしょう。

おもしろいことに、zswapを動的に拡張するスワップファイルと組み合わせて使用​​すると、使用されていない間はほとんどコストをかけずにスワップ操作が大幅に高速化されます。


1
申し立てに何らかの正当性を提供できますか?これはかなり逸話的なようです。
オースティン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.