とにかく、仮想メモリとは何ですか?

LinuxとSolarisでの仮想メモリの監視の違いについて書くつもりでしたが、仮想メモリとは何か、およびSolarisとLinuxの違いについていくつかの基本から始めることが有益であると考えました。

LogicMonitor _-_ prod3la _-_ Dashboard

仮想メモリは、現在のすべてのオペレーティングシステムで使用されています。 これは単に、プログラムが要求するメモリアドレスが仮想化されていることを意味します。必ずしも物理メモリアドレスに関連しているとは限りません。 プログラムは、メモリアドレス1000の内容を要求する場合があります。 コンピュータは、アドレス1000の現在のマップが指している場所を調べ、そのアドレスの内容を返します。 (仮想アドレス1000は物理アドレス20にマップできます。)もちろん、メモリが仮想化されている場合、プログラムがアドレス指定できると考えるすべてのアドレスについて、サーバー上に実際に物理メモリを用意する必要がないことを意味します。サーバーが物理的に持っているよりも多くのメモリを持っていると信じることができます。 仮想メモリアドレスは、プログラムによって割り当てられるまで、何にもマップする必要はありません。 また、仮想メモリアドレスは、ストレージ用のメモリの物理ブロックではなく、ハードドライブ上のブロックにマップできます。

したがって、オペレーティングシステムに2Gの物理メモリがあり、1.5Gのメモリを使用するプログラムがロードされていて、ユーザーがメモリ内の1.5Gのデータを使用する別のプログラムを起動しようとするとどうなりますか? 少し単純化するために、最初のプログラムが使用しているメモリページが物理メモリからディスクにコピーされ、XNUMX番目のプログラムを実行するのに十分なメモリが解放されます。 その後、最初のプログラムを再度実行する必要がある場合、XNUMX番目のプログラムのデータは仮想メモリのディスクバックアップ部分に書き込まれ、最初のプログラムのデータはディスクから読み込まれ、再度実行されます。 もちろん、ハードドライブにアクセスして仮想メモリブロックの内容を取得するのは、物理メモリにアクセスするよりもはるかに遅いため、オペレーティングシステムはディスクでバックアップされた仮想メモリの使用を回避しようとします。

使用される用語は、スワッピングとページングのXNUMXつです。 Linuxでは、これらは同義語として使用されますが、Solarisやその他のより由緒あるオペレーティングシステムでは、 スワッピング 最も使用されていないメモリブロックの一部だけでなく、プロセス全体をディスクでバックアップされた仮想メモリに移動することを指します。 (スワッピングは、CPUでの仮想メモリマッピングのハードウェアサポートよりも前のものです。)

ページング より多くの物理メモリを解放するために、メモリの一部(必ずしもプロセス全体とそのメモリである必要はありません)を物理メモリからディスクバックアップメモリ​​(スワップパーティションまたはスワップファイル)に移動するプロセスです。 オペレーティングシステムは、ページアウトするメモリを選択するためにさまざまなアルゴリズムを使用する場合があります(たとえば、最も最近使用されていないメモリブロックなど)。たとえば、プログラムは正常に実行されているが、OSのメモリが少なくなっている場合、しばらくアクセスされていないという理由だけで、初期化とディスクへのロードを担当するプログラムの部分。 (そして、プログラムの実行中にこれらのメモリページに二度とアクセスされない可能性が非常に高いので、これは良い選択です。また、ページアウトされるメモリがディスクから読み込まれ、変更されていない場合は、変更されません。スワップスペースに書き込まれ、物理メモリから削除されたばかりです。OSは、元のディスクの場所から再度読み込むことができることを認識しているためです。)

そして最後の問題–Solarisはスワップスペースも仮想化します。 したがって、一部の物理メモリは実際にはスワップスペースとして使用され、ディスクに割り当てられたスワップスペースも使用されます。仮想化されたスワップスペースの一部として使用される物理メモリの量は、メモリの需要に応じて変化するため、仮想スワップのサイズはスペースが変わります。

したがって、ディスク上の仮想メモリを使用してメモリの見かけの物理サイズを増やすことは良いことですが、スワップは問題を引き起こす可能性があります。 通常、問題を引き起こすのはメモリのページングではありません。システムが次のことを試みたときです。 つかいます ディスクから物理メモリにブロックを読み戻す必要があるため、現在ディスクによってバックアップされているメモリが問題になります。もちろん、ディスクアクセスはメモリアクセスよりもはるかに低速です。 したがって、OSが実行するために常にディスクからメモリをコピーする必要がある場合は、それをディスクにコピーして戻し、ディスクから新しいメモリスペースをロードします(スラッシングと呼ばれます)。これにより、システムがクロールする可能性があります。 したがって、スワップの使用は悪くありませんが、 アクティブ ディスクにマップされているメモリを使用すると、パフォーマンスが低下する可能性があります。 (したがって、スワップパーティションへのディスクIOの割合は、パフォーマンスの問題を示します。)そしてもちろん、スワップを完全に使い果たす(つまり、システムメモリ全体に空き領域がない)ことも悪いことです。

私たちが時々耳にする質問のXNUMXつは、「私にはたくさんの物理メモリがあります。 スワップスペースを無効にする必要がありますか? そうすれば、スワッピングやページングの問題が発生しないことを確認できます。」

簡単な答え:いいえ。常にスワップを利用できるようにする必要があります。 ディスクに安全にスワップアウトできるページが常に存在し、めったにまたは二度とアクセスされないため、アクティブな使用がファイルシステムのキャッシュと同じである場合でも、アクティブな使用のためにより多くの空き物理メモリが可能になります。 (したがって、ディスク上にメモリとして機能するスペースがあると、ディスクを読み取る必要がないように、より多くのメモリを使用できます!)そしてもちろん、スワップがあると、使用可能な仮想メモリがはるかに多くなり、メモリが不足する可能性が低くなります。メモリ不足のキラーはランダムなプロセスを強制終了します。

 そこで、スワッピングとページングとは何か、なぜそれが重要なのか、そしてそれがどのような問題を引き起こす可能性があるのか​​について話しました。 次条 効果的に監視する方法について説明し、LinuxとSolarisで必要な監視を比較します。