web-dev-qa-db-ja.com

Linux:「ページ違反のページング」と「手動で有効にしたスワップ」の違い

Linuxマシンでは、次のようなコマンドでスワップを有効にできます

Sudo fallocate -l 500M /data/swapfile
Sudo chmod 600 /data/swapfile
Sudo mkswap /data/swapfile
Sudo swapon /data/swapfile

ただし、これが有効になっていない場合でも、ページがメモリにない場合、カーネルはページングを実行します。

これを確認するには、sar -B 1 30コマンドは、スワップファイルを設定せずにマシン上で実行します。

03:08:40 AM  pgpgin/s pgpgout/s   fault/s  majflt/s  pgfree/s pgscank/s pgscand/s pgsteal/s    %vmeff
03:08:41 AM      0.00      0.00      3.00      0.00     44.00      0.00      0.00      0.00      0.00
03:08:42 AM      0.00      0.00     19.00      0.00     30.00      0.00      0.00      0.00      0.00
03:08:43 AM      0.00      0.00      0.00      0.00      3.00      0.00      0.00      0.00      0.00
03:08:44 AM     24.00      0.00      2.00      1.00      7.00      0.00      0.00      0.00      0.00
03:08:45 AM    364.00     60.00     18.00      3.00      4.00      0.00      0.00      0.00      0.00
03:08:46 AM    140.00      0.00    392.00      2.00    243.00      0.00      0.00      0.00      0.00

トリガーするmajfltがまだあります ディスクへのデータのページング ディスクからのデータのページング。

私の質問は:

  • OSのスワッピングには2つのタイプがあると言えますか?
  • 2つのメカニズムはどのように異なるのですか?
  • 常にページングメカニズムが機能しているのに、なぜ手動でスワップを有効にする必要があるのですか?

私は知っています 一部の人々は言った

スワッピングとは、プロセスアドレス空間全体をコピーすること、またはいずれにしても、共有できないテキストデータセグメントをスワップデバイスにコピーすること、または一度にコピーすること(通常はディスク)を指します。

一方、ページングとは、アドレススペースの1つ以上のページをコピーイン/コピーアウトすることを指します。特に、これははるかに細かい粒度です。たとえば、1 GB RAMアドレス空間に〜250,000の4 KBページがあります。

ただし、本 Linux Virtual Memory Managerの理解 では、Linuxではこのようには見えません。

厳密に言えば、「スワップ」とはプロセスのアドレス空間全体をディスクにコピーし、「ページング」で個々のページをコピーすることを指しているため、Linuxはスワップしません。 Linuxは、最新のハードウェアがページングをサポートしているため、実際にはページングを実装していますが、従来、ディスカッションやドキュメントではスワッピングと呼ばれていました。 LinuxでのWordの使用と整合性を保つために、私たちもWordをスワッピングと呼びます。

誰かがこれに光を当てることができますか?ありがとう!

6

majfltがまだあるため、ディスクへのデータのページングがトリガーされます。

それは逆です。主な障害はページ障害であり、ディスクからのデータのページングinによってのみ対処できます。

OSのスワッピングには2つのタイプがあると言えますか?

結構です。ここでの違いは、paging out(メモリの内容を「どこか別の場所」にコピーして、ページを破棄できるようにする)で、異なるバッキングストアを使用できることです。メモリ内のページには、ページングアウトの異なるターゲットがあります。マップされたファイルは通常、独自のバッキングストアです。他のほとんどのページでは、バッキングストアとしてスワップファイルまたはパーティションが必要です。スワッピングは後者を指します。カーネルがメモリのページを解放する必要があるときに、変更されていないページをファイルから解放したい場合は、必要なときにいつでもページをファイルから復元できることがわかっているため、ページを破棄できます。変更されたページをファイルから破棄する必要がある場合、そのファイルが共有なしで読み取り/書き込みにマップされていると、ページは破棄される前にファイルに書き込まれます。この場合も、カーネルはファイルからページを復元できることを認識しています。それ以外のものは他の形式のストレージを必要とするか、破棄することができません。

2つのメカニズムはどのように異なるのですか?

上記を参照。

常にページングメカニズムが機能しているのに、なぜ手動でスワップを有効にする必要があるのですか?

上記を参照してください。スワップのポイントは、まだ独自のバッキングストアがないページにバッキングストアを提供することです。

参照 なぜLinuxはVMにスワップ領域が必要なのですか?

4
Stephen Kitt

あなたの2つの引用は、スワップの歴史的/元の意味を持っています。ウィキペディアページング

1960年代、スワッピングは初期の仮想メモリ技術でした。 プログラム全体はRAM)からディスクに「スワップアウト」(または「ロールアウト」)され、別のプログラムがスワップイン(またはロールイン)されます。

Intelマニュアルは明確です:

オペレーティングシステムまたはエグゼクティブでページングが適切に実装されている場合、物理メモリとディスク間のページのスワッピングは、プログラムの正しい実行に対して透過的です。

(16ビット仮想8086モードでも透過的に機能することを説明し続けます...)

AMDには、非常に読みやすいパーツもあります。

最後に、システムソフトウェアはページングメカニズムを使用して複数の大きな仮想アドレススペースをはるかに少ない物理メモリにマッピングできます。各アプリケーションは、32ビットまたは64ビットの仮想アドレス空間全体を使用できます。システムソフトウェアは、最も頻繁に使用される仮想メモリページを物理メモリページの使用可能なプールにアクティブにマップします。最も使用頻度の低い仮想メモリページは、ハードドライブにswapped outです。このプロセスはデマンドページング仮想メモリと呼ばれます。

ハードドライブにスワップアウトしないセットアップは考慮しません。その場合、LFUはファイルに(もしあれば)書き戻すか、削除(クリーンの場合)する必要があります。


少し関連しているのは、この新しい64命令です。

SWAPGS命令は、システムソフトウェアがシステムデータ構造へのポインタをロードするための高速な方法を提供します。 SWAPGSは、SYSCALL命令の結果として、または割り込みや例外の結果としてシステムソフトウェアルーチンに入るときに使用できます。

...

この交換により、システムカーネルソフトウェアはメモリ参照中にGSセグメントオーバーライドプレフィックスを使用してカーネルデータ構造にすばやくアクセスできます。

それは常にこれに戻りますsegmentation

セグメンテーションはソフトウェアとデータの再配置と保護に大きな柔軟性を提供しますが、メモリの分離と再配置をソフトウェアとハ​​ードウェアのページングの組み合わせサポートで処理する方が効率的であることがよくあります。このため、最新のシステムソフトウェアのほとんどは、セグメンテーション機能をバイパスしています。ただし、セグメンテーションを完全に無効にすることはできませんであり、セグメンテーションメカニズムを理解することは、ロングモードシステムソフトウェアの実装に重要です。


つまり、このページ単位のRAMからのスワッピングと、スワッピングのコンテキストスイッチ側は、60年代の実装だけでなく、最新のSWAPGS命令にも反映されていると言えます。

0
rastafile